Spanning Tree Protokolü Nedir? Nasıl Yapılandırılır? – Cemal Taner
08 Aralık 2019 Cemal Taner Cisco, Eğitim, Network, Sertifikasyon 0
Anahtarlardan oluşan yerel ağ yapısında fiziksel artıklık, yani hostların birbirleri ile iletişim kurarken yedek yolların bulunması ağda kesintisiz bir iletişim kurulmasını sağlar. Bir bağlantıda ya da anahtarda bir arıza durumunda ağda kesinti yaşanmaz. Aşağıdaki topolojide PC1’in dosya sunucu ile iletişim kurması için yedek yollar ve anahtarlar kullanılmıştır.
Yukarıdaki artıklı yapıda SW1 arıza yapsa bile PC1, sunucuya ulaşabilir. Ya da SW3 ile SW4 arasındaki port arıza yaptığında PC1 ile sunucu arasındaki iletişim SW1-SW2 üzerinden devam eder. Daha önce bahsettiğimiz ve günümüzde yaygın olarak kullanılan 3 katmanlı hiyerarşik yapıda (çekirdek, dağıtım, erişim katmanları) fiziksel yedekli yapı sıklıkla uygulanmaktadır. Fakat fiziksel artıklık, MAC veri tabanı tutarsızlığı(loop), çoklu çerçeve kopyaları(multipe frame copies) ve yayın fırtınası (broadcast storm) gibi sorunlar meydana getirir.
Anahtarların MAC adreslerini nasıl öğrendiğini daha önce görmüştük. Yukarıdaki şekildeki artıklı yapıda SW1’den SW2’ye hedef MAC adresi SW1’in MAC tablosunda olmayan bir çerçeve gönderilmiş olsun. SW2 çerçeveyi aldığında eğer çerçevenin hedef MAC adresi MAC tablosunda yoksa gelen port hariç tüm portlarından çerçeveyi taşırır. Yani çerçeve SW4’e iletilir. SW4 çerçeveyi aldığında eğer çerçevenin hedef MAC adresi MAC tablosunda yoksa gelen port hariç tüm portlarından çerçeveyi taşırır. Yani SW4 aldığı çerçeveyi sunucunun bağlı olduğu porta ve SW3’e iletir. SW3 çerçeveyi aldığında eğer çerçevenin hedef MAC adresi MAC tablosunda yoksa gelen port hariç tüm portlarından çerçeveyi taşırır. Yani çerçeve SW1’e iletilir. SW1 çerçeveyi aldığında eğer çerçevenin hedef MAC adresi hala MAC tablosunda yoksa gelen port hariç tüm portlarından çerçeveyi taşırır. Yani çerçeve SW2’ye iletilir. Böylelikle bir kısır döngü (loop) oluşur. Çerçevelerde IP paketlerindeki gibi bir TTL değeri olmadığı için bu kısır döngüye sebep olan bağlantı kesilinceye veya anahtar kapatılıncaya kadar loop devam eder.
Bu da ağ kaynaklarını tüketir, hatta ağın çalışmamasına bile yol açar. ARP isteği ve DHCP keşif mesajları gibi broadcastler de benzer şekilde yayın fırtınası (broadcast storm) oluştururlar. Bu sorunları engellemek için STP(Spanning Tree Protocol) geliştirilmiştir.
STP protokolü aşağıdaki şekilde görüldüğü üzere yedek yollardan biri üzerindeki portu engelleyerek (blocked) loop vb. sorunların önüne geçer. Bu şekilde tek bir yol var ve yedek yol yok gibi gözükse de herhangi bir arıza anında engellenmiş port, STP protokolü tarafından iletime geçirilerek ağda kesinti yaşanması engellenmiş olur.
Bloklanan porttan herhangi bir şekilde veri iletilmez. Fakat STP tarafından döngüleri engellemek için kullanılan BPDU(Bridge Protocol Data Unit) Köprü Protokol Veri Birimi çerçeveleri ise bloklanan porttan alınmaya ve gönderilmeye devam eder. STP, IEEE 802.1 D ile tanımlanmış açık bir standarttır.
Cisco anahtarlarda, ileride göreceğimiz STP çeşitlerinden PVST+ varsayılan olarak çalışır şekildedir.
STP, artıklı ağlarda döngü oluşmasını engellemek için hangi portun bloklanacağını belirlemek için bir algoritma kullanır. Buna göre ağdaki bir anahtar kök köprü (root bridge) olarak seçilir. Kök köprü belirlendikten sonra anahtarlardan kök köprüye giden yolların maliyet (cost) durumlarına göre portların rolleri belirlenir.
STP çalıştıran ağdaki tüm anahtarlar, hangi anahtarın en düşük köprü kimliği (bridge ID-BID) değerine sahip olduğunu belirlemek için birbirlerine 2 saniyede bir BPDU çerçeveleri gönderirler. Bu BPDU çerçeveleri anahtar BID ve root ID değerlerini içerir. Birbirleri ile BPDU çerçevelerinin takası sonucunda en düşük BID değerine sahip anahtar kök köprü (root bridge) olarak belirlenir.
BPDU çerçeveleri içerisinde BPDU’yu gönderen anahtarın BID değeri bulunur demiştik. BID değeri, köprü önceliği (bridge priority) ve gönderen anahtarın MAC adresi birleşiminden oluşur. Köprü önceliği manuel olarak belirlenerek te kök köprü anahtar ağ yöneticisi tarafından belirlenebilir. Aşağıdaki şekilde BID alanları görülmektedir.
Kök köprü belirlendikten sonra her anahtar kök köprüye giden en kısa yolu hesaplar. En kısa yol hesaplanırken maliyet (cost) değerini göz önünde bulundurur. Maliyet değeri anahtarlar arasındaki bağlantıların hızlardır. Kök köprü anahtara giden birden fazla yol varsa maliyeti en düşük yol tercih edilir. Kök köprüye giden en düşük maliyetli yolun seçimi ile anahtar portlarına değişik roller atanır. Aşağıdaki topolojiye göre portların rollerini görelim.
Root Portlar: Kök köprüye en yakın olan portlardır. Root portlar her anahtar için bir tane seçilir.
Designated Portlar : Her trunk bağlantı için bir tane designated port seçilir. Kök köprü seçilmeyen anahtarlardaki portlardan yine root port seçilmeyen port designated port seçilebilir. Kök köprüdeki tüm portlar designated porttur ve designated portlardan veri trafiği iletilir.
Alternate ve Backup Portlar : Kök köprü seçilmeyen bir anahtardaki bir port, root port ve designated port seçilmediyse alternate port olarak belirlenir ve döngüleri önlemek için engellenir. Bir portun alternate port olarak belirlenmesinde yine BID değeri göz önünde bulundurulur. Yukarıdaki şekilde neden S3’ün Fa0/5 portu alternate olarak belirlendi ve engellendi de S2’nin Fa0/8 portu designated port olarak seçildi derseniz S2’nin BID değerinin S3’ten daha düşük olduğunu görüyoruz.
Disabled Portlar: Ağ yöneticisi tarafından shutdown komutu ile kapatılmış portlardır.
STP, kök köprü belirlendikten sonra tüm anahtarlardan kök köprüye giden en kısa yolu belirler ve bunu belirlerken bir maliyet değeri kullanır demiştik. Maliyet değeri göz önüne alınırken port hızları temel alınır. Bu değerler varsayılan değerlerdir. Bu değerleri manuel olarak yapılandırarak port rolleri ağ yöneticisi tarafından belirlenebilir. Bir arayüzün varsayılan maliyetini deşiştirmek için spanning-tree cost maliyet değeri komutu kullanılır. Maliyet değeri 1 ile 200.000.000 arasında verilebilir.
Aşağıdaki tabloda port hızları ve maliyet değerleri verilmiştir.
Port Hızı IEEE Cost Değeri (1998’den önce) IEEE Cost Değeri (2004’den sonra)
10 Gbps 2 2000
100 Gbps – 200
1 Tbps – 20
Köprü önceliği, hangi anahtarın kök köprü olacağını belirlerken kullanılan bir değerdi. En düşük köprü önceliği aynı zamanda en düşük BID değeri anlamına da gelir. Genel yapılandırma modunda spanning-tree vlan 1 priority öncelik değeri komutu ile köprü önceliği manuel ayarlanarak kök köprü anahtar, ağ yöneticisi tarafından belirlenebilir. Öncelik değeri 0 ile 61440 arasında 4096’nın katları şeklinde artan bir değerdir. Yani 0-4096-8192-1288-16384-20480……….61440 aralığında dışındaki değerler kabul edilmez. Örneğin 24575 geçerli bir değer değildir. Cisco anahtarlarda varsayılan öncelik değeri 32768’dir. Anahtardaki mevcut VLAN, varsayılan VLAN 1 olduğu için köprü önceliği VLAN1 için 32768+1 = 32769 olur. Aynı şekilde VLAN 10 için köprü önceliği 32768+10 = 32778’dir. VLAN’ler için BID değerini, genişletilmiş sistem ID ile ayrıntılı göreceğiz.
STP PROTOKOL ÇEŞİTLERİ
STP protokol çeşitleri şunlardır;
IEE 802.1 D STP-1998: İlk geliştirilen STP standardıdır.
-CST :VLAN sayısından bağımsız olarak tek bir STP örneği oluşturur. Ortak Spanning Tree (Common Spanning Tree-CST), olarak bilinir.
PVST+ : Cisco’nun geliştirdiği ve sadece Cisco anahtarlarda çalışan her VLAN için STP örneği oluşturan standarttır.
802.1 S (MSTP): Çoklu VLAN’ları aynı spanning tree örneği içinde eşleştiren standarttır. Cisco’nun MSTP uygulaması
802.1 w (RSTP) : Rapid STP olarak bilinir. Klasik STP’den daha hızlı yakınsama (convergence) sağlar.
Rapid PVST+ : Cisco’nun PVST+ için geliştirdiği standarttır. Her VLAN için STP örneği oluşturur. Aynı zamanda PortFast, BPDU guard, BPDU filter, root guard ve loop guard yeni özellikler sunar.
Aşağıdaki tabloda STP protokollerinin karşılaştırılması görülmektedir.
Protokol Standart Kaynak İhtiyacı Convergence* STP Ağaç Sayısı
STP 802.1 D Düşük Yavaş Bir tane
PVST+ Cisco Yüksek Yavaş Her VLAN için bir tane
RSTP 802.1 w Orta Hızlı Bir tane
Rapid PVST+ Cisco Çok yüksek Hızlı Her VLAN için bir tane
MSTP 802.1 s, Cisco Orta veya yüksek Hızlı Her çoklu VLAN için bir tane
* Convergence: STP’nin çalışıp bütün seçimlerin bittiği, portların iletim ya da bloklandığı durumdur. Convergence bitinceye kadar veri iletişimi durur.
Cisco Standartı PVST+ (Per VLAN Spanning Tree Plus): Her VLAN’de ayrı STP çalıştırılması için Cisco tarafından geliştirilmiştir. Bir VLAN için engellenmiş port başka bir VLAN için iletimde olabilir. Özellikle yük dengeleme (load balancing) için ideal bir çözümdür. Aşağıdaki şekilde S3’ün Fa0/6 portu VLAN 1 için iletimde iken, VLAN 2 için bloklanmıştır. Yine S3’ün Fa0/8 portu VLAN 2 için iletimde iken, VLAN 1 için bloklanmıştır. Bunun gerçekleşmesi için ağdaki anahtarların yarısı VLAN 1 için kök köprü, diğer yarısı VLAN 2 için kök köprü olarak yapılandırılmalıdır. Şekilde S1 VLAN 1 için kök köprü, S3 VLAN 2 için kök köprü olarak belirlenmiştir.
PVST+ her VLAN için ayrı BID değeri sağlar. Bunun için daha önce gördüğümüz BID değerine genişletilmiş sistem ID ( VLAN değeri) eklenerek BID değeri elde edilir. Örneğin VLAN 2 için BID değeri= 32768+2 = 32770 ‘dir. Yine VLAN 100 için BID değeri 32868 olur. Aşağıdaki şekilde VLAN bilgisi eklenmiş BID alanları görülmektedir.
STP’nin çalışması ile anahtar portları beş farklı duruma geçerler.
Blocking (Engelleme) : Anahtar ilk açııldığında bütün portları bloklanmıştır. STP çalışmaya başlayınca BPDU’ları dinler ve işler fakat çerçeveleri iletmez. STP sonucunda port alternated olarak belirlenirse blocking moda geçer.
Listening (Dinleme) : Port döngü olmadığından emin olmak için BPDU’ları dinler ve işler Çerçeveleri iletmez fakat MAC tablosuna eklemek için hazırlar.
Learning(Öğrenme) : Bu aşamada artık döngü olup olmadığı öğrenilmiştir. Çerçeveler hala iletilmez fakat MAC tablosuna eklenir.
Forwarding (İletim) :Çerçeveler artık iletilmeye başlanır. Learning sonunda port alternated ise bloklanır, root veya designated ise iletimde kalır. BPDU alıp göndermeye devam eder.
Disable(Devre Dışı) :Ağ yöneticisi portu kapatmışsa STP işlemine katılmaz.
show spanning-tree summary komutu ile portların bahsedilen durumları görüntülenebilir.
Aşağıdaki şekilde portların durumları ve geçiş süreleri gösterilmiştir.
Yukarıdaki şekilde görüldüğü üzere blocking durumdan forwarding duruma geçmek için 50 saniye zaman geçmektedir. Ayrıca her port durumu değişikliğinde STP yeniden çalışmakta ve iletimdeki portlar bloklanmaktadır. Birkaç saniyenin bir sunucu için çok önemli olduğu günümüzde portun hemen forwarding duruma geçmesi için ileride göreceğimiz portfast özelliği kullanılır.
STP özellikli anahtarlarda herhangi bir yapılandırma yapmamıza gerek kalmadan STP protokolü çalışmaktadır. Fakat kök köprü anahtarın belirlenmesini anahtarlara bıraktığımızda, istemediğimiz bir anahtar kök köprü seçilebilir. Ağ yöneticisi olarak LAN tasarımında merkezde bulunan ve daha fazla işlemci ve bellek gibi kaynaklara sahip bir anahtarı kök köprü olarak belirlemememiz gerekebilir. Böyle bir durumda anahtara daha düşük bir öncelik (BID) değeri atarız. Köprü önceliğini belirlemek için iki yol vardır.
Birinci yolda anahtara bir öncelik değeri vermeden anahtarı birincil kök köprü olarak belirleyebiliriz. Bunun için spanning-tree vlan vlan-id root primary komutunu genel yapılandırma modunda kullanırız. Bu komutla anahtarın önceliği varsayılan değer olan 24576’ya ya da ağdaki başka bir anahtarın sahip olduğu tesbit edilen (BPDU ile) daha düşük bir öncelik değerine ayarlanır. İstersek ağdaki ikinci bir anahtarı yedek kök köprü (ikincil) olarak ayarlayabiliriz. Bunun için spanning-tree vlan vlan-id root secondary komutunu genel yapılandırma modunda kullanırız. Bu komutla anahtarın önceliği varsayılan değer olan 28,672 ’ya ayarlanır. Burada ağdaki diğer anahtarların öncelik değeri 32768 olarak varsayılır.
İkinci yolda öncelik değerini manuel olarak ayarlayarak BID değeri değiştirilebilir. Bunun için spanning-tree vlan vlan-id priority değer komutunu genel yapılandırma modunda kullanırız. Verilen öncelik değerinin 4096’şar aralıklarla 0 ile 61440 arasında olduğunu daha önce söylemiştik. Yaptığımız yapılandırmayı show spanning-tree komutu ile doğrulayabiliriz. Aşağıdaki şekilde, anlattığımız iki yol da kullanılarak köprü öncelik değeri ayarlanmıştır.
PortFast ve BPDU Guard Yapılandırması
Daha önce portların belirli durumlardan geçip 50 saniye sonra iletim moduna geçtiğini görmüştük. Bir porta sunucu, kablosuz erişim noktası, bilgisayar gibi bir host bağladığımızda yani portun access modunda olacağına emin olduğumuz durumlarda hemen iletim moduna geçmesini sağlayabiliriz. Böylelikle portun dinleme ve öğrenme durumları atlanmış olur. Bunun için Cisco’nun PVST+ içinde geliştirdiği PortFast özelliğini kullanacağız. Bu özelliği aktif etmek için, hemen iletime geçmesini istediğimiz arayüze girip spanning-tree portfast komutunu kullanıyoruz. Ama önce portu access moda almayı unutmayın yoksa portfast çalışmaz.
Dikkat ettiyseniz IOS bizi uyardı. Bu porta sadece host bağlayın, hub, switch, bridges vb. takmayın yoksa loop olur dedi. İşte olur da bu porta anahtar bağlarsak diye porta bir koruma koyuyoruz. Bunun adı BPDU Guard. Böylelikle ileride bu porta anahtar bağlanırsa gelen BPDU mesajları alınır fakat koruma sağlandığından döngü oluşmaz ve port error-disabled durumuna sokulur. Ağ yöneticisi porta bağlanan anahtar vb. cihazı söküp portu tekrar açmalıdır. spanning-tree bpduguard enable komutu ile BPDU Guard etkinleştirilir.
Portun BPDU Guard ile korunduğu ve kapatıldığı anda aşağıdaki mesaj konsolda görüntülenir.
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/1 with BPDU Guard enabled. Disabling port.
Cisco anahtarlarda varsayılan STP protokolünün PVST+ olduğunu söylemiştik. Anahtar destekliyorsa başka bir STP protokolünü etkinleştirebiliriz. Bunun için spanning-tree mode rapid-pvst komutunu kullanabiliriz. Böylelikle Cisco’nun PVST+nin daha gelişmiş sürümü Rapid PVST+’ı etkinleştirmiş olduk.