Spanning Tree Protocol (STP) aslında oldukça kapsamlı bir konu olmasına rağmen ben burada biraz daha ana hatlarıyla ve püf noktalarıyla değineceğim.
STP bir IEEE 802.1d protolü olmakla birlikte asıl amacı LAN switchler'de oluşabilecek olan sonsuz döngüleri engellemektir. Yani bir başka deyişle "broadcast storm" problemini engellemektir.
Broadcast storm, broadcast, multicast yada hedefi bilinmeyen unicast'ler'in LAN içinde sürekli olarak belirsiz bir şekilde loop'a girmesidir. Bunun sonucunda da bazı linkler, aynı frame'in pek çok kopyası ile doldurulmuş olur ve bu da son kullanıcı PC'lerinin çok sayıdaki broadcast frame'ini işlemek zorunda kalmasıyla performansını düşürür.
Neden STP 'ye ihtiyaç duyulmuştur?
STP her bir bridge yada switch'in port durumlarını Forwarding yada Blocking olarak belirleyerek bu döngüleri engeller. Forwarding durumdaki interface'ler normal bir şekilde frame alıp gönderirler, Blocking durumundaki inteface'ler ise STP mesajları hariç hiçbir frame alışverişine izin vermezler.
Forwarding durumundaki bütün portlar mevcut spanning tree yapısı içindedirler. Forwarding durumundaki portlar hep birlikte, Ethernet segmentleri arasında frame göndermek için tek bir path oluştururlar.
![]() |
Şekil1: Yedek Linklere Sahip Bir Ağda STP |
Yukarıdaki şekil üzerinde STP mantığını anlatıcak olursak; C bilgisayarından bir broadcast frame gönderildiğinde döngü oluşmaz. C, SW3'e frame gönderir (1.adım) ve SW3 bu frame'i sadece SW1'e yönlendirir (2.adım), çünkü SW3'ün Gi0/2 interface'i şekilde de görüldüğü üzere "Blocking" durumdadır. SW1 bu frame'i hem Fa0/11 hem de Gi0/1 arayüzünden gönderir (3.adım). SW2 de yine hem Fa0/12 hem de Gi0/1 arayüzünden gönderir (4.adım). Fakat SW3, SW2'den aldığı frame ile işlem yapmaz çünkü dediğimiz gibi bu frame SW'e Blocking durumda bulunan Gi0/2 inteface'inden gelmiştir.
Şekildeki STP topolojisinde olduğu gibi, switch'ler bu VLAN'daki trafik için SW2 ve SW3 arasındaki linki kullanamaz ki bunu STP'nin çok küçük bir dezavantajı olarak görebiliriz. Fakat, SW1 ve SW3 arasındaki link bir şekilde koparsa, STP bunu blocking/forwarding port durumlarını düzenleyerek telafi eder. Bunun için "STP convergence" deyimini kullanırız. Burada 'convergence' deyimi ile kastedilen; LAN topolojisinde herhangi bir değişilik meydana geldiğinde switchler'in müşterek olarak bunu fark etmesi ve portların blocking veya forwarding durumlarında değişikliğe gitmesidir.
STP Nasıl Çalışır?
STP algoritması frame'leri forward eden interface'leri "spanning tree" şeklinde oluşturur. Bu ağaç yapısı her Ethernet segmentine giren ve çıkan tek bir path yaratır, tıpkı büyüyen bir ağacın tabanından yapraklarına doğru giden tek bir yol gibi.STA yani "Spanning Tree Algorithm" çalışma mantığı gereği Forwarding durumunda olan interface'leri seçer ve diğerlerinin hepsini Blocking modda bırakır. Forwarding durumunda olan interface'leri seçmek için ise 3 kriter kullanır:
- STP bir "root switch" seçer ve bu switch'in bütün portlarını Forwarding duruma alır.
- Root switch dışındaki bütün switch'ler, kendinleri ile root switch arasındaki "administrative cost" u en düşük olan portu seçer ve STP bu portu root port (RP) olarak belirleyerek Forwarding duruma alır.
- Birden çok switch aynı Ethernet segmentine bağlı olabilir. Root switch ile kendisi arasındaki "administrative cost"değeri en düşük olan switch Forwarding duruma alınır. Her segmentteki bu en düşük cost'a sahip switch designated "designated switch" olarak adlandırılır ve bu swtich'in segmente bağlandığı port da "designated port" (DP) olarak adlandırılır.
Şöyle bir tabloda olayı özetleyebiliriz:
Portlar
|
STP Durumu
|
Açıklama
|
Root switch’in bütün
portları
|
Forwarding
|
Root switch birbirine bağlı
bütün segmentlerde desingated switch’tir.
|
Root olmayan switch’lerin
root portu
|
Forwarding
|
Root switch’e olan cost değeri
en düşük olan port
|
Her LAN’ın designated portu
|
Forwarding
|
Her segmentteki en düşük
costa sahip BPDU'yu forward eden switch.
|
Çalışan diğer bütün portlar
|
Blocking
|
Frame'leri forward etmeyen
bütün portlar
|
STP Bridge ID ve Hello BPDU
Spanning Tree Algoritması root switch seçimiyle başlar fakat bu seçimin nasıl yapıldığını anlayabilmek için önce STP mesajlarının konseptini anlamamız gerekir.STP Bridge ID (BID) her switchin kendine özgü 8 baytlık tekil değeridir. Bridge ID, 2 baytlık öncelik alanı (priority field) ve 6 baytlık sistem ID değerini içerir. Sistem ID ise her switchin MAC adres değerine dayalı olarak oluşturulmuş bir ID'dir. Böylece her switch için tekil olması sağlanmış olur.
STP, switch ve bridge'lerin bilgi alışverişi yapmak için gönderdikleri mesajları BPDU (bridge protocol data unit) olarak tanımlar. En meşhuru olan Hello BPDU mesajı, mesajı gönderen switchin bridge ID'sini içerir.Ayrıca mevcut root switchin Bridge ID'sini de listeler.
Root Switch Nasıl Seçiliyor?
Switchler root switch seçimini yukarıda bahsettiğim BPDU'lardaki bridge ID'ye göre yaparlar. En düşük bridge ID değerine sahip switch root switch olarak seçilir. Daha önce de bahsettiğimiz gibi iki kısımdan oluşan bride ID'nin öncelik değerini belirten ilk kısmı, root switch'i de belirliyor diyebiliriz; en düşük değere sahip olan switch root oluyor. Örneğin; iki switchten birisinin öncelik değeri 100, diğerinin 200 ise, değeri 100 olan switch MAC adres değerine (bridge ID değerini oluşturan ikinci kısım) bakılmaksızın root olur.
Eğer öncelik değerleri seçiminde bir düğüm oluşursa, bridge ID'deki en düşük MAC adres değerine sahip switch root olur. Örneğin iki switchten birinin MAC adresi 0020.0000.0000 , diğerinin 0FFF.FFFF.FFFF ise, ilk switch root olarak seçilir.
Root switch seçimi ise şu şekilde gerçekleşmektedir:
İlk olarak bütün switchler, Hello BPDU mesajlarına kendilerini root switch ilan eden bridge ID'lerini root ID olarak yerleştirerek gönderirler. Eğer bir switch, kendininkinden daha iyi bir (daha iyiden kastımız daha düşük değerde bir bridge ID) bridge ID duyarsa ki buna "Superior Hello" diyoruz, o zaman kendini root ilan etmeyi bırakır ve Superior Hello mesajını diğer switchlere iletmeye başlar.
En düşük değerli öncelik değerine sahip switch yolladığı Hello mesajlarında kendi Bridge ID'sini root ID olarak bildirir. Nihayetinde bütün switchler, en düşük yani en iyi bridge ID'ye sahip switchi belirler ve root olarak onu desteklerler. Aşağıdaki şekilde root switch seçimini özetleyecek olursak;
![]() |
Şekil 2: Root Seçim Sürecinin Başlangıcı |
Yukarıdaki senaryoda SW1, SW2 ve SW3 switchleri kendilerini root olarak ilan ediyor. Fakat SW2, SW1'in kendinden daha "iyi" olduğuna inanarak, artık SW1 kaynaklı Hello mesajlarını forward ediyor. Bu Hello mesajları SW1'in Bridge ID'sini root ID olarak listeler. Fakat bu noktada dikkat edilmesi gereken SW1 ve SW3'ün, ikisinin de hala kendilerini root sanması ve kendi BID'lerini BPDU içinde root ID olarak listelemeleridir.
Dolayısıyla bu senaryoda 2 aday mevcut root switch olmak için: SW1 ve SW3. Peki hangisi root switch olacak? Bu durumda seçimin nasıl olacağını yukarıda anlatmıştım: Bridge ID'ye bakılarak en düşük öncelik değerine sahip switch seçilir, eğer bu durumda bir düğüm oluşursa, en düşük MAC adres değerine sahip olan seçilir. Şekilden de gördüğümüz gibi SW1 daha düşük değerli bir bridge ID'ye sahip (32769:0200.0001.0001) SW3 ile karşılaştırıldığında (32769:0200.0003.0003). Dolayısıyla SW1 kazanır ve SW3, SW1'in kendisinden daha iyi bir seçim olduğunu kabul eder.
Aşağıdaki şekilde de switchler tarafından gönderilen Hello mesajlarının en son halini görüyoruz:
![]() |
Şekil 3: SW1 seçimi kazanıyor |
Root Port Nasıl Seçiliyor?
STP işleminin ikinci bölümü, root switch haricindeki diğer her bir switch'in tekil root portunu seçmesiyle başlar. Root port, root switche olan uzaklığı en an olan interface'e ait porttur.
Bu uzaklığı yani "cost" değerini hesaplamak için, switch gelen Hello mesajındaki cost değerini, aynı interface'e atanan STP port cost değerine ekler. STP port cost değeri; STP'nin , topolojiye eklemek için hangi interface'leri seçeceğine bir ölçüt sağlama amacıyla her interface'e atanmış basit bir integer değerdir.
LAN Segmentine Ait Designated Port Nasıl Seçiliyor?
STP'nin topoloji seçimindeki son basamak her bir LAN segmentine ait designated port seçimidir.
Designated port, LAN segmentine en düşük cost değerine sahip Hello mesajını duyuran switch portudur. Root olmayan switch bir Hello mesajı forward ettiğinde, bu mesajın "cost" alanını kendisinin root switche olan cost değeri olarak ayarlar. Sözün kısası; segmente bağlı bütün switch'ler arasında, root switche olan en düşük cost değerine sahip olan switch bu segmentte DP (designated port) olur.
Örneğin; şekil 3'e bakacak olursak; hem SW2 hem SW3 aynı segmentte Hello mesajları forward ediyorlar. Ayrıca yine ikisi de sıralı olarak root switche olan cost değerlerini (SW2 için 4, SW3 için 5 ) listeliyorlar ve sonuç olarak, SW2'nin Gi0/1 portu bu LAN segmentinde designated port oluyor.
Bütün designated portlar "forwarding" durumdadır dolayısıyla SW2'nin Gi0/1 interface'i de "forwarding" duruma alınır.
Eğer ilan edilen costlar arasında bi düğüm oluşursa, switchler, en düşük bridge ID'ye sahip switchi seçerek bu düğümü çözer. Bu senaryoda SW2 seçiliyor, bridge ID si 32769:0200.0002.0002 SW3'ün 32769:0200.0003.0003
Yukarıdaki şekillerde yola çıkarak oluşturulan aşağıdaki tabloda switchlerin her portunun durumu ve neden bu durumda oldukları gösterilmiştir:
Switch Interface
|
State
|
Interface neden “forwarding “
durumda
|
SW1, Gi0/1
|
Forwarding
|
Arayüz root switche ait
|
SW1, Gi0/2
|
Forwarding
|
Arayüz root switche ait
|
SW2, Gi0/2
|
Forwarding
|
Root port
|
SW2, Gi0/1
|
Forwarding
|
LAN segmentindeki designated port
|
SW3, Gi0/1
|
Forwarding
|
Root port
|
SW3, Gi0/2
|
Blocking
|
Root port yada designated port değil
|
Portları kendiniz konfigüre edebilir yada default değerleri kullanabilirsiniz. Aşağıdaki tabloda da IEEE tarafından tanımlanmış default port cost değerlerini göreceksiniz; Cisco da aynı değerleri kullanmaktadır. IEEE cost değerlerini yeniden düzenledi çünkü 1980'lerde tanımlanan orjinal değerler sonradan geliştirilen 10-Gigabit Ethernet'i destekleyecek nitelikte değildi.
Ethernet Hızı
|
Orijinal IEEE Cost Değeri
|
Düzenlenen IEEE Cost Değeri
|
10 Mbps
|
100
|
100
|
100 Mbps
|
10
|
19
|
1 Gbps
|
1
|
4
|
10 Gbps
|
1
|
2
|