Cisco STP

From HackerNet
Revision as of 12:54, 17 April 2016 by Helikopter (talk | contribs)
Jump to: navigation, search

IEEE 802.1D. STP blockar portar på switchar så att det skapas en logisk trädtopologi och på så sätt hålls ethernetsegment loopfri. Enheter som använder STP skickar BPDU-meddelanden mellan varandra för att utbyta information. Den BPDU som är superior har företräde och övriga kan ignoreras. För att avgöra vilken som är bäst jämförs följande värden i skriven ordning: Root Bridge ID, Root Path Cost, Sender Bridge ID, Sender Port ID, Receiver Port ID (RPID följer ej med i BPDUn utan switchen själv vet ju detta). Det första värdet där det skiljer sig avgör och lägst vinner. BPDUer skickas ej på non-designated portar eftersom de inte är superior och därmed onödiga att skicka.

Varenda port på varenda switch i STP sparar superior BPDUn på det segmentet. Non-designated portar sparar BPDU från andra sidan och Designated portar sparar sin egen BPDU. Kommer det inte in någon BPDU innan MaxAge (minus MessageAge) har gått ut måste STP räkna om. Rotbryggan avgör dessa timers. Root Path Cost skickas med i varje Hello och genom att addera det med costen på interfacet där Hellon kom in vet switchen hur långt det är till rotbryggan.

Se även Cisco MST.

Timers

Det finns flera olika typer av timers som skickas med i BPDUerna. MessageAge är en uppskattning på hur länge sedan BPDUn lämnade rotbryggan (med detta satt till 0). Övriga switchar brukar plussa på 1 innan de skickar det vidare. MaxAge, HelloTime och ForwardDelay är värden satta på rotbryggan, har andra switchar andra värden konfigurerade spelar det ingen roll för det är rotbryggan som bestämmer. Hellos skickas default var 2 sekund.

Process

STP-processen börjar med att alla switchar ser sig själva som root och skickar ut Hellos. Sedan görs följande val:

  1. Root Bridge: Lowest BID = Priority + MAC (Den ursprungliga STP-varianten hade ej med VLAN ID)
  2. Root Port: Av alla BPDUer på alla portar vilken är superior. Dvs bästa vägen bandbreddsmässigt till rotbryggan, en per nonroot switch.
  3. Designated Port: Superior BPDU på ett segment
  4. Non Designated: Övriga

På rotbryggan finns det ingen root port utan alla är designated. STP-processen slutar aldrig utan varje BDPU som kommer in ska jämföras.

Interface states

När nätverket konvergerar kan portar byta mellan Blocking och Forwarding men detta kan inte göras direkt utan att riskera tillfälliga loopar. Därför går interfacen igenom olika tillstånd. Längden på transitory statesen avgörs av ForwardDelay, 15 sek default.

State Forwards data frames Learns source MACs of received frames Stable
Blocking No No Stable
Listening No No Transitory
Learning No Yes Transitory
Forwarding Yes Yes Stable
Disabled No No Stable

Topology Change

Det finns en slags BPDU i 802.1D som heter TCN (Topology Change Notification), den används för att informera övriga om en förändring. Detta skickas om: det kommer in en TCN BPDU på en designated port, en port går från Learning till Forwarding eller Blocking, en switch blir rotbrygga. Kom ihåg att vanliga BPDUer som inte är superior ignoreras därför måste en TCN skickas till root (görs genom root port) som sedan kan skicka ut det till alla. En TCN skickas med varje Hello tills en TCA (Acknowledgement) fås som svar, sedan gör nästa switch samma sak till det når root. Rotbryggan sätter nu TC-biten i sina utgående BPDUer som instruerar övriga att förkorta Aging Time till ForwardDelay för att påskynda konvergens.

Konfiguration

Bridge ID med VLAN

spanning-tree extend system-id

Detta är default och går ej att ta bort på nyare switchar för det konsumerar fler MAC-adresser.

Cost
802.1D-2004, 1G = 20000

spanning-tree pathcost method long

802.1D-1998, 1G = 4

spanning-tree pathcost method short

Root Bridge

Konfigurera root brygga

spanning-tree priority
spanning-tree root primary

Portar

Root Port och Designated Port

cost
priority

Restart the protocol migration process

clear spanning-tree detected-protocols

PVST

Per VLAN Spanning Tree.

PVST-processen skiljer sig lite grann:

  • Root Bridge: Lowest BID (Priority + VLANID + MAC)

Tillägg

Det finns många tillägg till Spanning-tree som kan öka stabilitet och säkerhet. Dessa agerar fristående från varandra förutom att de går att konfigurera ihop.

PortFast

Med PortFast definierar man edge ports, dessa går direkt till forwarding när de kommer upp och inget topology change event genereras. En edge port skickar ut BDPUer men förväntar sig inga tillbaks. Om det kommer in en BPDU slutar porten vara edge port och återgår till normal tills interfacet går down/up. Används för anslutningar ut till servrar och andra end hosts. Ibland är PortFast ett måste pga att DHCP hinner timea ut innan porten blivit forwarding.

Globalt, aktiveras på alla portar i operational state: access

spanning-tree portfast default

Per interface, on/off

spanning-tree portfast
spanning-tree portfast disable

Vill man ha portfast på en trunk måste man ställa det per interface

spanning-tree portfast trunk

Kör aldrig portfast mot andra switchar! MST och RSTP har tekniker för att vara snabba ändå.

BPDU Guard

Error disable interface om det kommer en BPDU.

Globalt, skyddar alla PortFast-portar

spanning-tree bpduguard default

Per interface, on/off

spanning-tree bpduguard enable
spanning-tree bpduguard disable

Auto recovery

errdisable recovery cause bpduguard 

Root Guard

Skydda så att ingen annan än den enhet man själv har konfigurerat kan bli root genom att ignorera superior BPDUer som kommer in på portar med Root Guard påslaget. Om det kommer in en superior BPDU så hamnar porten i root-inconsistent blocking state och frames varken forwardas eller tas emot. Porten går automatiskt tillbaka när dessa BPDUer slutar att komma in.

Per interface

spanning-tree guard root

BPDU Filter

En edge port skickar BPDUer som vanligt enligt Hello-interval men om det inte finns något som talar STP på andra sidan är detta onödigt. Med BPDU filter påslaget slutar switchen att skicka BPDUer efter 10 obesvarade (det skickas även en BDPU direkt vid link up så 11 totalt). Porten är dock beredd på att behandla BPDUer och BDPU filter inaktiveras ifall det kommer in en BPDU. Detta gäller på edge portar om man har spanning-tree portfast bpdufilter default. Man kan hårdställa BPDU filter om man t.ex. ska splita ett nätverk i olika STP-domäner, detta görs per interface och inga BPDUer kommer att skickas eller behandlas.

Globalt, gäller alla PortFast-portar

spanning-tree portfast bpdufilter default

Per interface, hard on/off

spanning-tree bpdufilter enable
spanning-tree bpdufilter disable

Loop Guard

Unidirectional links kan ställa till det för en L2-domän. Med Loop Guard stoppar man den vanliga STP-konvergeringen för root och alternate portar. Eftersom det ska komma in BPDUer på vissa portar är det inte normalt att det plötsligt inte gör det längre utan att länken har gått ner. Loop Guard förhindrar dessa portar från att bli designated utan de hamnar istället i loop-inconsistent blocking state. När det kommer BPDUer igen återgår de till normalt.

Globalt, skyddar alla root- och alternate-portar

spanning-tree loopguard default

Per interface

spanning-tree guard loop

Bridge Assurance

Bridge Assurance är en utökning till Loop Guard och det fungerar med RSTP och MST. Slår man på det skickas det alltid BPDUer oavsett port state och BPDUerna används som en Hello-mekanism för att se om grannen lever. Kommer det inte in någon BPDU hamnar porten i BA-inconsistent blocking state tills BPDU åter mottages. Detta skyddar även vid loopar orsakade av switchar som slutat prata STP men ändå forwarderar frames.

Global

spanning-tree bridge assurance

Per interface

spanning-tree portfast network 

Others

Dispute mechanism innebär att role och state hos porten som skickar en BPDU skickas med i BPDUn så andra sidan vet att den inte pratat med en designated port på en designated port. Då hamnar porten i discarding state. Detta är påslaget default och behöver inte konfigureras. Fungerar dock inte med de äldsta varianterna av STP.

UDLD
Se även UDLD