Ana içeriğe geç

Bölüm 42: Routing Protokolleri

11 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak kitabının bir bölümü: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine inip karşı taraftan geri dönen uzun bir teknik yolculuk.

Kısım 6: Router'dan Router'a (Bölüm 37-44)

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. DNS Kayıtları
  6. Önbellek, Tazelik ve Güven
  7. Port Numarası ve Soket
  8. Bağlantısız Taşıma: UDP
  9. Üç Adımlı El Sıkışma
  10. Simetrik Şifreleme
  11. Açık Anahtarlı Kriptografi
  12. TLS El Sıkışması
  13. Sertifika Zinciri
  14. HTTP Mesajının Anatomisi
  15. Durum, Çerez ve Oturum
  16. HTTP/2'den HTTP/3'e
  17. İçerik Dağıtım Ağları
  18. Diğer Uygulama Protokolleri
  19. Katmanlı Mimari
  20. Hizmet ve Protokol
  21. Encapsulation ve Başlıklar
  22. Paket Yakalama ve Çözümleme
  23. Ağ Interface Kartı
  24. Fiziksel Adresleme
  25. Hata Sezme ve CRC
  26. Adres Çözümleme: ARP
  27. Ortam Erişimi: CSMA/CD
  28. Switch'ler
  29. Ağ Topolojileri
  30. Sanal Yerel Ağlar
  31. Kablosuz Erişim: 802.11
  32. Radyo Kanalı ve Kapasite
  33. Kablosuz Ağ Güvenliği
  34. Hücresel Ağlar
  35. Spektrum ve Kuşaklar
  36. Hareketlilik ve Aktarma
  37. Adres Kiralama: DHCP
  38. Adresin Anatomisi
  39. Adres Tükenmesi ve IPv6
  40. Router Mimarisi
  41. Kuyruk Yönetimi
  42. Cihaz Yapılandırma
  43. Routing Protokolleri
  44. Kontrol Düzlemi ve SDN
  45. Ağ İzleme ve Yönetimi
  46. Alanlar Arası Routing
  47. Adres Çevirisi
  48. Ara Kutular
  49. Tünelleme ve IPsec
  50. Firewall'lar
  51. Ağ Saldırıları
  52. Operatör ve Metro Ağları
  53. Bitten Sinyale
  54. Sembol Hızı ve Kanal Kapasitesi
  55. Multiplexing Teknikleri
  56. İletim Ortamları
  57. Bakır Kablo Sonlandırma
  58. Fiber Sonlandırma
  59. Fiber Optik İletim
  60. Bakır Erişim Ağı: DSL
  61. DSL'de Hız ve Mesafe
  62. Pasif Optik Ağlar
  63. Kablo Erişim Ağları
  64. Kablo Modem ve CMTS
  65. Denizaltı Kabloları
  66. Veri Merkezi Ağları
  67. Encapsulation Çözme
  68. Güvenilir Aktarım
  69. Tıkanıklık Denetimi
  70. Trafik Çözümleme
  71. Gecikme Bütçesi
  72. Soket Programlama
  73. Eşten Eşe ve Protokol Tasarımı
  74. Uyarlanır Video Akışı
  75. Gerçek Zamanlı Ses ve Görüntü
  76. Kablosuz Sensör Ağlarının Mimarisi
  77. Sensör Ağlarında Ortam Erişimi
  78. Sensör Ağlarında Yönlendirme ve IP
  79. Zaman Eşitleme ve Konum Bulma
  80. Sensör Ağı Uygulamaları
  81. Mobil Kablosuz Sensör Ağları
  82. Son Söz

Bir önceki durakta iki satırı elle yazdın ve ağ çalıştı. Bin cihazlık bir ağda kimse o satırları elle yazmaz.

Router’lar komşularıyla konuşuyor ve ağın haritasını kendileri çıkarıyor. Peki bir kutu, hiç görmediği bir hattın maliyetini nereden bilecek?

Bilgi kimde duruyor?

Algoritmanın gözünde ağ bir çizge. Düğümler router’lar (yönlendiriciler), kenarlar da aralarındaki hatlar oluyor. Her kenarın bir maliyeti var; o maliyeti ya ağı işleten kişi elle belirliyor ya da protokol bağlantı hızından bir formülle türetiyor. Bütün kenarlara 1 verirsen en ucuz yol, en az atlamalı yol hâline geliyor. Maliyet bant genişliğiyle ters orantılı da tanımlanabilir, tıkanıklıkla ters orantılı da.

39. bölümde bir paketin çıkış portu, routing tablosundan en uzun önek eşleşmesiyle bulunuyordu. O tabloyu dolduran hesap her router’da ayrı ayrı dönüyor; ortada işi dağıtan merkezî bir beyin bulunmuyor.

Link state (bağlantı durumu) algoritmalarında her router topolojinin tamamını bilir. Bütün düğümler, bütün hatlar ve bütün maliyetler elindedir. Uzaklık vektörü algoritmalarında ise router işe yalnızca doğrudan bağlı komşularının maliyetiyle başlar. Gerisini komşusundan duyar.

Komşunun tahminine güvenmek

Uzaklık vektörünün çekirdeğinde tek bir kural var: bir hedefe en ucuz yolun maliyeti, her komşuya gitmenin bedeli ile o komşunun aynı hedefe biçtiği bedelin toplamıdır; hangi komşuda bu toplam en küçükse, yol oradan geçer.

Kuralın adı Bellman-Ford. Bir router onu uygularken elinde iki sayı bulunur. Birini kendisi bilir: komşuya giden hattın maliyeti. Ötekini yalnızca duyar: komşunun aynı hedefe biçtiği bedel. İkincisini doğrulayamaz, çünkü komşusunun haritasını hiç görmez. Bütün zayıflık bu tek noktada toplanıyor: karar, doğrulanmamış bir sayıya dayanıyor.

Algoritma yinelemeli, eşzamansız ve kendi kendini durdurandır. Bir düğüm komşularına yalnızca kendi vektörü değiştiğinde haber verir. Haber gelmezse hiçbir işlem yapılmaz.

Maliyet düşerse yeni değer birkaç turda ağa oturur. Yükselmesi ise turlarca sürer. Router komşusunun eski ucuz ilanına kanabilir; oysa o ucuz yol aslında kendi üzerinden geçmektedir.

Ortaya çıkan şeyin adı sayarak sonsuza gitme. İki komşu birbirinin tahminini birer birer artırır ve aralarında bir routing döngüsü kurulur. Döngü kendiliğinden kırılır. Ama çok yavaş kırılır.

Sayalım. Hedef ağa B doğrudan bağlı ve maliyeti 2; C aynı hedefe B üzerinden 3 maliyetle ulaşıyor. C’nin pahalı bir doğrudan hattı da var: 12. Şimdi B’nin hattı bozulup 30’a çıkıyor. B, C’nin 3’lük eski ilanına bakıp kendini 4 ilan ediyor ve sayı ikisi arasında birer birer tırmanıyor. Onuncu turda C kendi 12’lik hattına düşüyor, bir tur sonra B 13’te oturuyor. RIP’in 30 saniyelik sayacıyla bu on bir tur 330 saniye eder. Yani 5,5 dakika. Gerçek RIP değişiklikte beklemeden tetiklenmiş güncelleme yolladığı için bu süre pratikte kısalıyor; ama döngü kurulduğu sürece o hedefe giden paketler iki router arasında gidip geliyor ve TTL’leri bitince düşüyor.

İki savunma geliştirildi. Split horizon (bölünmüş ufuk) tek bir kuraldır: bir komşudan öğrenilen yol, o komşuya bakan interface’ten geri ilan edilmez. Poison reverse bir adım daha atar. Router hedefe komşusu üzerinden gidiyorsa, o komşuya uzaklığını sonsuz ilan eder. Gerçek uzaklığını bilir, söylemez.

Bu genel bir çözüm sayılmaz. İki komşu arasındaki döngüyü keser, üç ya da daha fazla düğümü kapsayan döngüyü yakalayamaz.

Yakınsama, ağdaki bütün router’ların bütün alt ağlar hakkında tam ve doğru bilgiye sahip olması demektir. Döngü sonsuz metriğe kadar sürerse yakınsama o kadar gecikir.

DerinleşmeSonsuz neden 16 seçildi?

Tavan, sayarak sonsuza gitmeyi engellemiyor. Yalnızca ne zaman biteceğini söylüyor. Az önceki örnekte C’nin yedek hattı olmasa sayaç 4, 5, 6 diye 16’ya kadar çıkar ve 14 turda tavana çarpardı: 420 saniye, yani 7 dakika. Tavan hiç olmasaydı sayma da hiç durmayacaktı.

RFC 2453 bu değerin seçimini açık bir ödünleşim olarak yazar: hiçbir gerçek yolun ulaşamayacağı kadar büyük, ama gereğinden büyük olmayan bir sayı. Bir yanda ağın büyüyebileceği çap duruyor, öbür yanda yakınsama süresi. Sonsuzu 16 seçmek, RIP’e on beş atlamadan büyük bir ağ kurdurmamayı peşinen kabul etmektir. Sayı bir doğa sınırı değil, protokolün kendine ayırdığı zaman bütçesidir.

Aynı yerde başka seçimler de yapıldı. Cisco’nun IGRP’si çok daha geniş bir metrik kullandı ve saymayı ayrı bir atlama sınırıyla durdurdu; bu sınırın varsayılanı 100, üst değeri 255’ti. Halefi EIGRP ise sorunu kökten çözdü. DUAL adlı algoritması, döngü kurmayacağı kanıtlanmış bir yedek yol yoksa yolu kullanmayı bırakıp komşularına soruyor; sayarak sonsuza gitme orada hiç yaşanmıyor. Aynı denklem, başka bir bedel: yakınsama bu kez sorguların ağda dolaşmasını bekliyor.

Sonraki kuşaklar döngüyü başka kurallarla da yasakladı. Kablosuz sensör ağlarının RPL’i her düğüme köke uzaklığını anlatan bir sayı veriyor ve bu sayısı kendisininkinden küçük olmayan bir komşuyu ebeveyn seçmeyi yasaklıyor (77. bölüm). Altyapısız mobil ağların AODV’si ise her yola hedefin ürettiği bir sıra numarası ekliyor; eski haber yeni haberin yerini alamıyor (80. bölüm).

RIP’i yürüten şey sayaçlarıdır

Uzaklık vektörünün en tanıdık uygulaması RIP. 1982’de BSD-UNIX dağıtımına dahil edildiği için yayıldı ve metrik olarak atlama sayısını kullanıyor. Bir yolun taşıyabileceği en büyük geçerli değer 15 atlamadır. 16 sonsuz demektir ve sayma orada durur. Bugün pek az ağda koşuyor; yine de algoritmanın en sade örneği olduğu için öğretmeye değer.

Güncellemeler komşular arasında 30 saniyede bir gider; mesajın adı response, karşılığı ilandır. Tek bir mesaj en fazla 25 hedef alt ağ taşır. Biçim de küçüktür: 4 baytlık bir başlık ve her biri 20 baytlık kayıtlar. En büyük RIP mesajı 504 bayt eder, yani tipik bir Ethernet frame’inin üçte birinden azdır. RIP UDP tabanlıdır ve 520 numaralı portu kullanır. Protokolü kernel değil, uygulama düzeyinde koşan routed adlı sıradan bir süreç yürütür; süreç hesapladığı yolları kernel’daki tabloya yazar. Bugün Linux’ta aynı işi FRRouting ya da BIRD gibi süreçler yapıyor.

Sayaç üç tanedir. Güncellemenin yanında 180 saniyelik geçersizlik ve Cisco uygulamasında 240 saniyelik temizleme durur. Ortadaki sayının gerekçesi RFC 2453’te yazılıdır. Zaman aşımı güncelleme aralığının altı katı seçilmiştir, çünkü tek bir kayıp mesaj yüzünden yol geçersiz kılınmamalıdır. Geçersiz kılınan yol da hemen silinmez: 120 saniyelik bir çöp toplama sayacı kurulur ve metriği 16’ya çekilerek komşulara ilan edilir.

Sayaçların bir de kilitlenme huyu var: aynı ağdaki router’lar zamanla aynı anda güncelleme göndermeye başlar. Floyd ile Jacobson 1993’te bu kendiliğinden eşzamanlanmayı ölçtü; RFC 2453 bu yüzden ya yükten etkilenmeyen bir saat ya da her kurulumda 0-5 saniyelik rastgele bir kayma istiyor.

Yapılandırması iki komuttan ibarettir. Statik yolu yazarken gidilecek hedefi de maskesini de sen söylüyordun; burada yalnızca kendi ağlarını bildirirsin.

Kenar(config)# router rip
Kenar(config-router)# network 192.0.2.0
Kenar(config-router)# network 203.0.113.0

Sürüm farkı tek cümlede kapanıyor. RIPv1 güncellemelerde alt ağ maskesini taşımaz, RIPv2 taşır. 37. bölümde maske adresi ağ ve makine parçasına bölüyordu; maskesiz bir ilan, /27 gibi bir ağı komşusuna hiç anlatamaz. Tuzağı da burada: Cisco’da yukarıdaki üç satır RIPv1’i çalıştırır. İkinci sürüm için version 2 satırı, sınıflı özetlemeyi kapatmak için de no auto-summary gerekir.

Aynı harita, ayrı ağaçlar

Link state’te (bağlantı durumunda) her router kendi yerel durumunu bilir: hangi interface’leri açık, hangi komşulara erişebiliyor. Bu yerel durumu sel yayılımıyla (flooding) ağın tamamına dağıtır. Yayılan şey haritanın tamamı değil, router’ın kendi komşuluklarını anlatan küçük bir ilan. Haritayı her router bu ilanları birleştirerek kendisi kuruyor.

Yayılım bittiğinde herkesin elinde birebir aynı harita durur. Sonra herkes o haritadan kendi ağacını çıkarır. Edsger Dijkstra’nın 1956’da yirmi dakikada tasarladığını anlattığı döngü iki satırdır. Kesinleşmemiş düğümler arasından tahmini maliyeti en küçük olanı seç ve kümeye ekle. Sonra komşularının tahminlerini D(v) = min(D(v), D(w) + c(w,v)) ile güncelle.

Beş router’lı bir örnek kurayım. Sekiz hattın maliyeti sırasıyla A-B 2, A-C 5, A-E 7, B-C 1, B-D 4, C-D 2, C-E 6 ve D-E 3 olsun. A’nın çıkardığı sonuç dört satır: B’ye 2 doğrudan, C’ye 3 (B üzerinden), D’ye 5 (yine B üzerinden), E’ye 7 doğrudan. Doğrudan A-C hattı 5 iken B üzerinden 3 çıkıyor. En kısa yol her zaman doğrudan hat olmuyor.

Aynı hesabı C yaptığında ağacın kökü değişir ve tablo başka satırlar taşır. Veritabanı ortaktır, ağaç kişiseldir.

Aynı veritabanından her router’ın kendi ağacını nasıl çıkardığını görelim:

Aynı veritabanından üç ayrı tablo nasıl çıkıyor
yerel durum · her düğüm yalnızca kendi hatlarını bilirAB'ye 2 · C'ye 5BA'ya 2 · C'ye 1CA'ya 5 · B'ye 1sel yayılımı · her ilan alandaki herkese ulaşırveritabanıA-B 2 · A-C 5 · B-C 1veritabanıA-B 2 · A-C 5 · B-C 1veritabanıA-B 2 · A-C 5 · B-C 1A'nın tablosuC'ye: B üzerinden 3B'nin tablosuC'ye: doğrudan 1C'nin tablosuA'ya: B üzerinden 3
Herkes kendi hattını bilir. Üç router'ın elinde yalnızca kendi interface'lerinin maliyeti var. A, C'ye giden 5 maliyetli hattını bilir; B ile C arasındaki 1 maliyetli hattan haberi yoktur.
  1. Herkes kendi hattını bilir. Üç router'ın elinde yalnızca kendi interface'lerinin maliyeti var. A, C'ye giden 5 maliyetli hattını bilir; B ile C arasındaki 1 maliyetli hattan haberi yoktur.
  2. İlan sel yayılımıyla dağılır. Her router kendi yerel durumunu alanın tamamına gönderir. Gönderilen şey tablonun tamamı değil, router'ın kendi komşuluklarını anlatan küçük bir ilan.
  3. Üç veritabanı birebir aynı. Yayılım bittiğinde üç kutuda da aynı harita durur: aynı düğümler, aynı hatlar, aynı maliyetler. Ortak olan şey veritabanıdır.
  4. Herkes kendini kök alır. Aynı haritadan her router ayrı bir en kısa yol ağacı hesaplar. Kök her seferinde hesabı yapan düğümün kendisidir.
  5. Tablolar farklı çıkıyor. A için C'ye giden yol B üzerinden 3 maliyetlidir; B için aynı hedef doğrudan 1 maliyetlidir. Tek veritabanından üç ayrı tablo çıkıyor.

OSPF bu haritayı nasıl taşıyor?

OSPF bu ailenin standart üyesidir ve adındaki Open sözcüğü belirtimin herkese açık olduğunu anlatır. Sürüm 2, RFC 2328’de tanımlıdır: J. Moy, Nisan 1998, STD 54. IPv6 için yazılan sürüm 3 ise RFC 5340’ta. Belge protokolü tek bir otonom sistemin içinde çalışmak üzere tanımlar; otonom sistem, tek bir yönetimin altındaki ve dışarıya tek bir ağ gibi görünen router kümesidir. Büyük operatör omurgalarında aynı aileden IS-IS de sık koşuyor; 18. bölümde onu OSI yığınından sağ kalan parçalardan biri olarak anmıştık.

Taşıma tarafı RIP’ten ayrılıyor. OSPF doğrudan IP üzerinde koşar ve protokol numarası 89’dur. İki multicast adresi kullanır: 224.0.0.5’i OSPF koşan her router dinler, 224.0.0.6’yı yalnızca atanmış router ile yedeği dinler.

Komşuluk Hello protokolüyle kurulur. Yerel alan ağında Hello 10 saniyede bir gider, ölüm aralığı bunun dört katıdır: 40 saniye. NBMA ağlarda aynı çift 30 ve 120 saniyedir. Hello paketi router kimliğini, alt ağ maskesini, alan kimliğini, önceliği ve iki zamanlayıcıyı taşır. Alan kimliği, maske ve zamanlayıcılar iki uçta aynı değilse komşuluk hiç kurulmaz. Kurulma da adım adımdır: Down, Init, Two-way, Exstart, Exchange, Loading, Full. Sahada en sık görülen takılma MTU uyuşmazlığı: iki uç Hello’da anlaşır ama veritabanı alışverişinde, Exstart ya da Exchange aşamasında takılı kalır.

Yayın ağlarında bir atanmış router (designated router, DR) ve onun yedeği seçilir; ilanları kendinde toplayıp dağıttığı için ağdaki mesaj sayısı düşer. Noktadan noktaya bağlantılarda böyle bir seçime gerek yoktur.

Ölçek büyüyünce otonom sistem alanlara bölünür. İlanlar yalnızca kendi alanında yayılır ve alan sınır router’ları kendi alanlarındaki uzaklıkları özetleyip omurgada ilan eder. Bir router kendi alanının topolojisini ayrıntısıyla bilir; diğer alanlar için yalnızca yönü bilir. Alanlar arası bütün özetler omurga alanından geçer. Alan 0 diye anılır, kimlikler 32 bit olduğu ve IP adresi biçiminde yazıldığı için 0.0.0.0 diye de görülür.

Sessiz bir ağ da sessiz sayılmaz. RFC 2328 LSRefreshTime’ı 30 dakika, MaxAge’i bir saat, MinLSInterval’ı 5 saniye ve CheckAge’i 5 dakika olarak sabitler. İçerik hiç değişmese bile her ilan 1.800 saniyede bir yeniden üretilir. 50 router’lı bir alanda bu, ortalama 36 saniyede bir ilan ve tam tazeleme turu başına 2.450 teslimat demektir.

Aynı hedefe iki protokol iki yol kurar

OSPF maliyetinin standart bir hesaplama kuralı yoktur. Cisco’nun varsayılanı 10^8 / bant genişliğidir ve cost 1 ile 65.535 arasında bir değer alır. Bir yolun metriği, yol üzerindeki bütün hatların cost toplamıdır. Formül 100 Mbit/s hattı cost 1, 10 Mbit/s hattı cost 10 yapar. 1 Gbit/s için ham sonuç 0,1’dir ama alt sınır 1 olduğu için gigabit hat ile Fast Ethernet aynı kefeye düşer. Formülün 100 Mbit/s üstünde gözü yoktur. Sahada ilk yapılan ayarlardan biri bu yüzden referans değeri büyütmek: auto-cost reference-bandwidth 100000 ile 100 Gbit/s’lik hat 1, gigabit hat 100 olur.

Şimdi aynı hedefe giden iki yolu yan yana koy.

yolatlamaRIP metriğiOSPF cost
iki adet 10 Mbit/s hat2220
üç adet 1 Gbit/s hat333

RIP birinciyi seçer, çünkü 2 sayısı 3’ten küçüktür ve hattın hızını hiç görmez. OSPF ikinciyi seçer, çünkü onun gözünde 3 maliyeti 20 maliyetinden ucuzdur. Aynı ağda, aynı hedefe, iki ayrı yol. Eşit maliyetli birden çok yol çıkarsa OSPF hepsini birden kullanır.

İkisi aynı cihazda birden koşuyorsa karar administrative distance’a düşer ve küçük olan kazanır: OSPF 110, RIP 120. Tabloda kimin kazandığını satır başındaki harften okursun.

Kenar# show ip route
...
      192.0.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.0.2.0/24 is directly connected, GigabitEthernet0/0
L        192.0.2.1/32 is directly connected, GigabitEthernet0/0
R     198.51.100.0/24 [120/2] via 203.0.113.2, 00:00:11, Serial0/0/0
      203.0.113.0/24 is variably subnetted, 3 subnets, 3 masks
C        203.0.113.0/30 is directly connected, Serial0/0/0
L        203.0.113.1/32 is directly connected, Serial0/0/0
O        203.0.113.64/26 [110/65] via 203.0.113.2, 00:04:52, Serial0/0/0

show ip ospf database komutu ise haritanın kendisini listeler: Link ID, ilanı gönderen router, ilanın yaşı, sıra numarası ve checksum. Durum çıktısındaki SPF sayacı da topolojinin ne sıklıkta değiştiğinin doğrudan ölçüsüdür.

Son fark dayanıklılıkta. Link state’te (bağlantı durumunda) bozuk bir router en fazla kendi hatlarının maliyetini yanlış ilan eder; herkes kendi tablosunu ayrı hesapladığı için hata orada kalır. Uzaklık vektöründe bir düğümün vektörünü başkaları kullanır. Her yere çok ucuz yolu olduğunu söyleyen bir router, bütün trafiği kendine çeker.

Link state de kusursuz değil. 27 Ekim 1980’de ARPANET, tek bir router’ın bozuk belleğinin ürettiği üç ilanın sıra numaraları birbirini sonsuza dek geçtiği için saatlerce çöktü; olay RFC 789’da ayrıntısıyla anlatılıyor. OSPF’teki yaş alanı ve sıra numarası kuralları o günün dersleri.

Özet

  • Uzaklık vektörü komşusuna inanır: Bellman-Ford denklemi komşunun tahminini kanıt görmeden kabul eder; yükselen bir maliyetin ağa yerleşmesi bu yüzden turlarca sürer.
  • Sonsuz sonlu bir sayıdır: RIP’te 16 değeri saymayı durdurur ve aynı seçim ağın çapını on beş atlamayla sınırlar.
  • Link state’te (bağlantı durumunda) ortak olan veritabanıdır: aynı haritadan her router kendini kök alan ayrı bir ağaç çıkarır, tablolar bu yüzden farklıdır.
  • Sayaçlar protokolün karakteridir: RIP 30 saniyede bir konuşur, OSPF 10 saniyede bir Hello gönderir ve 40 saniye susan komşuyu ölü sayar.
  • Metrik seçimi yolu değiştirir: atlama sayan RIP ile bant genişliğine bakan OSPF aynı hedefe iki ayrı yol kurar.

Router’lar haritayı kendileri çıkardı ve kimse tek bir satır yazmadı. Peki bu kararın illa o kutuların içinde verilmesi mi gerekiyor?

43. bölüme devam et: Kontrol Düzlemi ve SDN