Table of Contents

STP - Spanning Tree Protocol

Bridging loop

Komunikace PC-1 to PC-4

  1. Uvažujme, že PC-1 zná MAC adresu PC-4 a switche mají prázdné CAM tabulky.
  2. PC-1 pošle rámec s cílovou MAC (PC-4), oba sw ho přijmou na portu 1/1, a uloží si zdrojovou adresu PC-1 do CAM tabulky
  3. Jelikož adresa PC-4 není v CAM tabulkách, musejí sw rámec rozeslat všemi porty, kromě těch, na kterých rámec přijali
  4. Oba switche odešlou rámec z portů 2/1, PC-4 přijme dva rámce, každý switch zároveň přijme rámec od druhého switche.
  5. Oba switche si na základě přijatého rámce od druhého switche upraví záznam v CAM tabulce. Dle zdrojové adresy v rámcích se switche domnívají, že PC-1 je nyní v segmentu B na portech 2/1.
  6. Jelikož switche ještě neví, za kterým portem je PC-4 (PC-4 zatím nic nevysílal), musejí rámec, který přijaly od druhého switche, poslat na všechny porty kromě těch ze kterých jej přijaly. Tzn. ten samý rámec vyšlou z portů 1/1.
  7. Oba zase přijmou rámec odeslaný druhým switchem a opraví záznam v CAM (PC-1 je na portu 1/1).
  8. Tento rámec oba zase vyšlou z portu 2/1. Přijmou rámec vyslaný druhým switchem, opraví záznam v CAM (PC-1 je na portu 2/1).
  9. Dále se celý proces opakuje…

Broadcast storm

BPDU

Dva typy:

  1. Configuration BPDU
  2. Topology Chnage Notification (TCN) BPDU

Hlavička Configuration BPDU:

bytesfield Poznámka
2Protocol ID vždy 0
1Version vždy 0
1Message type Config/TCN
1Flags
8Root BID
4Root Path Cost
8Sender BID
2Port ID
2Message Age násobky 1/256s, tzn. 0-256s
2Max.Age násobky 1/256s, tzn. 0-256s
2Hello Time násobky 1/256s, tzn. 0-256s
2Forward Delay násobky 1/256s, tzn. 0-256s

Volba Root Bridge

Bridge ID (8 byte)

Voba Root Portu

Path Cost:

Link Bandwidth Old STP Cost New STP Cost
4 Mbps 250 250
10 Mbps 100 100
16 Mbps 63 62
45 Mbps 22 39
100 Mbps 10 19
155 Mbps 6 14
622 Mbps 2 6
1 Gbps 1 4
10 Gbps 0 2

Root Path Cost

Volba Designated portu

V případě stejných hodnot rozhoduje:

STP Stavy portů

Disabled

Blocking

Listening

Switch# show spanning interface fa 0/1
Vlan               Port ID                      Designated                  Port ID
Name               Prio.Nbr      Cost Sts      Cost  Bridge ID              Prio.Nbr
----------------- ------------- -------------- ---------------------------  --------
VLAN0001           128.1           19 LIS       0    32769 000a.f40a.2980   128.1

*Mar 16 14:31:15 UTC: STP SW: Fa0/1 new learning req for 1 vlans

Learning

Switch# show spanning interface fa 0/1
Vlan               Port ID                      Designated                  Port ID
Name               Prio.Nbr      Cost Sts      Cost  Bridge ID              Prio.Nbr
----------------- ------------- -------------- ---------------------------  --------
VLAN0001           128.1           19 LRN       0    32768 00d0.5849.4100   32.129

*Mar 16 14:31:30 UTC: STP SW: Fa0/1 new forwarding req for 1 vlans

Forwarding

Switch# show spanning interface fa 0/1
Vlan               Port ID                      Designated                  Port ID
Name               Prio.Nbr      Cost Sts      Cost  Bridge ID              Prio.Nbr
----------------- ------------- -------------- ---------------------------  --------
VLAN0001           128.1           19 FWD       0    32768 00d0.5849.4100   32.129

Jak ručně určit stav STP?

  1. Všem linkám určit cost
  2. Určit Root Bridge - switch s nejnižším Bridge ID
  3. Určit Root porty - 1 per switch, nejnižší root path cost
  4. Učit Designated porty - 1 per segment, nejnižší root path cost, v případě shody použít rozhodovací pravidla pro STP
  5. Určit Blocking porty - všechny porty, které nejsou root nebo designated

STP Timers

Konfigurují se centralizovaně (s vyjímkou TCN BPDU Hello Time) na root bridgi, protože hodnoty timerů jsou přenášeny v BPDU. Defaultní hodnoty jsou nastaveny na network diameter = 7, počítáno od root bridge (včetně). Změna těchto hodnot se doporučuje provádět pouze změnou net.diameteru na root bridgi, který si pak hodnoty přepočítá.

Hello Time

Forward Delay

Max Age

Topology Changes

TCN BPDU

TCN BPDU

byesfield
2Protocol IDvždy 0
1Versionvždy 0
1Message Type

Direct Topology Changes

(link down)

  1. Switch C a switch A detekují na svých portech(1/1 a 1/2) pád linky.
  2. Switch C zahodí “best BPDU”, které měl v paměti, protože BPDU bylo přijato portem, který nyní spadl. Běžně by se switch pokusil odeslat TCN z root portu, v tomto případě však root port spadl. V případě switche A se TCN neodesílá, protože switch je root bridge.
  3. Root bridge, switch A, rozešle Config.BPDU s nastaveným TCN flagem.
  4. Switche B a C po přijetí tohoto BPDU zkrátí platnost CAM tabulek na dobu Forward delay (15s).
  5. Switch C přijal BPDU na portu 1/2, který byl dosud blokován, přijaté BPDU je v tuto chvíli nejlepší ⇒ port se stane novým root portem a přejde do stavu forwarding.

Indirect Topology Changes

(link up, but no data can pass between switches)

  1. Switch A i C mají linku up, linkou však neprochází data a ani BPDU
  2. Nedošlo k chybě linky, neposílá se žádné TCN.
  3. Switch C má v paměti “best BPDU”, které předtím přijal z portu 1/1. Nyní však tímto portem žádné BPDU nepřichází a po vypršení času Max Age toto “best BPDU” není platné a je z paměti vymazáno.
  4. Dříve nebo později je přijato BPDU na portu 1/2, které je nyní nejlepší přijaté. Port 1/2 se stane root portem a přejde ze stavu Blocking přes Listening a Learning do stavu Forwarding.

Insignificant Topology Changes

(access port up/down)

  1. PC na portu 2/12 někdo vypne, switch detekuje pád linky.
  2. Switch C začne posílat TCN BPDU směrem k rootovi (portem 1/1)
  3. Root bridge jej potvrdí TCN ACK a pak rozešle Config.BPDU s TCN flagem.
  4. Toto BPDU způsobí, že switch B a C zkrátí platnost svých CAM tabulek, v tabulkách zůstanou záznamy jen aktivních spojení. Zkrácená platnost tabulek trvá po dobu Forward delay + Max age.

Typy STP

CST Common Spanning Tree

PVST Per-VLAN Spanning Tree

(Cisco)

PVST+ Per-VLAN Spanning Tree Plus

(Cisco)

Konfigurace STP

Defaultně - STP zapnuto.

Switch(config)# [no] spanning-tree vlan vlan-id
Switch(config-if)# [no] spanning-tree vlan vlan-id

STP Root Bridge

Root Bridge by měl být výkonný switch v centru L2 sítě. Nejlépe v distribuční vrstvě nebo blízko serverové farmy. Vždy je potřeba ručně nakonfigurovat root bridge a secondary root bridge, aby se předešlo nečekaným stavům.

Bridge ID

Jestliže switch nepodporuje 1024 MAC adres pro vnitřní použití, je defaultně použito rozšířené bridge ID. V opačném případě je def. použito standartní Bridge ID.

Switch(config)# [no] spanning-tree extended system-id

Ručně:

Switch(config)# spanning-tree vlan vlan-list priority bridge-priority

Bridge priority:

Pomocí makra:

Switch(config)# spanning-tree vlan vlan-id root {primary | secondary} [diameter diameter]
Switch(config)# spanning-tree vlan 1 root primary
vlan 1 bridge priority set to 24576
vlan 1 bridge max aging time unchanged at 20
vlan 1 bridge hello time unchanged at 2
vlan 1 bridge forward delay unchanged at 15

Příklad:

Switch_B(config)# spanning-tree vlan 100 root primary

Tímto příkazem se nám nepodaří udělat ze switche B roota, protože pokud si má nastavit o 4096 nižší prioritu, musel by si nastavit 104 - což není násobek 4096, jediná zbývající možnost by byla nula, tu ale nelze nastavit pomocí makra - musí se zadat ručně:

Switch_B(config)# spanning-tree vlan 100 priority 0

Nyní je priorita switche B 0+100=100.

Root Path Cost

Switch(config-if)# spanning-tree [vlan vlan-id] cost cost(1-65535)
Switch# show spanning-tree interface type mod/num [cost]
Vlan              Role Sts Cost       Prio.Nbr Type
----------------- ---- --- ---------- -------- -----------------------------
VLAN0001          Root FWD 4          128.1    P2p
VLAN0010          Desg FWD 4          128.1    P2p
VLAN0020          Root FWD 4          128.1    P2p

Port ID

Switch(config-if)# spanning-tree [vlan vlan-list] port-priority port-priority
Switch# show spanning-tree interface type mod/num

STP Timers

Manuální konfigurace:

Switch(config)# spanning-tree [vlan vlan-id] hello-time seconds(1-10,def.2)
Switch(config)# spanning-tree [vlan vlan-id] forward-time seconds(4-30,def.15)
Switch(config)# spanning-tree [vlan vlan-id] max-age seconds(6-40,def.20)

Automatická konfigurace pomocí makra:

Switch(config)# spanning-tree vlan vlan-list root {primary | secondary} [diameter diameter [hello-time hello-time]]

PortFast

(Cisco)

Globální konfigurace:

Switch(config)# spanning-tree portfast default

Konfigurace per-interface:

Switch(config-if)# [no] spanning-tree portfast

Makro pro access port:

Switch(config-if)# switchport host
Switch(config-if)# switchport host
switchport mode will be set to access
spanning-tree portfast will be enabled
channel group will be disabled
Switch# show spanning-tree interface type mod/num portfast
Switch# show spanning-tree interface fastethernet 0/1 portfast
VLAN0010          enabled

UplinkFast

(Cisco)

Switch(config)# spanning-tree uplinkfast [max-update-rate pkts-per-second(0-65535,def.150)]
Switch# show spanning-tree uplinkfast
Switch# show spanning-tree uplinkfast
UplinkFast is enabled
Station update rate set to 150 packets/sec.
UplinkFast statistics
Number of transitions via uplinkFast (all VLANs)             : 2
Number of proxy multicast addresses transmitted (all VLANs)  : 52

Name                  Interface List
--------------------- --------------------------------
VLAN0001              Gi0/1(fwd)
VLAN0010              Gi0/1(fwd)
VLAN0100              Gi0/1(fwd)

BackboneFast

(Cisco)

RLQ - Root Link Query protocol

Switch(config)# spanning-tree backbonefast
Switch# show spanning-tree backbonefast
Switch# show spanning-tree backbonefast
BackboneFast is enabled

Monitoring STP

Switch# show spanning-tree [detail]
Switch# show spanning-tree vlan vlan-id
Switch# show spanning-tree [vlan vlan-id] summary
Switch# show spanning-tree [vlan vlan-id] root
Switch# show spanning-tree [vlan vlan-id] bridge
Switch# show spanning-tree bridge brief
Switch# show spanning-tree interface type mod/num [detail]
Switch# show spanning-tree uplinkfast
Switch# show spanning-tree backbonefast

Protecting STP topology

Root Guard

Switch(config-if)# spanning-tree guard root
Switch# show spanning-tree inconsistentports

BPDU Guard

Globální konfigurace:

Switch(config)# spanning-tree portfast bpduguard default

Per-port konfigurace:

Switch(config-if)# [no] spanning-tree bpduguard enable
Switch# show spanning-tree summary
Switch# show spanning-tree summary totals

Loop Guard

Globální konfigurace:

Switch(config)# spanning-tree loopguard default

Per-port konfigurace:

Switch(config-if)# [no] spanning-tree guard loop
Switch# show spanning-tree summary

UDLD

(Cisco)

UniDirectional Link Detection

Jednosměrný spoj:

UDLD:

Normal mode - po detekci jednosměrnosti není funkce portu omezena, port je označen jako undetermined state a je vygenerována syslog zpráva

Aggressive mode - po detekci jednosměrnosti se switch pokusí ještě linku “profouknout”, začne posílat echo každou sekundu po dobu 8s, nepřijde-li ani jedna odpověď, port přejde do stavu errdisabled

Globální konfigurace:

Switch(config)# udld {enable | aggressive | message time seconds(7-90,def.7 or 15)}

Per-port konfigurace:

Switch(config-if)# udld {enable | aggressive | disable}

První konfigurace:

UDLD v EtherChannelu:

Switch# show udld interface type mod/num
Switch# udld reset

BPDU Filter

Switch(config)# spanning-tree bpdufilter default
Switch(config-if)# spanning-tree bpdufilter {enable | disable}
Switch# show spanning-tree summary