Cisco STP
STP (IEEE 802.1D) och PVST blockar portar på switchar så att det skapas en logisk trädtopologi och på så sätt hålls ethernetsegment loopfria. Enheter som använder STP skickar BPDU-meddelanden mellan varandra för att utbyta information. De skickas till 01:80:C2:00:00:00/01:00:0C:CC:CC:CD. 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.
Contents
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:
- Root Bridge: Lowest BID = Priority + MAC (Den ursprungliga STP-varianten hade ej med VLAN ID)
- Root Port: Av alla BPDUer på alla portar vilken är superior. Dvs bästa vägen bandbreddsmässigt till rotbryggan, en per nonroot switch.
- Designated Port: Superior BPDU på ett segment
- 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.
PVST-processen skiljer sig lite grann:
- Root Bridge: Lowest BID (Priority + VLANID + MAC)
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, detta är default och går ej att ta bort på nyare switchar för det konsumerar fler MAC-adresser.
spanning-tree extend system-id
Cost
802.1D-1998, 1G = 4
spanning-tree pathcost method short
802.1D-2004, 1G = 20000
spanning-tree pathcost method long
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
Troubleshoot
debug spanning-tree events debug spanning-tree backbone fast debug spanning-tree pvst+
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.
Globalt, gäller alla PortFast-portar
spanning-tree portfast bpdufilter default
Man kan hårdställa BPDU filter per interface om man t.ex. ska splita ett nätverk i olika STP-domäner. Inga BPDUer kommer att skickas eller behandlas.
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. Detta är en Nexus-feature.
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 UDLD