Kurumsal Network Kurulumu

Spanning Tree (STP) Nedir? RSTP, BPDU ve Ağ Döngüsü

Spanning Tree (STP) nedir, nasıl çalışır? Lab'da STP'yi kapattım: tek kablo 24 saniyede 30,9 milyon yayın paketi taşıdı. RSTP 0, klasik STP 35 saniye bekledi.

İlker Pehlivan

Spanning Tree (STP), switch’ler arasında birden fazla yol olduğunda bu yollardan birini bloklayarak ağda döngü oluşmasını engelleyen protokoldür. Yedek kablo çekmek ağı kopmaya karşı korur, ama STP olmadan aynı kablo ağı kilitler. Bu yazıda lab switch’imin iki portunu bir kabloyla birbirine bağladım; STP’nin döngüyü nasıl kestiğini, kapatınca neler olduğunu ve hızlı sürümü RSTP ile eski STP arasındaki farkı ölçtüm.

Bir süpermarket şubesinin arka deposundan satış alanına iki koridor açıldığını düşünün. Depo görevlisi üstünde “bütün reyonlara” yazan bir koliyi iki koridora birer kopya olarak gönderir. Satış alanındaki görevli de gelen koliyi, geldiği koridor dışındaki her yere dağıtır; kopyalardan biri öbür koridordan depoya geri döner. Kolinin üstünde yine “bütün reyonlara” yazar ve yeniden kopyalanır. Koliler çoğalır, koridorlar tıkanır. STP, yedek koridorun kapısını kapalı tutan kuraldır.

Spanning Tree (STP) benzetmesi: süpermarket şubesinin deposundan satış alanına iki yol çıkıyor; açık koridorda bir görevli bantlı duyuru kolisini arabayla geçiriyor, öbür yolun kanatlı kapıları kapalı, bir görevli elini kapıya dayamış ve yuvarlak pencerelerden içerideki ışık görünüyor
İki koridor da yerinde durur; biri açıktır, öbürünün kapısı kapalı bekler. STP de yedek bağlantıyı kaldırmaz, kapıda bekletir.

Bu yazı kurumsal ağ protokolleri rehberimizin yedeklilik protokolleri bölümünün ayrıntısıdır ve Kurumsal Network Kurulumu hizmetimizin bir parçasıdır. STP’nin switch kurulumundaki yerini switch yapılandırma rehberimizin döngü koruması adımında özetledik; burada konu, protokolün kendisi ve STP olmadan neyin bozulduğudur.

Spanning Tree (STP) Nedir? Yedek Kablo Neden Döngü Olur?

Spanning Tree, switch’lerin oluşturduğu bütün yolları tek bir ağaç yapısına indiren protokoldür. Her iki nokta arasında yalnız bir yol açık kalır; geri kalan yollar yedekte bekler. Ağaç tanımı gereği döngü içermez.

Yedek yol genellikle bilerek çekilir. İki switch arasına ikinci bir kablo, tek bir kablonun kopmasıyla bütün katın ağdan düşmesini önlemek içindir; bu riskin nasıl bulunduğunu tek nokta arızası yazımızda anlattık. Döngü ise bazen hiç istenmeden doğar: aynı switch’in iki prizini birbirine bağlayan tek bir kablo da döngüdür.

Döngünün tehlikesi Ethernet’in iki özelliğinden gelir:

  • Yayın herkese gider. Switch, yayın çerçevesini geldiği port dışındaki bütün portlara kopyalar. ARP soruları gibi yayınlar her ağda sürekli dolaşır; yayının nereye kadar ulaştığını ARP makalemizde ölçtük.
  • Çerçevenin ömrü yoktur. IP paketinin başlığında her router’da bir azalan TTL alanı vardır ve sıfıra inen paket atılır; bu sigortanın nasıl çalıştığını ICMP yazımızda gösterdik. Ethernet çerçevesinin başlığında böyle bir alan yoktur.

İkisi bir araya gelince döngüye giren bir yayın çerçevesini hiçbir şey durduramaz. Koridordaki kolinin son kullanma tarihi olmaması budur. Üç switch’in birer kabloyla halka kurduğu bir ağda tek bir yayının nasıl iki kopyaya ayrıldığını aşağıdaki şema gösteriyor.

STP yokken üç switch'li bir halkada bir yayının dönüşü. PC'den gelen yayını Switch A hem B'ye hem C'ye kopyalar. B kendi kopyasını C'ye, C kendi kopyasını B'ye iletir; ikisi de öbüründen geleni A'ya gönderir ve A yeniden kopyalar. Bir kopya A, B, C sırasıyla, öbürü ters yönde döner. Ethernet çerçevesinde TTL olmadığı için turlar hiç bitmez. STP yokken Bir yayın iki kopyaya ayrılır, iki yönde döner PC Switch A Switch B Switch C kopya 1 kopya 2 (ters yönde) 1 PC bir yayın gönderir. A onu hem B'ye hem C'ye kopyalar. 2 B, A'dan geleni C'ye; C, A'dan geleni B'ye iletir. 3 C, B'den geleni A'ya; B, C'den geleni A'ya iletir. 4 A ikisini yeniden kopyalar. Çerçevede TTL yok, turlar bitmez. STP yokken üç switch'li bir halkada bir yayının dönüşü. PC'den gelen yayını Switch A hem B'ye hem C'ye kopyalar. B kendi kopyasını C'ye, C kendi kopyasını B'ye iletir; ikisi de öbüründen geleni A'ya gönderir ve A yeniden kopyalar. Bir kopya A, B, C sırasıyla, öbürü ters yönde döner. Ethernet çerçevesinde TTL olmadığı için turlar hiç bitmez. STP yokken Bir yayın iki kopyaya ayrılır, iki yönde döner PC Switch A Switch B Switch C kopya 1 kopya 2 (ters yönde) 1 PC bir yayın gönderir. A onu hem B'ye hem C'ye kopyalar. 2 B, A'dan geleni C'ye; C, A'dan geleni B'ye iletir. 3 C, B'den geleni A'ya; B, C'den geleni A'ya iletir. 4 A ikisini yeniden kopyalar. Çerçevede TTL yok, turlar bitmez.
Üç switch'li bir halkada tek bir yayın iki kopyaya ayrılır ve iki yönde dönmeye başlar. Ethernet çerçevesinde TTL olmadığı için turlar kendiliğinden bitmez.

Protokolü 1985’te Digital Equipment Corporation’da (DEC) Radia Perlman tasarladı. Makalesinin özeti amacı tek cümlede verir: köprüler, yani bugünkü switch’lerin atası, “compute, in a distributed fashion, an acyclic spanning subset of the network” (Perlman, 1985). Döngüsüz ama her yere ulaşan bir alt ağ, ağacın tanımıdır.

STP Döngüyü Nasıl Keser? Kök Köprü, Port Rolleri ve BPDU

Döngünün neden tehlikeli olduğunu gördük. STP onu, switch’lerin birbirine gönderdiği BPDU (Bridge Protocol Data Unit) adlı kısa mesajlarla üç adımda keser:

  1. Kök köprüyü seçer. Önceliği en düşük switch, eşitlikte MAC adresi en küçük olan, kök köprü (root bridge) olur. Perlman makalesindeki şiirde bunu iki dizeyle söyler: “First the Root must be selected / By ID it is elected.”
  2. Her switch köke giden en ucuz yolu seçer. Yolun maliyetini bağlantı hızı belirler; bu yolun ucundaki port kök porttur (root port).
  3. Her bağlantıda tek bir port iletir. O bağlantının belirlenmiş portu (designated port) açık kalır. Aynı bağlantıya çıkan öteki portlar alternatif ya da yedek (alternate, backup) rolünü alır ve çerçeve iletmez.

Kök köprü BPDU’larını varsayılan olarak 2 saniyede bir gönderir (Hello Time). Bir yol koptuğunda BPDU’lar kesilir ve STP bekleyen yolu açma zamanının geldiğini buradan anlar.

Üç adımı yukarıdaki halkaya uyguladığımızda ağaç şöyle çıkar:

STP varken aynı halka bir ağaca iner. Önceliği en düşük olan Switch A kök köprüdür; A'nın iki portu da belirlenmiş porttur. B ve C, A'ya bakan portlarını kök port yapar. B ile C köke eşit uzaklıkta olduğu için aradaki bağlantının belirlenmiş portunu önceliği düşük olan B alır; C'nin bu bağlantıya bakan portu alternatif olur ve bloklanır. Her bağlantı 1 Gbps ve maliyeti 20000. Yayın her switch'e yalnız bir kez ulaşır. STP varken Halka bir ağaca iner, tek port blokta bekler Switch A kök köprü Switch B Switch C belirlenmiş belirlenmiş kök port kök port belirlenmiş alternatif, blokta her bağlantı 1 Gbps, maliyet 20000 1 Önceliği en düşük switch kök köprü olur: burada A. 2 B ve C, A'ya giden portlarını kök port yapar. 3 B ile C köke eşit uzaklıkta. Önceliği düşük olan B, aradaki bağlantının belirlenmiş portunu alır. 4 C'nin o portu alternatif olur ve bloklanır. Yayın her switch'e bir kez ulaşır. STP varken aynı halka bir ağaca iner. Önceliği en düşük olan Switch A kök köprüdür; A'nın iki portu da belirlenmiş porttur. B ve C, A'ya bakan portlarını kök port yapar. B ile C köke eşit uzaklıkta olduğu için aradaki bağlantının belirlenmiş portunu önceliği düşük olan B alır; C'nin bu bağlantıya bakan portu alternatif olur ve bloklanır. Her bağlantı 1 Gbps ve maliyeti 20000. Yayın her switch'e yalnız bir kez ulaşır. STP varken Halka bir ağaca iner, tek port blokta bekler Switch A kök köprü Switch B Switch C belirlenmiş belirlenmiş kök port kök port belirlenmiş alternatif, blokta her bağlantı 1 Gbps, maliyet 20000 1 Önceliği en düşük switch kök köprü olur: burada A. 2 B ve C, A'ya giden portlarını kök port yapar. 3 B ile C köke eşit uzaklıkta. Önceliği düşük olan B, aradaki bağlantının belirlenmiş portunu alır. 4 C'nin o portu alternatif olur ve bloklanır. Yayın her switch'e bir kez ulaşır.
STP aynı halkayı bir ağaca indirir: kök köprüye giden yollar açık kalır, B ile C arasındaki bağlantının C tarafı blokta bekler. Kablo yerinde durur, yalnız çerçeve iletmez.

Lab’da tek bir switch vardı. Bu yüzden döngüyü iki switch arasında değil, aynı switch’in iki portu arasında kurdum: 10 ve 12 numaralı portları bir patch kabloyla birbirine bağladım. İki port da modeme bağlı olmayan ayrı bir VLAN’daydı; bir şey ters giderse döngü ev ağına ulaşamazdı. STP’nin hızlı sürümü RSTP fabrika ayarında açıktı ve hiçbir ayara dokunmadım.

Kabloyu taktıktan sonra switch’in STP tablosuna baktım. Çıktıda üç sütun önemli: Sts durumu, Role rolü, Prio.Nbr port kimliğini gösteriyor.

Switch Konsol Çıktısı
gmsw01#show spanning-tree
Spanning Tree: Enabled - BPDU Flooding: Disabled - Portfast BPDU Filtering: Disabled
Mode: rstp
...
              This Switch is the Root.
              Hello Time: 2s Max Age: 20s Forward Delay: 15s Transmit Hold Count: 6s
...
Name      State    Prio.Nbr  Cost      Sts  Role  Restricted
--------- -------- --------- --------- ---- ----- ----------
Gi1/0/1   Enabled  128.1     20000     FWD  Desg  No
...
Gi1/0/10  Enabled  128.10    20000     FWD  Desg  No
...
Gi1/0/12  Enabled  128.12    20000     DSC  Bkup  No
  1. This Switch is the Root. Ağda tek switch olduğu için kök köprü kendisidir.
  2. Gi1/0/10 durumu FWD, rolü Desg: çerçeve iletiyor ve bu bağlantının belirlenmiş portu.
  3. Gi1/0/12 durumu DSC (discarding), rolü Bkup: çerçeve atıyor, yedek port. Kablonun iki ucu aynı switch’te olduğu için bir ucu açık, öbürü bekliyor.

Hangi ucun bekleyeceğine port kimliği karar verdi. Port 12’nin ayrıntısında bu bağlantının belirlenmiş portu olarak kendi portu 10 görünüyordu:

Switch Konsol Çıktısı
gmsw01#show spanning-tree gigabitethernet 1/0/12
Port: Gi1/0/12  Enabled
State: Discarding                                Role: Backup
Port ID: 128.12                                  Port Cost: 20000
...
Designated Port ID: 128.10                       Designated Path Cost: 0
...
Auto Portfast.................................. True
...
BPDUs: Sent: 2, Received: 34

Switch, 10 numaralı portun gönderdiği BPDU’yu 12 numaralı porttan geri aldı. Mesajda göndereni kendisi olarak, port kimliğini 128.10 olarak gördü. 128.10, 128.12’den küçük olduğu için bağlantıyı port 10’a bıraktı, 12’yi yedeğe aldı.

Sayaçlar Hello Time’ı da doğruluyor. Bir dakika yedi saniyede port 10’dan 37 BPDU çıktı, port 12’ye 34 BPDU girdi: iki saniyede bir. Port 12 yedeğe geçtikten sonra yalnız 2 BPDU göndermişti; bu iki mesajın ne olduğunu RSTP bölümünde göreceğiz.

Benzetmenin koptuğu yer burası. Markette kapısı kapatılan koridor gözle görülür. Switch’te bloklanan portun ışığı yanmaya devam eder; port durumu sorgusu iki portu da Up gösteriyordu. Kapının kapalı olduğunu yalnız STP tablosu söyler.

BPDU Nedir? Mesajın İçinde Ne Var?

BPDU, STP’nin switch’ler arasında taşıdığı tek mesajdır: kimin kök olduğunu, köke ne kadar uzak olunduğunu ve bunu hangi switch’in hangi portundan söylediğini taşır.

Lab switch’imde yukarıda yalnız sayaçlarını gördük; switch mesajın içini ancak konsola ve dört alanla düşürüyor. Mesajı alan alan açmak için Veri Merkezi’ndeki iki sanal switch’i, vmsw01 ile vmsw02’yi (Open vSwitch), aralarında iki kabloyla RSTP’de çalıştırdım ve kablolardan birinden geçen BPDU’yu yakaladım:

Çıktı
01:33:27.509675 00:50:56:3a:01:01 > 01:80:c2:00:00:00, 802.3, length 39: LLC, dsap STP (0x42) Individual, ssap STP (0x42) Command, ctrl 0x03: STP 802.1w, Rapid STP, Flags [Learn, Forward], bridge-id 8000.00:50:56:3a:01:01.8001, length 36
	message-age 0.00s, max-age 20.00s, hello-time 2.00s, forwarding-delay 15.00s
	root-id 8000.00:50:56:3a:01:01, root-pathcost 0, port-role Designated

Alanları sırayla okuyalım:

  1. Hedef adres 01:80:c2:00:00:00. Switch’lerin kendi aralarında konuşmaya ayırdığı adrestir ve hiçbir switch bu adrese gelen çerçeveyi öteki portlarına iletmez. BPDU bu yüzden yalnız kablonun karşı ucundaki switch’e ulaşır.
  2. STP 802.1w, Rapid STP. Mesajın sürümü RSTP’dir. Lab switch’imin konsol izi de kendi BPDU’larında sürüm 2 yazıyordu.
  3. root-id 8000.00:50:56:3a:01:01. Kök köprünün kimliği, önceliği (8000, yani 32768) ve MAC adresiyle birlikte. İki switch’in önceliği eşit olduğu için MAC adresi küçük olan vmsw01 kök oldu.
  4. root-pathcost 0. Gönderenin köke uzaklığıdır. Mesajı kökün kendisi gönderdiği için sıfır.
  5. bridge-id ...8001. Mesajı gönderen switch ile portudur. Sondaki 8001 port kimliğidir: öncelik 128 ve port 1. Lab switch’imin tablosundaki 128.10 ile aynı biçim.
  6. hello-time 2.00s, max-age, forwarding-delay. Kökün zamanlayıcılarıdır ve kök bunları bütün ağa dağıtır. İki saniyelik Hello Time, yukarıdaki sayaçlarla örtüşüyor.
  7. Flags [Learn, Forward]. Gönderen portun durumunu söyler. RSTP’nin öneri ve anlaşma işaretleri de bu alanda taşınır; onları RSTP bölümünde kullanacağız.

Yakalama iki şey daha gösterdi. On saniye boyunca iki kablodan da yalnız kökün BPDU’ları geçti; kök olmayan vmsw02, ne kök portundan ne de bekleyen alternatif portundan mesaj gönderdi. RSTP’de düzenli BPDU’yu yalnız belirlenmiş port gönderir.

İkinci kablodaki çerçevenin kaynak adresi ise 00:50:56:3a:01:02, yani vmsw01’in o portunun adresiydi; içindeki köprü kimliği yine ...01:01 diyordu. Switch’i tanıtan şey çerçevenin adresi değil, mesajın içindeki kimliktir.

Kullanıcı portunda böyle bir mesaj görmek, o porta bir switch takıldığı anlamına gelir. Portu tam bu anda kapatan korumayı STP korumaları yazımızda ölçtük.

STP Kapalıyken Ne Olur? Yayın Fırtınasının Ölçümü

STP’nin portu nasıl beklettiğini gördük. Rehberimizde bu adımı “döngü engellenmezse aynı yayın paketi sonsuza kadar dolaşır ve ağ birkaç saniyede kilitlenir” diye özetlemiştik. Bunu da ölçtüm.

Port 12’de STP’yi kapattım. Döngü artık açıktı, ama ilk denemede bir şey olmadı: switch’in kendisi VLAN’a bir ARP yayını gönderdiğinde yayın döngüden bir kez geri geldi ve orada kaldı. Sebebini doğrulayamadım. En olası açıklama, switch’in kaynağı kendi MAC adresi olan bir çerçeveyi dışarıdan geri aldığında atmasıdır.

Tek Yayın Paketi Döngüde Durmadan Döner

Fırtına için yayının bir bilgisayardan gelmesi gerekiyordu. İş istasyonumu switch’e bağlayıp döngüyle aynı VLAN’a aldım. Switch’i konsol kablosundan yönettim, çünkü seri konsol hattı ağdaki fırtınadan etkilenmez. STP’yi kapattıktan sonra bilgisayardan tek bir UDP yayını gönderdim.

Bilgisayarın ağ kartı sayacı ilk saniyeden itibaren saniyede yaklaşık 600 bin yayın paketi saydı ve bu hız 59 saniye boyunca değişmedi. Hızın sabit kalması, döngüde dönen kopya sayısının artmadığını gösteriyor. Döngüye büyük ihtimalle yalnız benim paketim girmişti ve o tek paket, saniyede 600 bin kez dönüp bilgisayara geri geliyordu.

Başka bir denemede STP’yi kapattığım sırada Windows’un kendisi de yayın gönderiyordu. Sayacı yaklaşık saniyede bir okudum ve bu kez hız tırmandı:

SaniyeBilgisayara gelen yayın
1326.490
2620.416
3909.600
41.353.947
5 ve sonrası1,36 ile 1,46 milyon

Döngüde hiçbir çerçeve ölmediği için yeni gelen her yayın öncekilerin üstüne eklendi. Koridordaki koliler de böyle çoğalır: yeni her duyuru kolisi öncekilerin yanına eklenir ve hiçbiri rafa inip tükenmez.

Tavan saniyede yaklaşık 1,4 milyon pakette oluştu. 1 Gbps’lik bir hat en küçük Ethernet çerçevesiyle (64 bayt) saniyede en fazla 10⁹ / ((64 + 20) × 8) = 1.488.095 çerçeve taşıyabilir; buradaki 20 bayt, her çerçevenin önündeki başlangıç işareti ile çerçeveler arasındaki zorunlu boşluktur. Bu bir ölçüm değil, hesap. Hat neredeyse tamamen yayınla dolmuştu.

Bu denemede 24 saniyede bilgisayara 30,9 milyon yayın paketi ulaştı. Port 12’de STP’yi yeniden açtığım an sayaçlar aynı örnekte durdu ve fırtına sustu. Kapı kapandı, koliler dolaşmayı bıraktı.

Döngüye Bağlı Bilgisayar Ne Yaşar?

Fırtına yalnız ağı değil, döngüye bağlı her cihazı etkiler. Tam şiddetteki bir denemede bilgisayarın kaynaklarını saniyede bir kaydettim:

  • Bir işlemci çekirdeği tamamen doldu. Task Manager’daki System süreci, yani Windows çekirdeği, fırtına boyunca %8-10 CPU kullandı. Makinede 12 mantıksal işlemci var ve 100 / 12 = %8,3; çekirdeklerden biri yalnız gelen paketleri işlemekle meşguldü. Fırtına durunca System %0-1’e indi.
  • Bellek etkilenmedi. Çekirdeğin ağ tamponlarının durduğu havuz (nonpaged pool) 1.018 MB’tan 1.021 MB’a çıktı; süreçlerin belleği değişmedi.
  • Processes sekmesindeki Network sütunu fırtınayı göstermedi. O sütun yalnız bir uygulamaya ait bağlantıların trafiğini sayıyor. Hiçbir uygulamaya ait olmayan yayınlar orada görünmüyor; fırtına ancak Performance sekmesindeki Ethernet grafiğinde görünüyor.

System’in yükü tek paketlik denemede de aynıydı: o sırada Task Manager’da %8,6 görünüyordu. O denemede bilgisayarın başındaydım ve YouTube’da çok kısa takılmalar gördüm; bunu ölçmedim.

Bu bilgisayar, ofislerdeki sıradan bir uç noktaya göre çok güçlü. 12 mantıksal işlemcisi var ve fırtına bunlardan yalnız birini doldurdu. 4 mantıksal işlemcili bir ofis dizüstünde bir çekirdek, işlemcinin dörtte biri demektir. Bende çok kısa kalan takılmalar, öyle bir dizüstünde çok daha belirgin olabilir.

Kayıtta bir de fren izi vardı. Fırtınanın ortasında bilgisayara gelen yayın saniyede 1,3 milyondan 163 bine düştü, oysa switch’teki döngü sürüyordu. Ağ kartı yetişemediği için switch’e akış denetimi (flow control) çerçeveleri, yani “bekle” anlamına gelen PAUSE mesajları göndermişti.

Switch’in o porttaki sayacı günün bütün denemelerinde 1.256.586 PAUSE çerçevesi aldı ve bilgisayara gidecek 249 milyon paketi attı. Kartın kendi tarafında atılan paket sıfırdı. Kartın neden önce yetişip sonra frene bastığını doğrulamadım.

STP ile RSTP Farkı: 35 Saniye ve Aynı Saniye

STP kapalıyken ne olduğunu gördük. Açıkken de bir bedeli vardı: klasik STP bir portu açmadan önce beklerdi. RSTP (Rapid Spanning Tree, 802.1w) bu beklemeyi kaldıran sürümdür; lab switch’imin fabrika ayarı da buydu.

Aynı portu iki modda kapatıp açtım ve switch’in günlüğünden iletime geçme anını okudum:

ModLink kalktıİletime geçtiBekleme
RSTP (802.1w)16:25:5916:25:590 saniye
Klasik STP (802.1D)16:29:2216:29:5735 saniye

Klasik STP Neden 30 Değil 35 Saniye Bekledi?

Klasik STP için bilinen rakam 30 saniyedir: port, Forward Delay (15 saniye) kadar iki kez bekler. Ben 35 ölçtüm. Portu bir kez daha açıp durumunu saniye saniye sorguladım:

DurumBaşladıSüre
Discarding16:38:34 (link kalktı)20 saniye
Learning16:38:5415 saniye
Forwarding16:39:09

Süre 20 + 15 diye bölünüyordu. 30 saniye, 802.1w-2001’e kadarki sürümlerin rakamıdır. RSTP’yi tanımlayan 802.1D-2004’te kapalı bir port, iletime geçiş sayacını Max Age değerinde (20 saniye) tutar. Port açılınca önce bu sayaç biter, sonra port Forward Delay kadar Learning’de kalır.

Bu farkı standardın çalışma grubunun yazışmasında Brandon Barry şöyle özetler: “MaxAge + forwardDelay = 20 + (2 or 15, depending on sendRSTP) seconds” (rstplib-users, 2003). Standardı birebir uygulayan Open vSwitch kodu da kapalı portta sayacı fd_while = max_age ile kuruyor.

RSTP Neden Hiç Beklemedi? Öneri ve Anlaşma

Standarda göre bir portun beklemeden açılmasının iki yolu var. Ya port kenar port (edge port) sayılır, yani ucunda switch olmadığına karar verilir; ya da karşı taraftan anlaşma (agreement) alır.

Lab switch’imde kenar portu kendiliğinden tanıyan özellik açıktı (Auto Portfast: True). Önce onu iki portta kapattım ve portu yeniden açtım. Port yine link kalktığı saniyede iletime geçti.

Aynı anda sayaçlar değişti. Normalde sessiz duran yedek port 12, 2 BPDU gönderdi; port 10 da 1 BPDU aldı. Port 10’un önerisine (proposal) port 12’nin verdiği cevap buydu. RSTP’de yedek ya da alternatif bir port öneriyi alınca anlaşma bayrağı taşıyan bir BPDU gönderir ve öneriyi yapan port beklemeden açılır.

BPDU’nun içindeki anlaşma bayrağını gözümle görmedim, çünkü switch’in hata ayıklama kaydı bayrak alanını yazmıyor. Ama kenar port yolu kapalıyken geriye tek açıklama kalıyor. Anlaşma olmasaydı port, Max Age artı RSTP’nin kısa beklemesi kadar, yani 20 + 2 = 22 saniye bekleyecekti. Bu sayıyı sonradan bir uç cihaz portunda, otomatik kenar portu kapatarak ölçtüm ve port gerçekten 22 saniye bekledi; ölçümü PortFast bölümünde anlattım.

STP Modunu Değiştirmenin Bedeli

Switch’i klasik STP’ye aldığım an modeme giden uplink portu da yeniden hesaplandı ve yaklaşık yarım dakika trafik taşımadı; switch’e bağlantım da o süre boyunca koptu. RSTP’ye dönerken aynı port 3 saniye kesildi (16:31:12’de blok, 16:31:15’te iletim). STP modunu mesai saatinde değiştirmek, uplink’i yarım dakika kesebilir.

STP Türleri: RSTP, MSTP, PVST+ ve Rapid PVST+

Buraya kadar ölçtüğüm iki mod, klasik STP ve RSTP, ağın tamamı için tek bir ağaç kurar. Bütün VLAN’lar bu ağacı paylaşır. Bir kablo bloklandığında her VLAN için bloklanır ve yedek kablo hiçbir VLAN’ın trafiğini taşımaz. Markette bu, her ürün grubunun kolisinin aynı koridordan geçmesi demektir; yedek koridor bütün gün boş bekler.

Bu sınırı aşmak için iki yol gelişti. Biri IEEE’nin standardı MSTP, öbürü Cisco’nun protokolü PVST+:

TürKaynakKaç ağaç kurarNot
STPIEEE 802.1DBütün ağ için birPortu açmadan önce 30-35 saniye bekler
RSTPIEEE 802.1w, bugün 802.1D-2004’ün içindeBütün ağ için birAnlaşma alınca beklemeden açar
MSTPIEEE 802.1s, bugün 802.1Q’nun içindeVLAN grubu başına birVLAN’ları gruplara toplar
PVST+Cisco, 802.1D tabanlıVLAN başına birCisco’ya özel eklentiler taşır
Rapid PVST+Cisco, 802.1w tabanlıVLAN başına birCisco switch’lerin fabrika ayarı

PVST+ (Per-VLAN Spanning Tree Plus), her VLAN için ayrı bir ağaç kuran Cisco protokolüdür. Cisco’nun yapılandırma kılavuzuna göre PVST+ 802.1D’ye ve Cisco’ya özel eklentilere dayanır. Rapid PVST+ aynı yapıyı RSTP’nin hızlı geçişiyle çalıştırır ve kılavuzun belgelediği switch’lerde fabrika ayarıdır.

Ağaç VLAN başına kurulunca kök köprü de VLAN başına seçilebilir. İki omurga switch’iniz varsa bir VLAN grubunun kökünü birine, öbür grubun kökünü ötekine verirsiniz. Bir VLAN’ın blokladığı kablo öbür VLAN’ın trafiğini taşır ve iki kablo da çalışır. Kılavuz bunu “Layer 2 load-balancing” diye adlandırır. Markette bunun karşılığı, soğuk zincir kolilerini bir koridordan, kuru gıdayı öbür koridordan geçirmektir.

Bedeli hesap yüküdür. Her VLAN’ın ağacı ayrı hesaplanır ve ayrı BPDU taşır. Kılavuz, PVST+ ve Rapid PVST+ modunda en fazla 300 ağaç sınırı yazar; VLAN sayısı bunu aşan bir ağ bu yoldan gidemez.

MSTP (Multiple Spanning Tree) aradaki yoldur. VLAN’ları gruplara ayırır ve her gruba bir ağaç örneği (instance) verir; yüzlerce VLAN’lık bir ağ birkaç örnekle çalışabilir. IEEE, 2002 tarihli 802.1s değişikliğinin amacını farklı VLAN’ların trafiğini farklı ağaçlara dağıtmak ve eski standarda uyan switch’lerle uyumu korumak olarak tanımlar. Standart sonradan 802.1Q’nun içine alındı. Cisco’nun kılavuzu MSTP modunda 65 örnek sınırı yazar.

Farklı markaların aynı ağda çalıştığı yerde mod seçimi kurulumdan önce yapılmalıdır. Cisco switch, Cisco olmayan bir switch’e 802.1Q trunk ile bağlandığında iki tarafın ağaçlarını PVST+ üzerinden uyumlu hale getirir. MSTP ile PVST+‘ın karıştığı ağda ise kılavuz, ortak ağacın (CST, Common Spanning Tree) kökünün MSTP bölgesinin içinde olmasını şart koşar.

Lab switch’im RSTP modundaydı ve bütün ağ için tek ağaç kurdu. Günlüğü bunu kendi diliyle yazıyordu:

Switch Konsol Çıktısı
<189> Sep 26 16:22:26 gmsw01-1 TRAPMGR[dot1s_task]: traputil.c(777) 422 %% Spanning Tree Topology Change Received: MSTID: 0 Gi1/0/12

STP olayları MSTID: 0 etiketiyle, yani tek bir örnek numarasıyla kaydediliyordu. STP işini yürüten sürecin adı da 802.1s’in numarasını taşıyordu (dot1s_task). Yukarıdaki bütün ölçümler bu tek ağaçta alındı. MSTP’yi ölçmedim; tablo ve MSTP paragrafı Cisco’nun ve IEEE’nin belgelerine dayanıyor.

Rapid PVST+ Açınca Kök Köprü Modem Oldu

Lab switch’im Cisco değil, ama mod listesinde stp ve rstp’nin yanında mst, pvst ve rapid-pvst de vardı. Switch’i kısa bir süre Rapid PVST+‘a aldım. Uplink yaklaşık 1 saniye kesildi (18:18:31’de blok, 18:18:32’de iletim) ve her VLAN kendi ağacını kurdu.

Switch her ağaçta başka bir öncelikle göründü: VLAN 1’de 32769, VLAN 5’te 32773, VLAN 10’da 32778. Çıktı bunu kendisi açıklıyor; 32768’lik önceliğe VLAN numarası ekleniyor (sys-id-ext).

VLAN 10’da ise beklemediğim bir şey vardı. Bu VLAN’ın tek portu, switch’i modeme bağlayan uplink’ti:

Switch Konsol Çıktısı
gmsw01#show spanning-tree vlan 10

VLAN   10
 Spanning Tree: Enabled Mode: rapid-pvst
 RootID    Priority        0
...
           Cost            20000
           Port            1(Gi1/0/1)
           Hello Time: 2s Max Age: 20s Forward Delay: 2s
 BridgeID  Priority        32778 (priority 32768 sys-id-ext 10)
...
Interface Role       Sts           Cost      Prio.Nbr
--------- ---------- ------------- --------- --------
Gi1/0/1   Root       Forwarding    20000     128.1

Kök köprü artık switch değildi. Kökün MAC adresi, ev ağındaki bir sunucunun ARP tablosunda ağ geçidine, yani modeme aitti. Modem her iki saniyede bir öncelik 0 ile BPDU gönderiyordu. 0, önceliğin alabileceği en küçük değerdir. Eşitlikte MAC adresi küçük olan kazanır ve modemin adresi switch’inkinden küçüktü. Switch’in önceliğini ne kadar düşürsem de kök seçimini modem kazanırdı.

RSTP modunda bu olmamıştı, çünkü switch modemin BPDU’larını atıyordu. Günlükte iki saniyede bir şu iki satır vardı:

Switch Konsol Çıktısı
<187> Sep 26 18:18:30 gmsw01-1 DOT1S[dtlTask]: dot1s_txrx.c(306) 2296 %% dot1sBpduReceive(): Discarding the BPDU, since it is an invalid BPDU type
<189> Sep 26 18:18:30 gmsw01-1 DOT1S[dtlTask]: dot1s_txrx.c(1286) 2295 %% dot1sBpduReceive(): Invalid Forward Delay

Modemin BPDU’sunda Forward Delay 2 saniyeydi. Standardın izin verdiği aralık 4 ile 30 saniyedir; Open vSwitch de sınırları RSTP_MIN_BRIDGE_FORWARD_DELAY 4 ve RSTP_MAX_BRIDGE_FORWARD_DELAY 30 olarak tanımlıyor. Rapid PVST+ açıkken hata satırları kesildi ve switch aynı BPDU’yu kabul etti. RSTP’ye döndükten iki saniye sonra satırlar geri geldi. Bu modun BPDU’yu neden kabul ettiğini doğrulamadım.

Kök seçimi yalnız sizin switch’leriniz arasında yapılmaz. BPDU gönderen her cihaz adaydır ve en güçlü aday bir modem çıkabilir. Lab’da modemi kökten uzak tutan şey benim bir ayarım değildi; modemin kendi BPDU’sundaki standart dışı bir değerdi.

Spanning Tree Kurarken Dikkat Edilecekler

Ölçümlerin pratikte söylediği şeyler şunlar:

  • STP’yi kapatmayın. RSTP normal çalışan bir portu bekletmez; lab’da iletime geçiş link kalktığı saniyede oldu. Kapatmanın hız kazancı yoktur, bedelini yukarıda ölçtük.
  • Kök köprüyü siz seçin. Öncelikler fabrika ayarında kaldığında kök, MAC adresi en küçük switch olur; bu, kapasitesi en düşük kat switch’i de olabilir. Omurga switch’e daha düşük öncelik vermek ağacın merkezini doğru yere koyar. Dışarıya bakan portu da hesaba katın. Lab’da kök olmaya en güçlü aday, uplink’in ucundaki modemdi. O porttan gelen BPDU’nun kök seçimine girmesini engelleyen kök koruması (root guard) switch tarafının ayarıdır; bedeli o portun beklemeye alınmasıdır ve bunu root guard ölçümünde gösterdim.
  • Kullanıcı portlarını kenar port olarak işaretleyin. Ucunda bilgisayar ya da yazıcı olan port bir switch’e bağlı olmadığı için beklemeden açılabilir. Bu porta biri switch takarsa portu kapatan koruma (BPDU Guard) switch tarafının işidir ve yalnız PortFast yazılmış portta çalışır; ikisini STP korumaları yazımızda ölçtüm.
  • İki switch arasındaki iki kabloyu LACP ile birleştirin. STP ikinci kabloyu döngü sayıp bloklar; kablo yalnız yedekte bekler. İkisini birlikte kullanmanın yolunu LACP nedir yazımızda anlattık.
  • STP modunu mesai dışında değiştirin. Lab’da klasik STP’ye geçiş uplink’i yaklaşık yarım dakika kesti.

STP bir katmanı yedekler: switch’ler arasındaki kabloları. Ağ geçidinin kendisini yedeklemek başka bir iştir; iki cihazın tek adresi paylaşmasını VRRP yazımızda ölçtük.

Sonuç: STP Yedek Yolu Silmez, Kapıda Bekletir

STP yedek bağlantıları kaldırmadan döngüyü keser. Her iki nokta arasında tek yol açık kalır, öteki yol kapıda bekler. Lab’da STP kapalıyken tek bir kablo 24 saniyede 30,9 milyon yayın paketi taşıdı ve bağlı bilgisayarın bir çekirdeğini doldurdu. STP açıldığı an fırtına aynı saniyede sustu. RSTP bu korumayı beklemeden sağladı: aynı port RSTP’de link kalktığı saniyede, klasik STP’de 35 saniyede iletime geçti.

Şubenin iki koridoru da yerinde kalır. Biri açıktır, öbürünün kapısı kapalı bekler; “bütün reyonlara” yazan koli yalnız açık koridordan geçer ve bir kez dağıtılır.

Spanning Tree (STP) Hakkında Sık Sorulan Sorular

RSTP (Rapid Spanning Tree, 802.1w), STP'nin hızlı sürümüdür. İkisi de döngüyü aynı mantıkla keser; fark bekleme süresindedir. Klasik STP bir portu açmadan önce zamanlayıcıların dolmasını bekler, RSTP karşı taraftan anlaşma aldığında beklemeden açar. Lab'da aynı port RSTP'de link kalktığı saniyede, klasik STP'de 35 saniye sonra iletime geçti.
İkisi de VLAN'lara ayrı ağaç verir; fark ağaç sayısındadır. PVST+ Cisco'nun protokolüdür ve her VLAN için ayrı bir ağaç kurar; Rapid PVST+ aynı yapıyı RSTP hızıyla çalıştırır. MSTP ise IEEE standardıdır (802.1s, bugün 802.1Q'nun içinde) ve VLAN'ları gruplara toplayıp her gruba bir ağaç verir. Cisco'nun kılavuzunda sınır PVST+ için 300, MSTP için 65 ağaçtır.
Gerekir. Döngü için iki switch şart değildir; aynı switch'in iki portu arasına takılan tek bir kablo da döngüdür. Lab'da tam bunu denedim: kabloyu taktığım saniyede RSTP portlardan birini blokladı. STP'yi kapattığımda ise bu tek kablo, 24 saniyede 30,9 milyon yayın paketinin dönüp durduğu bir döngüye dönüştü.
Hızlandırmaz. RSTP normal çalışan bir portu bekletmez; lab'da iletime geçiş link kalktığı saniyede oldu, yani kapatmanın hız kazancı yoktur. Kaybı ise ölçüldü: STP kapalıyken döngüye bağlı bilgisayar saniyede 1,3 milyon yayın paketi aldı ve 12 işlemci çekirdeğinden biri yalnız bu paketleri işlemekle meşgul oldu.
Üç yerden anlaşılır. Switch'in port sayaçlarında yayın paketi sayısı saniyede yüz binlerce artar. Bağlı Windows bilgisayarlarda Task Manager'daki System süreci sabit bir yük gösterir; lab'daki 12 çekirdekli makinede bu %8-10, yani bir çekirdeğin tamamıydı. Performance sekmesindeki Ethernet grafiği de tavana yapışır. Processes sekmesindeki Network sütunu ise fırtınayı göstermez, çünkü yalnız uygulamalara ait trafiği sayar.
İlker Pehlivan
Yazan

BT Danışmanı | Ağ, Sistem ve Güvenlik Yönetimi

İlker Pehlivan, karmaşık BT altyapılarını ölçeklenebilir ve güvenli sistemlere dönüştürür. Buradaki rehberleri kendi laboratuvarında kurup ölçerek yazar.

LinkedIn

Benzer Makaleler

Kurumsal Network Kurulumu altındaki diğer 114 makale