Spanning Tree Protocol (STP) Nedir? STP Nasıl Çalışır?

Alper Ceviz
4 min readJan 15, 2024

--

Spanning Tree Protocol (STP), IEEE 802.1 standardına sahip olan, ağ yedekliliğinde oluşabilecek döngüleri önlemek amacıyla geliştirilmiş bir protokoldür. Ağımızda 2 adet Layer 2 switch olduğunu düşünelim. Kesintisiz bir ağ bağlantısı için yedekli bir şekilde ağımızı tasarladık. Bir kabloda sorun olursa hostlar diğer yedek kablodan iletişim kurabilecektir. Ancak yedekli yapı doğru bir şekilde kurulduysa. Switchler arasındaki yedeklilikte bir hata olursa loop oluşumu kaçınılmazdır.

Loop oluşumu durumunda switchler arasında ethernet frameleri sürekli döndüğü için ağ trafiği kontrol edilemez durumda olacaktır. Çünkü ethernet frameleri TTL (time to live) değerine sahip değildir. İki switch broadcast paketlerini interface dışındaki tüm portlardan ileteceği için broadcast storm (broadcast fırtınası) meydana gelecektir. Ağdaki A switchinde mac address tablosunda source ve destination mac adresi kayıtlı iken B switch’i broadcast paketlerini her iki portundan ilettiğinde A switch’i sürekli mac adres tablosunda sürekli port güncellemesi yapacağı için bir süre sonra loop oluşacak. İşte böyle bir durumun önüne geçmek için STP kullanılır.

STP aktif ise switchlere bağlanan kablolardaki portlardan biri otomatik olarak blocklanacak, ta ki iki portu aktif olan kabloda sorun olana kadar. Blocklanan porttan veri akışı olmaz ancak BPDU paketleri sürekli gelir ve gider.

STP Çalışma Prensibi

STP’nin çalışma mekanizmasını 4 aşamada inceleyebiliriz:

- Root bridge seçimi

- Root portların belirlenmesi

- Designated portların belirlenmesi

- Diğer portların blocklanması

Root bridge seçimi: STP, switchler arasında ağı izlerken 2 saniye aralıklarla gönderdiği BPDU paketlerinde bridge id, mac address, port id gibi bilgileri yer almaktadır. STP bu bilgilere göre, bridge id’si en düşük olan switch’i root bridge olarak seçer. Eğer bridge id, her iki switchte de aynı ise, mac adresi düşük olanı root bridge olarak belirler. Bu durum sadece layer 2’de bu şekilde belirlenir. Layer 3 switchler arasında, en yüksek bridge id’ye ya da mac address’ine sahip olan switch root bridge’tir.

Switch’in sahip olması gereken priority id 0 ile 61440 arasında 4096’nın katları şeklindedir. Bir switchte varsayılan priority değeri 32769’dur. Aslında normalde 32768, ama default durumda vlan 1 bridge olarak öncelikli olduğu için vlan id değeri de priority’e eklenmektedir.

Root portların belirlenmesi: Root port, root bridge’e bağlı en kısa yoldur. En düşük cost değerine sahip olan port root port olur. Eğer cost değerleri eşit ise root bridge’e erişen switchin port id’sine bakılır. Port id’si düşük olan port root port olacaktır. Bir bridge üzerinde sadece bir tane root port vardır.

Designated portların belirlenmesi: Switchler arasındaki yolda yalnızca bir tane designated port vardır. En iyi yani en düşük cost’a sahip olan porttur. Forwarding durumdadır. Root bridge’in bütün portları designated porttur.

Diğer portların blocklanması: Designated ve root port haricindeki diğer portlar döngüye neden olmaması için otomatik olarak blocklanır.

Tüm bu işlemlerin gerçekleştiği belli bir süre aralığına convergence time diyoruz. Convergence time boyunca hiçbir şekilde veri akışı gerçekleşmemektedir. Bu sürenin 20 saniyesi portun block durumdan listening aşamasına geçmesi, 15 saniyesi listening aşamasından learning aşamasına, kalan 15 saniyesi de learning’den forwarding’e geçmesidir.

STP ile ilgili teorik bilgilerin ardından pratikte de çalışma mantığını inceleyelim.

STP Konfigürasyonu

Yukarıdaki topolojide göreceğiniz üzere Switch1’in FastEthernet 0/2 portu blocklanmış porttur. SW1 bu durumda root bridge olarak belirlenmiş durumda. CLI içerisinde user exec modda iken show spanning-tree diyerek bunu görebiliriz.

Aynı zamanda SW1’in Fa0/1 ve Fa0/2 portları designated port olarak belirlenmiştir. Her 2 saniyede bir BPDU paketlerinin gönderiliyor olduğunu CLI’da görebiliyoruz. SW2’de de aynı komutu çalıştırdığımız zaman aşağıda göreceğiniz gibi Fa0/1 portu root bridge’e en yakın port olduğundan Root Port olarak belirlenmiş. Fa0/2 ise alternated port olacak şekilde pasifte ve blocklanmış durumdadır.

Cisco switchlerde STP otomatik olarak çalışır ve otomatik olarak root bridge, root port gibi değişkenler atanır. Ancak ağ topolojimizi kurarken root bridge’i kendimiz belirlemek isteyebiliriz. Bunu nasıl yaparız onu inceleyelim.

Root bridge SW2 olsun istiyorum. SW2’nin CLI’ına giriyorum. Global config mode’a geçiyorum. Ardından ilk alternatif olarak spanning-tree vlan 1 root primary komutunu yazıyorum.

Bu durumda tekrardan bir convergence (yakınsama) gerçekleşiyor. Root port, designated port gibi değişkenler belirleniyor.

Ardından Root Bridge’im artık SW2 oldu. Fa0/1 ve Fa0/2 portu root bridge olduğu için designated port oldu. SW1’in Fa0/2 portu alternated port konumuna, Fa0/1 portu ise root port konumuna geçti.

Son hali yukarıda olduğu gibidir. İkinci alternatif olarak root bridge belirlemede spanning-tree vlan 1 priority <priority değeri> komutunu kullanabilirsiniz.

Spanning tree’nin farklı modları da bulunmaktadır. Cisco switchlerde default olarak pvst+ etkindir. Spanning tree modları arasında geçiş yapmak için spanning-tree mode <mod_name> komutunu kullanabilirsiniz. Hangi modların olduğunu görmek için komuttaki mode sonrasında “?” koyarak istediğiniz modu oradan seçebilir ve o moda geçiş yapabilirsiniz. Spanning tree modlarına daha sonra değinilecektir.

Keyifli okumalar.

--

--

Alper Ceviz

I graduated from Metallurgical and Material Engineer. I’m interested in web development, system and networking.