
Spanning Tree Protocol ( STP ), günümüzde bilgisayar ağlarında en yaygın kullanılan protokollerden birisidir. STP protokolü, Radia Perlman ( The Mother of the Internet ) tarafından geliştirilmiştir.
STP protokolü “plug-and-play” yani hiçbir yapılandırmaya gerek olmadan tak-çalıştır bir protokoldür. Birçok markada bu protokol açık olarak gelmektedir. Yönetilemez switch cihazları STP protokolünü desteklemez.
STP protokolünü anlamak için “Loop (Döngü)” kavramını bilmemiz gerekmektedir. Bir döngü, bir ağ için tehlikeli olabilir. İki farklı döngü tipi bulunmaktadır. Bunlar Layer-3 ve Layer-2 döngüleridir. Üçüncü katmandaki döngüler için bir koruma mekanizması vardır. Bu koruma mekanizmasının IPv4 karşılığı “TTL (Time-to-Live)” değeridir. IPv6 karşılığı ise “Hop-Limit” değeridir. Kısaca, üçüncü katmanda paketin bir yaşam süresi vardır. Bu süre dolduğunda, gelişen döngü kırılacaktır. İkinci katmanda ise döngüyü kırmak için “STP” protokolü geliştirilmiştir. Bu protokol, oluşabilecek döngü sorunlarını önceden öngörerek, döngü çıkmadan döngüyü engellemeye çalışır.
Layer 2 seviyesinde oluşabilecek döngünün nelere yol açacağını görmek için bir uygulama gerçekleştirelim. Aşağıdaki topolojimizde üç switch ve her switch’te bir bilgisayar olmak üzere toplamda üç bilgisayarımız bulunmaktadır. Topolojimiz üzerindeki switch cihazları üzerinde STP protokolünün çalışmadığını varsayalım.

Örneğimizde, “192.168.1.10” adresli cihaz ile “192.168.1.20” adresli cihaz arasında haberleşme sağlayacağız. “192.168.1.10” adresli cihaz, “192.168.1.20” adresli cihazın MAC adresini bilmediği için Address Resolution Protocol (ARP) mesajı gönderecektir. “ARP Request” mesajları broadcast türündedir.
Switch, “192.168.1.10” adresli cihazın “ARP Request” mesajını alacaktır. Bu mesaj broadcast olduğu için switch, çerçevenin geldiği arayüz haricindeki diğer tüm arayüzlere bu çerçeveyi iletecektir.

“192.168.1.10” cihazından gelen “ARP Request (Broadcast)” mesajını hem Switch-1 hem de Switch-2 cihazları alacaktır. “ARP Request (Broadcast)” mesajını alan cihazlar, çerçevenin geldiği arayüz haricindeki diğer tüm arayüzlere bu çerçeveyi iletecektir.

İlk bakışta fark etmemiş olabilirsiniz, ancak bu topolojide bir “LOOP” başladı. Döngüye neden olan arayüz aşağıdaki görselde işaretlenmiştir.

Switch-1 ve Switch-3, 192.168.1.10 adresli cihazın “ARP Request (Broadcast)” mesajını birbirlerine gönderdiler. Bu mesaj, çerçevenin geldiği arayüz haricindeki diğer tüm arayüzlerden tekrar gönderildi. Gönderilen çerçeveler Switch-2 cihazına ulaştı. Switch-2, gelen “Broadcast” mesajını, geldiği arayüz hariç diğer tüm arayüzlerden iletecektir.

Switch-1 ve Switch-3 birbirlerine gönderdikleri, 192.168.1.10 adresli cihazın “ARP Request ( Broadcast )” mesajını çerçevenin geldiği arayüz haricindeki diğer tüm arayüzlerden tekrar gönderdiler. Bu gönderilen çerçeveler Switch-2 cihazına geldi. Switch-2 cihazı gelen “Broadcast” mesajını geldiği arayüz hariç diğer tüm arayüzlerden çıkartacaktır.

Görseli incelediğimizde, “192.168.1.10” adresli cihazın “192.168.1.20” cihazına gönderdiği “ARP Request (Broadcast)” isteği, ağımızda oluşan döngü yüzünden tekrar kendine döndü. Bu döngü, cihazlar çalıştığı veya döngüye neden olan arayüz kapatılmadığı sürece sonsuza kadar devam edecektir. Topolojimizde üç bilgisayar bulunuyor. Bu senaryoyu kurumsal bir ağda düşündüğümüzde, sadece bir cihaz değil, belki de yüzlerce cihaz “ARP Request (Broadcast)” göndererek döngüye neden olabilir. Bu sorun, hem son cihazları hem de switch cihazlarının kapasitesini doldurur. Belli bir süre sonra, switch cihazları artık cevap veremeyecek duruma gelir ve ağ kullanılamaz hale gelir. İşte bu döngünün neden olduğu soruna “Broadcast-Storm” denir.
“Broadcast Storm” sorununun, yani döngünün neden olduğu bir diğer sorun ise “MAC Address Instability” sorunudur.
Switch cihazları, “MAC Adres” tablosu veya “Content Addressable Memory ( CAM )” tablosu tutan ve ikinci katmanda çalışan cihazlardır. Bu tabloya cihazların MAC adreslerini eklerken, cihazlar tarafından gönderilen çerçevelerin “Kaynak MAC adreslerine” bakar ve bu adresleri tablosuna ekler. Şimdi, yukarıda verdiğimiz örneğe cihazların hangi arayüzlere bağlı olduğunu da ekleyerek “MAC Address Instability” sorununu daha iyi anlayabiliriz.

Switch-2, gelen çerçeveden “192.168.1.10” IP adresine sahip cihazın MAC adresini “FastEthernet 0/1” portuna yazacaktır.

“192.168.1.10” adresli cihazın “ARP Request (Broadcast)” mesajı döngü nedeniyle “GigabitEthernet 0/1” ve “GigabitEthernet 0/2” arayüzlerinden tekrar gelecektir. Switch, gelen çerçevelerde kaynak MAC adresine bakacak ve “192.168.1.10” IP adresli cihazın MAC adresini “FastEthernet 0/1” portundan silecek, ardından “GigabitEthernet 0/1” ve “GigabitEthernet 0/2” portlarına ekleyecektir. Bu süreç döngü devam ettikçe devam edecektir ve bu da switch cihazını, tıpkı “Broadcast Storm” gibi, yoracaktır.
*** Sadece “Broadcast” mesajları bu soruna yol açmaz; ayrıca “Unknown Unicast Frame” yani switch’in hedef cihazın MAC adresini bilmediği durumlarda, bu unicast mesajı broadcast olarak çerçevenin geldiği arayüz hariç diğer tüm arayüzlere yollanacaktır. Eğer STP çalışmazsa, yukarıdaki örnekte olduğu gibi yine “Broadcast Storm” meydana gelecektir. ***
Örneğimizde STP protokolünün olmadığını varsaymıştık. Şimdi de STP protokolünün çalıştığını varsayarak örneğimizi tekrar gerçekleştirelim.
STP protokolü ağımızda çalıştığı için, ikinci katmanda döngüye neden olabilecek arayüz, ağ haberleşmesi başlamadan önce “Blocking-State” moduna alınacaktır. Bu sayede, olası bir döngü başlamadan önlenmiş olur. “Blocking-State” moduna alınmış bir arayüzden STP tarafından ağ trafiği geçmez.

Örnekte herhangi bir portu “Blocking-State” moduna alarak, oradan trafik geçmediği için döngüyü kırmış olduk. Ancak döngüyü kırmak için hangi arayüzü bu moda alacağımıza henüz karar vermedik. Buna karar vermeden önce bilmemiz gereken birkaç kavram vardır. Bu kavramlar, STP protokolü için son derece kritiktir.
İlk bilmemiz gereken kavram “Bridge-ID” değeridir. STP çalışan her switch cihazının bir ismi vardır. Bu isme “Bridge-ID” denir. Bu değer iki kısımdan oluşmaktadır. Bunlar:
BridgeID = BridgePriority.SwitchMAC
“BridgePriority” değeri 0 ile 65535 arasında değer alır. Varsayılanda bu değer 32768’dir. Daha sonra bu değeri değiştirme ihtiyacı hissedeceğiz.
Switch cihazının MAC adresini öğrenmek için yukarıdaki makaleme göz atabilirsiniz.
Bilmemiz gereken ikinci değer, “Path-Cost” değeridir. STP, bir arayüzü kapatacaksa en yavaş portu kapatmayı tercih eder ve bunu belirlemek için “Path-Cost” değerine bakar.
STP protokolü, hızlara karşılık gelen “Path-Cost” değerlerini atamıştır.
10Gbps –> 2
1Gbps –> 4
100Mbps –> 19
10Mbps –> 100
Görüldüğü gibi, bant genişliği arttıkça “Path-Cost” değeri azalır. Bu nedenle küçük bir “Path-Cost” değeri, STP için daha iyidir. Burada herhangi bir matematiksel hesaplama yoktur.
STP protokolü 1998 yılında çıkmıştır ve çıktığı dönemdeki “Local Area Network (LAN)” hızları genellikle yukarıda belirtilen hızlara kadar çıkmaktaydı. Ancak günümüzde LAN tarafında 25, 40, 100 hatta 400 Gbps gibi hızlara ulaşabiliyoruz. Bu nedenle “Path-Cost” değerleri, STP’den sonra geliştirilen Rapid Spanning Tree Protocol (RSTP) ile revize edilmiştir. RSTP ( IEEE 802.1W ) protokolü ile birlikte, “Path-Cost” değerleri matematiksel bir hesaplama ile belirlenmektedir.
Path-Cost = 2000000 / Bant Genişliği (Megabit cinsinden)
Örneğin, bant genişliğimizin 100 Mbps olduğunu varsayalım. Bu durumda “Path-Cost” değerimiz “200.000” olacaktır. Bant genişliğinin 10 Gbps olduğunu varsayarsak, “Path-Cost” değerimiz “20.000” olacaktır. Bant genişliği arttıkça, “Path-Cost” değeri azalır.
Bilmemiz gereken son değer ise “Port-ID” değeridir. Port-ID, STP’nin çalıştığı her porta verilen bir isimdir ve Bridge-ID’de olduğu gibi iki kısımdan oluşur:
Port-ID = PortPriority.PortNumber
PortPriority değeri 0 ile 255 arasında olabilir. Varsayılan olarak bu değer 128’dir.
STP protokolü, bir döngü söz konusu olduğunda, “Bridge-ID”, “Path-Cost” ve “Port-ID” değerlerine bakarak hangi arayüzün kapatılacağına karar verir. Switch cihazları, birbirleriyle “Bridge-ID”, “Path-Cost” ve “Port-ID” değerlerini paylaşmak için “Bridge Protocol Data Unit (BPDU)” mesajlarını kullanırlar. STP çalışan her switch, iki saniyede bir bağlı olduğu diğer switch cihazlarına “BPDU” mesajı gönderir.
STP protokolünü anlamak için bilmemiz gereken kavramları öğrendik. Şimdi de farklı senaryolar için STP protokolünün nasıl çalıştığını inceleyelim.

Yukarıdaki topolojide üç adet switch cihazımız bulunmaktadır. Daha önceki örneklerimizde de gördüğümüz üzere, bu topolojide bir döngü mevcut ve bu döngünün STP (Spanning Tree Protocol) tarafından kırılması gerekmektedir.
Bu sürecin ilk adımı olarak, switch cihazları “Root-Switch” seçimini gerçekleştirir. Her topolojide yalnızca bir adet “Root-Switch” bulunur. Kurumsal ağlarda “Root-Switch” genellikle “Omurga Switch” olarak seçilir, ancak bu seçim ağ yöneticisinin müdahalesi ile belirlenebilir. Switch cihazları ilk açıldığında, her biri kendisini “Root-Switch” olarak kabul eder. ( Bir Switch cihazı ortamda yalnız kalırsa da kendisini “Root Switch” kabul eder. )
“Root-Switch” seçimi yapılırken “Bridge-ID” değerine bakılır. En düşük “Bridge-ID” değerine sahip olan cihaz “Root-Switch” olarak seçilir.

Topolojimize tekrar bakalım ve hangi cihazın “Root-Switch” olabileceğini anlamaya çalışalım.
“Bridge-ID” değerinde ilk olarak “Bridge-Priority” değerine bakılır. En düşük “Bridge-Priority” değerine sahip cihaz “Root-Switch” olarak seçilir. Eğer “Bridge-Priority” değerleri aynı ise “MAC” adreslerine bakılır ve en küçük “MAC” adrese sahip olan cihaz “Root-Switch” olarak belirlenir.
Örneğimize baktığımızda, en düşük “Bridge-Priority” değerine sahip olan “Switch-1” cihazı “Root-Switch” olarak seçilecektir.
“Root-Switch” seçimini yaptıktan sonra “Port Rolleri” belirlenir. (Aslında “Root-Switch” seçiminden port rollerinin ve bloklanacak portun belirlenmesine kadar olan tüm süreç STP tarafından otomatik olarak gerçekleştirilir. Kısaca STP çok akıllı bir protokoldür bize çok iş düşmez 🙂
Port rolleri, “Root-Switch” cihazından aşağı doğru olacak şekilde belirlenir. “Root-Switch” cihazından aşağı giden portlara “Designated Port”, “Root-Switch” cihazına giden portlara ise “Root Port” denir.

“Switch-2” ve “Switch-3” cihazları bir adet “Root-Port” yani “Root-Switch” cihazına giden bir portları bulunuyor. İşte burada iki cihazda bu noktada bir döngü olabileceğine karar veriyorlar.

Switch-2 veya Switch-3 cihazlarından birisi döngüyü engellemek için ilgili portu “Blocking-State” durumuna getirecektir.
Port rollerini belirledikten ve “blocking-state” durumuna alınacak portun hangisi olacağına karar verdikten sonra, hangi cihazın portunu bu moda alacağına karar vereceğiz.
Bunun için “Path-Cost” değerini kullanacağız.
Path-Cost değeri düşük olan port açık kalacak, büyük olan port ise “Blocking-State” durumuna alınacaktır.
Şimdi de topolojimiz için farklı hızlar vererek hangi portların kapatılacağını inceleyelim.

Topolojimize baktığımızda, “Switch-2” cihazının bant genişliği 100 Mbps olarak verilmiştir. “Switch-3” cihazının bant genişliği ise 10 Mbps olarak belirtilmiştir. (Bant genişliklerinin yanında path cost değerleride verilmiştir.)
Daha önce de gördüğümüz gibi, düşük “Path-Cost” değeri daha yüksek bant genişliğini ifade eder. Bu durumda “Switch-3” cihazı portunu aşağıdaki gibi “Blocking-State” durumuna alacaktır.

Bir diğer durumda, hızların aynı olduğunu varsayalım. Aşağıdaki topolojide hızlar eşit olarak verilmiştir.

Eğer bant genişlikleri aynıysa, “Path Cost” değerleri de aynı olacaktır. Bu durumda cihazlar “Bridge-ID” değerine bakar. Bridge-ID değeri büyük olan cihaz, portunu kapatacaktır.

“Switch-2” ve “Switch-3” cihazlarının Bridge ID değerleri yukarıdaki görselde verilmiştir. Cihazlar öncelikle “Bridge-Priority” değerine bakarlar. “Bridge-Priority” değeri büyük olan cihaz portunu kapatacaktır. Burada “Bridge-ID” değerleri aynı olduğu için, bakılacak değer “Switch-MAC” adresi değeridir.
“Switch-2” cihazının “MAC” adresinin “Switch-3” cihazına göre daha küçük olduğunu varsayarsak, bu durumda yeniden “Switch-3” cihazı ilgili arayüzünü “Blocking-State” moduna alacaktır.
Şimdi de farklı bir duruma bakalım. Bu durumda topolojimizde iki adet switch ve yedeklilik için iki farklı bağlantı olsun.

Varsayalım ki, STP sürecinden sonra “Switch-3” cihazının portlarından birisini “Blocking-State” durumuna alması gerekiyor. Bu durumda “Port-ID” değerine bakar.
“Switch-3” cihazı için “Port-ID” değerleri aşağıdaki gibidir.
FastEthernet0/1 –> 128.1
FastEthernet0/2 –> 128.2
Bu durumda daha büyük “Port-ID” değerine sahip olan port “Blocking-State” moduna alınacaktır. Öncelikle “Port-Priority” değerine bakılır. Daha yüksek “Port-Priority” değerine sahip olan port “Blocking-State” durumuna alınacaktır. Eğer “Port-Priority” değerleri aynıysa, bu durumda “Port-Number” değerine bakılacaktır. “Port-Number” değeri büyük olan cihazın portu “Blocking-State” durumuna alınacaktır. Örneğimize baktığımızda, “Blocking-State” moduna alınacak port “Switch-3” cihazının “FastEthernet 0/2” arayüzü olacaktır.
*** “Priority” değeri, yöneticilere esneklik sağlar. Ağ yöneticisi bu değerlerle oynayarak hangi portun kapatılacağına karar verebilir.
STP protokolü, ağımız için “Loop-Free” ağlar oluşturmamızı ve “yedeklilik” sağlamamızı mümkün kılan bir protokoldür. STP protokolünün ikinci katmanda oluşabilecek “Loop” sorunlarını nasıl önlediğini gördük. Şimdi de “yedekliliği” nasıl sağladığına bakalım.
Aşağıdaki topolojimizde, “Kırmızı” ile belirtilen arayüz “Blocking-State” durumundadır.

“Yeşil” ile belirtilen arayüz normalde aktif olarak çalışmaktadır. Ancak bu hattın gittiğini varsayalım. Bu durumda, bu hattın gittiğini gören “Switch-3” cihazı, 30 saniye sonunda “Kırmızı” renk ile gösterilen arayüzü açar. Trafik artık buradan geçer. Bu da yedekliliği sağlar.
İkinci bir durumda, “Switch-2” cihazı ile “Root-Switch” olan “Switch-1” cihazı arasına bir “Unmanaged Switch” (yönetilemez switch) koyalım. (Yönetilemez switch cihazları “STP” protokolünden anlamazlar.)
Varsayalım ki “Unmanaged Switch” ile “Switch-1” arasındaki bağlantı koptu.

Böyle bir durumda, “Switch-3” cihazı “Root-Switch” ile bağlantısının koptuğunu anlayamayacağı için “Blocking-State” durumundaki arayüzünü hemen açmaz.
“Max-Age” isminde, STP’de kullanılan bir zamanlayıcı bulunmaktadır. Bu zamanlayıcı 20 saniyedir. Eğer 20 saniye içinde “Root-Switch” cihazından “Switch-3” cihazına “BPDU” mesajı gelmezse, “Switch-3” cihazı “Root-Switch” ile olan yolunu kaybettiğini anlar. Ardından, 30 saniye sonunda “Blocking-State” durumundaki portunu açar.
Bu örnekte toplam 50 saniye sonunda “Switch-3” cihazı, “Switch-1” cihazı ile tekrar haberleşmeye başlar.
Son durumda topolojimiz aşağıdaki gibi olsun.

Bu örnekte “Switch-2” cihazı “Root-Switch” ile olan bağlantısını kaybetmiş durumdadır. “Switch-3” ile olan bağlantısı da “Blocking-State” durumunda olduğu için her iki switch cihazıyla da haberleşmeye geçemeyecektir. Bu durumda yalnız kalan “Switch-2” cihazı, kendini “Root-Switch” olarak görmeye başlayacaktır.
“Switch-2” cihazı “Switch-3” cihazına “BPDU” mesajları göndermeye devam eder. Bu mesajları alan “Switch-3” cihazı, “Switch-2” cihazının kendisini “Root-Switch” olarak tanıttığını görür. “Switch-3” cihazı, “Switch-2” cihazından daha küçük “Bridge-ID” değerine sahip olan “Switch-1” olduğunu bilir. Bu yüzden burada bir sorun olduğunu anlar. Sorunun “Switch-2” cihazının “Root-Switch” ile olan bağlantısını kaybettiğini fark eder ve “Blocking-State” durumundaki portunu açar. “Switch-2” cihazı da “Root-Switch” cihazının kendisi olmadığını görür ve haberleşme kaldığı yerden sorunsuz bir şekilde devam eder.
STP çalışan bir switch cihazına bir cihaz bağladığımızda, öncelikle bir döngüye neden olabilecek durumların olup olmadığına bakılır. Bu, belirli bir süreçte gerçekleşmektedir. Bu süreçler aşağıdaki gibidir:

Cihazlar STP destekleyen bir switch cihazına takıldığında, öncelikle “Listening” durumuna geçilir. Bu durumda switch, takılan cihaza BPDU mesajları gönderir. Eğer switch cihazına bağlanan bir cihaz diğer bir switch ise, bu cihaz da BPDU mesajı alır. Ancak ucunda bir bilgisayar varsa, bilgisayarlar BPDU mesajlarından anlamayacakları için switch, BPDU mesajı almayacaktır. Bu durumda switch, ucundaki cihazın MAC adresini öğrenmez ve tablosuna yazmaz. Ayrıca frame geçirmez. 15 saniye sonunda herhangi bir döngü yoksa “Learning” durumuna geçilir.
“Learning” durumunda switch yine aynı şekilde BPDU mesajı alır ve gönderir. Ucundaki cihazın MAC adresini öğrenir. Ancak bu süreçte de frame geçirmez. “Learning” durumu 15 saniye sürer.
Eğer 30 saniye sonunda herhangi bir döngü yoksa, switch “Forwarding” durumuna geçer. Bu durumda BPDU mesajları gönderilir ve alınır, MAC adresleri öğrenilir. Ayrıca frame’ler geçmeye başlar.
Eğer bir döngü durumu varsa, switch “Blocking State” durumuna geçer. Bu durumda switch, ucunda başka bir switch cihazı varsa BPDU mesajı alır, ancak MAC adresini öğrenmez ve frame geçirmez.
Son olarak, portun kapalı olduğu bir durum vardır. Bu durumun STP süreci ile bir alakası bulunmamaktadır. Eğer port kapalıysa, cihaz BPDU göndermez veya alamaz, MAC adresi öğrenmez ve frame geçirmez.
STP her ne kadar “Loop-Free” ağlar oluşturmamızı ve “yedeklilik” sağlamamızı sağlasa da, “Load-Sharing” yapamaz ve sadece tek bir VLAN için çalışır. Ayrıca yavaştır; çünkü bazı durumlarda haberleşmenin normale dönmesi 50 saniyeyi bulabilir. Bu süreler kritik ağlar için önemli olmasa da, veri merkezi gibi ağlarda büyük bir sorun teşkil eder. Bu nedenle Cisco ve IEEE, STP tabanında kendi protokollerini geliştirmişlerdir. Bu protokoller aşağıdaki gibidir:
- RSTP ( Rapid Spanning Tree Protocol ) – IEEE
- PVST+ ( Per-VLAN Spanning Tree Protocol ) – Cisco
- RPVST+ ( Rapid Per-VLAN Spanning Tree Protocol ) – Cisco
- MSTP ( Multiple Spanning Tree Protocol ) – IEEE
- MST ( Multiple Spanning Tree ) – Cisco
Cisco Switch cihazları varsayılanda “PVST+” protokolünü kullanmaktadır.
Cisco Switch cihazlarında “Spanning-Tree” ile ilgili ayrıntılı bilgi görmek için aşağıdaki komutu kullanabiliriz.
Switch# show spanning-treeDaha fazla bilgisayar-ağları içeriği için takipe kalın…

Leave a Reply