Ana içeriğe geç

Bölüm 2:Paket Anahtarlamalı Yol

11 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak yazısının parçası: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine kadar inen uzun bir teknik yolculuk.

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. Önbellek, Tazelik ve Güven
  6. Port Numarası ve Soket
  7. Bağlantısız Taşıma: UDP
  8. Üç Adımlı El Sıkışma
  9. Simetrik Şifreleme
  10. Açık Anahtarlı Kriptografi
  11. TLS El Sıkışması
  12. Sertifika Zinciri
  13. HTTP Mesajının Anatomisi
  14. Durum, Çerez ve Oturum
  15. HTTP/2'den HTTP/3'e
  16. İçerik Dağıtım Ağları
  17. Diğer Uygulama Protokolleri
  18. Katmanlı Mimari
  19. Kapsülleme ve Başlıklar
  20. Paket Yakalama ve Çözümleme
  21. Ağ Arayüz Kartı
  22. Fiziksel Adresleme
  23. Hata Sezme ve CRC
  24. Adres Çözümleme: ARP
  25. Anahtarlama ve Ortam Erişimi
  26. Ağ Topolojileri
  27. Sanal Yerel Ağlar
  28. Kablosuz Erişim: 802.11
  29. Radyo Kanalı ve Kapasite
  30. Kablosuz Ağ Güvenliği
  31. Hücresel Ağlar
  32. Spektrum ve Kuşaklar
  33. Hareketlilik ve Aktarma
  34. Adres Kiralama: DHCP
  35. Adresin Anatomisi
  36. Adres Tükenmesi ve IPv6
  37. Yönlendirici Mimarisi
  38. Kuyruk Yönetimi
  39. Cihaz Yapılandırma
  40. Yönlendirme Protokolleri
  41. Kontrol Düzlemi ve SDN
  42. Ağ İzleme ve Yönetimi
  43. Alanlar Arası Yönlendirme
  44. Adres Çevirisi
  45. Ara Kutular
  46. Tünelleme ve IPsec
  47. Güvenlik Duvarları
  48. Operatör ve Metro Ağları
  49. Bitten Sinyale
  50. Çoklama Teknikleri
  51. İletim Ortamları
  52. Kablo Sonlandırma
  53. Fiber Optik İletim
  54. Bakır Erişim Ağı: DSL
  55. Pasif Optik Ağlar
  56. Kablo Erişim Ağları
  57. Denizaltı Kabloları
  58. Veri Merkezi Ağları
  59. Kapsülleme Çözme
  60. Güvenilir Aktarım
  61. Tıkanıklık Denetimi
  62. Trafik Çözümleme
  63. Gecikme Bütçesi
  64. Son Söz

Tarayıcı isteği yazdı, soketi açmaya hazırlandı, sonra durdu. Ağ isimden anlamıyor ve bunun sebebi kabalık değil. Sebep ölçek: yolu bilen tek bir merkez yok.

Merkez yoksa yol neye benziyor? Veri o yolda bütün hâlde mi gidiyor, parça parça mı?

Ortada baştan sona uzanan bir yol yok

Ağ sözcüğü kafada bir tel canlandırıyor: bir ucunda sen, bir ucunda sunucu. Böyle bir tel yok. Onun yerine kutular var, her kutunun birkaç kablosu ve kabloların ucunda başka kutular.

Bir bina kablo dolabı: rafa monte yama panelleri ve bir anahtar, önlerinden yüzlerce mavi ve gri kablo sarkıyor. Kutuların ve kabloların gerçekte nasıl göründüğü.

Bir paket geldiğinde kutu tek bir karar veriyor: bunu hangi kablodan çıkarmalı? Kutu paketin nereden geldiğini umursamıyor, kaç durak sonra varacağını bilmiyor. Elindeki tek bilgi paketin üstünde yazan hedef ve kendi belleğindeki bir tablo. Tabloya bakıyor, kablo seçiyor, paketi itiyor.

Karar paket başına veriliyor, sohbet başına değil. Aynı sohbetin iki paketi, tablo arada değişmişse farklı kablolardan gidebiliyor. Görünür sonucu şu: paketler gönderildikleri sırayla varmak zorunda değil. Ağ hiçbir yerde sıralama sözü vermiyor ve bu eksiği kapatma işini uçlara bırakıyor.

Ortaya iki ayrı iş çıkıyor ve bunları karıştırmamak gerekiyor. Gelen tek bir paketi doğru kabloya itmek yerel bir iştir, hızlıdır, mikrosaniyeler içinde biter; buna iletme diyoruz. O tabloyu doldurmak ise küresel bir iştir, yavaştır, kutuların birbiriyle konuşmasıyla yürür; buna da yönlendirme. İkisini ayrı ayrı açacağız. Kutuların adını da burada verelim. Bunlara yönlendirici deniyor; kitabın geri kalanında o adla anacağım.

İki çizim. Üstte paketler kaynaktan hedefe yönlendiriciler üstünden düz bir yol izliyor. Altta yoldaki bir düğüm kırmızı çarpıyla devre dışı bırakılmış ve paketler alttaki düğümlerden dolaşarak aynı hedefe varıyor.

Yol kimsenin sahibi olmadığı için sabit de değil. Bir kablo koptuğunda tablolar değişiyor ve aynı sohbetin paketleri başka duraklardan geçmeye başlıyor. Sen bunu fark etmiyorsun.

Mesaj neden parçalara bölünüyor?

Tarayıcının ürettiği istek birkaç satır metindi ama yola tek bir bütün olarak çıkmıyor. Küçük parçalara bölünüyor ve her parça kendi başına yolculuk ediyor. Bunlara paket diyoruz.

Bir paket iki kısımdan oluşuyor. Önde ağın kendisi için yazılmış bilgi var — nereye gittiği, nereden geldiği, ne kadar uzun olduğu — ve buna başlık (header) deniyor. Arkadaki asıl içeriğe ise yük (payload) deniyor. Yoldaki kutular yalnızca başlığa bakıyor; yükün ne olduğunu hiçbiri bilmiyor.

Bölmenin üç sebebi var. Birincisi paylaşım: bir kablo aynı anda tek bir şey taşıyabiliyor, dolayısıyla büyük bir dosya bölünmeden gönderilseydi o dosya bitene kadar aynı kabloyu kullanan herkes beklerdi. İkincisi hata: bölünmemiş bir mesajda tek bir bozuk bayt her şeyi baştan göndermek demek, paketlerde ise yalnızca bozulan parça yeniden gönderiliyor. Üçüncüsü daha az göze çarpıyor — bölünmüş bir mesaj aynı anda birden fazla kabloda birden bulunabiliyor; baştaki paket ikinci kabloya geçmişken sondaki hâlâ birincide ilerliyor.

Bunun bir de maliyeti var ve adı sakla-ve-ilet. Bir kutu, paketin tamamı kendisine ulaşmadan onu bir sonraki kabloya itmeye başlamıyor; başlıktaki hata denetimini ancak sonu görünce yapabiliyor. Yani her durakta paketin tamamı bir kez daha kabloya itiliyor.

Öteki tasarım: yolu baştan ayırtmak

Ağ kurmanın tek yolu bu değildi. Konuşmaya başlamadan önce baştan sona bir yol ayırtan, çok daha eski bir tasarım var; adı devre anahtarlama. Bağlantı istediğinde ağ bir hazırlık turu yapıyor, yol üstündeki her durakta sana bir pay ayırıyor ve ancak sonra “konuşabilirsin” diyor. Ayrılan pay konuşma bitene kadar senin kalıyor.

Manuel telefon santralinde çalışan operatörler. Öndeki operatör elindeki kırmızı kordonu jak alanındaki bir deliğe takıyor; sıra boyunca panellerde takılı duran onlarca kordon görünüyor. Her kordon, konuşma boyunca ayrılmış bir devre.

Payı ayırmanın iki klasik yolu var. Frekans bölmede taşıyıcı bant dar dilimlere ayrılıyor ve her konuşma kendi diliminde kesintisiz akıyor, ama o dilimin izin verdiği hızı hiç aşamıyor. Zaman bölmede ise saat eşit aralıklara ayrılıyor ve her konuşmaya düzenli dönen bir slot düşüyor; bu kez bandın tamamı kullanılıyor, ama yalnızca kendi slotu boyunca.

Bunu bir otoyolla düşünmek işi kolaylaştırıyor. Devre anahtarlama, otoyolda sana özel bir şerit ayırmaya benziyor: o şerit senindir, kimse giremez, trafiğe takılmazsın, ama kullanmadığın sürece boş durur. Paket anahtarlama şerit ayırmıyor; herkes bütün şeritleri paylaşıyor. Haritalaması şöyle: şerit hattın kapasitesi, ayrılmış şerit devre, giriş rampasındaki bekleme kuyruk gecikmesi, yolun en dar kesiti ise darboğaz. Benzetme şurada bitiyor: otoyolda sıkışan araç bekler ve eninde sonunda geçer, ağda ise kuyruk dolduğunda gelen paket beklemeye alınmaz, silinir.

Ayrılmış payın bedeli o boşlukta saklı. Bir web isteği sürekli akan bir şey değil; kısa bir patlama yapıyor, sonra uzun süre susuyor. Böyle bir trafiğe en yüksek hızına göre pay ayırırsan zamanın çoğunda boş kapasite tutmuş olursun.

Paket anahtarlama tam buradan kazanıyor. Kullanıcılar aynı anda konuşmadığı için aynı hat çok daha fazla kullanıcıya yetiyor; ağ ayrılmış pay yerine anlık talebe göre dağıtım yapıyor ve bu dağıtım biçiminin adı istatistiksel çoklama. Bedeli de aynı yerden geliyor: ayrılmış pay olmadığı için garanti de yok.

DerinleşmeDevre anahtarlama neden telefon şebekesinde bu kadar uzun yaşadı?

Devre anahtarlamanın veri ağlarında yenilmesi, onun kötü bir fikir olduğu anlamına gelmiyor. Yanlış trafiğe uygulandığında kötü. Doğru trafiğe uygulandığında yıllarca en iyi çözüm olarak kaldı ve bunun dört ayrı sebebi var.

Birincisi sesin biçimi. Bir telefon konuşması patlamalı değil, süreklidir. Hat açıldığı andan kapandığı ana kadar iki taraf da neredeyse sabit hızda veri üretir. İstatistiksel çoklamanın sömürdüğü boşluk burada yoktur, dolayısıyla paylaşımdan kazanılacak da fazla bir şey yoktur.

İkincisi sesin gecikmeye duyarlılığı. Bir sayfa yarım saniye geç gelirse rahatsız olursun ama sayfa yine de doğrudur. Ses yarım saniye geç gelirse konuşma bozulur, karşılıklı sözler üst üste biner. Ayrılmış pay, kuyruk gecikmesini tanım gereği sıfırlar.

Üçüncüsü dönemin donanımı. Paket anahtarlama her paket için başlık okumayı, tablo aramayı ve karar vermeyi gerektirir. Devre anahtarlamada bu iş yalnızca bir kez, bağlantı kurulurken yapılır; sonrasında santral yalnızca sabit bir bağlantıyı ayakta tutar. Elektromekanik santrallerin yapabileceği iş tam olarak buydu.

Dördüncüsü para. Ayrılmış pay ile dakika başına faturalandırma aynı şeyin iki yüzüdür. Şebeke ne sattığını tam olarak biliyordu, çünkü sattığı şey ölçülebilir bir kaynaktı.

Peki neden bitti? Çünkü ses, taşınan trafiğin içinde küçük bir paya düştü. Aynı ülkede iki ayrı şebekeyi ayakta tutmanın maliyeti, sesi veri ağının üstüne taşımanın maliyetini geçti. Bugün cep telefonundan konuştuğunda sesin de paketlere bölünüyor. Bakır telefon şebekeleri ülke ülke kapatılıyor, üstelik ilan edilen kapanış tarihleri bir kereden fazla ertelendi; eski şebekeye bağlı asansör telefonlarını ve alarm sistemlerini taşımak sanılandan zor çıktı.

Ayrılmış kaynak, talep düzenli ve öngörülebilirken ucuzdur. Talep dalgalıysa paylaşım kazanır.

Bir paketin başına gelen dört gecikme

Paket bir duraktan geçerken dört ayrı gecikme topluyor ve bunları ayırmak, ağ hakkında konuşabilmenin ön şartı.

İşleme gecikmesi, kutunun başlığı okuyup hata denetimi yaptığı ve kabloyu seçtiği süre; bugünün donanımında mikrosaniyenin altında. Kuyruk gecikmesi, çıkış kablosu meşgulse beklenen süre — dördü içinde senin paketine değil, başkalarının trafiğine bağlı olan tek bileşen. Kalan ikisi ise doğrudan formülle yazılabiliyor ve ikisi de tek bir bölme işlemi:

iletim gecikmesi  =  paket uzunluğu (bit)  /  hat hızı (bit/s)
yayılım gecikmesi =  mesafe (m)            /  ortamdaki hız (m/s)

Sayı koyalım. Yerel ağlarda alışılmış en büyük paket 1.500 bayt, yani 12.000 bit. Saniyede bir gigabit taşıyan bir hatta bu paketi itmek 12 mikrosaniye sürüyor. Sinyalin bakırdaki ya da camdaki hızı ise ışığın boşluktaki hızının kabaca üçte ikisi, saniyede iki yüz bin kilometre civarında; hız ortamın elektriksel özelliklerine ve frekansa göre biraz oynuyor. Bin kilometrelik bir fiber hattı geçmek bu hızla yaklaşık 5 milisaniye tutuyor.

Dördünü yan yana koyunca hangisinin önemli olduğu tek bakışta görünüyor:

gecikmeneye bağlıtipik mertebehattı hızlandırınca
işlemekutunun donanımımikrosaniyenin altıdeğişmez
iletimpaket boyu / hat hızı1 Gbit/s’te 12 µsküçülür
yayılımmesafe / ortamdaki hız1.000 km’de 5 msdeğişmez
kuyrukbaşkalarının trafiği0’dan onlarca ms’yedolaylı olarak küçülür

Aradaki fark dört yüz katın üstünde. Hattını hızlandırmak iletim gecikmesini küçültüyor, yayılım gecikmesine hiç dokunmuyor. İki katı hızlı bir hat alabilirsin ama okyanusu yarı boyuna indiremezsin.

Tablonun son satırı da bu bölümün geri kalanının konusu: dört kalemden üçü hesaplanabilir, dördüncüsü tahmin edilemez.

Dört kalemin birbirine göre büyüklüğünü görmek istersen:

Bir paketin tek durakta topladığı dört gecikme
paket geldisonraki durağaİşlemebaşlığı oku, hatayıdenetle, kabloyu seçKuyrukçıkış kablosu boşalanakadar bekleİletimpaket uzunluğu ÷hat hızıYayılımmesafe ÷ ortamdakiyayılım hızı12 mikrosaniye · 5 milisaniye
İşleme gecikmesi. Kutu başlığı okuyor, bitlerde hata var mı diye bakıyor ve çıkış kablosunu seçiyor. Bugünün donanımında mikrosaniyenin altında kalıyor.
  1. İşleme gecikmesi. Kutu başlığı okuyor, bitlerde hata var mı diye bakıyor ve çıkış kablosunu seçiyor. Bugünün donanımında mikrosaniyenin altında kalıyor.
  2. Kuyruk gecikmesi. Seçilen kablo meşgulse paket sırasını bekliyor. Dördü içinde senin paketine değil, o anda aynı kabloyu kullanan başkalarının trafiğine bağlı olan tek bileşen.
  3. İletim gecikmesi. Paketin bitleri kabloya itiliyor. Süre tek bir bölme işlemi: paket uzunluğu bölü hat hızı. Daha hızlı bir hat bu bileşeni doğrudan küçültüyor.
  4. Yayılım gecikmesi. Bitler kabloya girdi, şimdi fiziksel olarak yol alıyorlar. Süre mesafe bölü ortamdaki yayılım hızı. Hattı hızlandırmak buna hiç dokunmuyor.
  5. Aradaki büyüklük farkı. Bin kilometrelik bir fiber hatta 1.500 baytlık paket için iletim 12 mikrosaniye, yayılım 5 milisaniye sürüyor. Hat hızı bu farkı kapatmıyor.

Kuyruk neden birden büyüyor?

Dört gecikmenin üçü baştan hesaplanabiliyor; dördüncüsü öyle değil ve tuhaf davranıyor.

Kuyruğun davranışı tek bir orana bağlı: kabloya gelen bit hızının, kablonun çıkarabildiği bit hızına oranı; bu orana trafik yoğunluğu deniyor ve kuyruk hakkında söylenebilecek neredeyse her şey bu tek sayıdan çıkıyor.

trafik yoğunluğu  =  (ortalama paket varış hızı × paket uzunluğu)  /  hat hızı

Oran birin altındaysa kuyruk zaman zaman doluyor ama boşalabiliyor; biri geçtiyse gelen iş çıkan işten fazla demektir ve kuyruk sürekli büyür. Beklenen şey, oran arttıkça gecikmenin de aynı ölçüde artması. Öyle olmuyor: oran bire yaklaştıkça ortalama bekleme dikleşerek tırmanıyor. Yüzde altmışta rahat çalışan bir hat, yüzde doksan beşte tanınmaz hâle gelebiliyor. Hatları asla tam dolulukta çalıştırmama alışkanlığı buradan geliyor.

Asıl şaşırtıcı olan şu: kuyruklar oran daha bire çok uzakken de oluşuyor. Sebep, trafiğin düzgün gelmemesi. Paketler saat gibi eşit aralıklarla değil, öbekler hâlinde geliyor. Aynı mikrosaniyede on paket geldiyse dokuzu bekliyor. Kuyruğu büyüten şey ortalama yük değil, yükün dalgalanması.

Dalgalanma öngörülebilirliği de bozuyor. Aynı yolu izleyen iki paketten biri boş bir kablo bulup hemen geçerken öteki dolu bir kuyruğa takılabiliyor; gecikmenin paketten pakete böyle oynamasına gecikme oynaması (jitter) deniyor. Dosya indirirken fark etmezsin. Sesli görüşmede ise en çok şikâyet edilen şey gecikmenin büyüklüğü değildir, bu oynamadır.

Bekleme alanının kendisi de sonsuz değil. Kutunun her kablo için ayırdığı bellek belli bir boyutta ve dolduğunda gelen paket bekletilmiyor. Siliniyor. Kutu kimseye haber vermiyor, sayacını bir artırıp yoluna devam ediyor. Silinen paketin akıbetini de ağ değil uçlar belirliyor.

Burada bir basitleştirme yapıyorum ve açıkça söylüyorum: tıkanıklığı “kuyruk dolar, paket silinir” diye geçiyorum. Ağın buna nasıl tepki verdiği ayrı bir konu; tıkanıklık denetimini kurarken bu borcu ödeyeceğiz.

Hız en dar yerde ölçülür

Günlük dilde tek bir hız var: hattının hızı. Ağda ise iki ayrı büyüklük var. Bir kablonun taşıyabileceği en yüksek hıza bant genişliği diyoruz ve o kablonun kendi özelliği. Baştan sona gerçekten elde ettiğin hıza ise throughput diyoruz ve o bütün yolun özelliği.

İlişki bir zincire benziyor. Yolun üstünde onlarca kablo var ve baştan sona akan hız bunların en yavaşını aşamıyor; o halkaya darboğaz hattı deniyor. Otoyol yeniden işe yarıyor: en dar kesit akışı belirliyor, öteki kesitleri genişletmek hiçbir şeyi değiştirmiyor.

Bu cümle bir formüle sığıyor. Sunucunun çıkış hattı Rs, senin erişim hattın Rc olsun:

throughput = min(Rs, Rc)

Aradaki bütün omurga bu hesaba girmiyor — çünkü omurga hatları uçlardan kat kat geniş. Yolun ortasında paylaşılan bir darboğaz varsa formül bir terim daha alıyor. R kapasiteli o kesiti N bağlantı paylaşıyorsa:

throughput = min(Rs, Rc, R/N)

Aktarımın ne kadar süreceği de buradan çıkıyor: F boyundaki bir dosya için süre F / throughput.

Sayıya dökelim. 32 Mbit’lik bir dosya, sunucu hattı 2 Mbit/s, senin hattın 1 Mbit/s. Throughput min(2, 1) = 1 Mbit/s, süre 32 saniye. Şimdi kendi hattını ikiye katla: throughput min(2, 2) = 2 Mbit/s olur ve süre 16 saniyeye iner — kazanç gerçek. Bir kez daha katla: min(2, 4) = 2 çıkar, süre 16 saniyede kalır. İkinci katlamanın hiçbir etkisi yok, çünkü darboğaz artık sende değil.

Bu, evindeki hattı yükseltip hiçbir şeyin hızlanmadığını görmenin tam açıklaması. Darboğaz sunucunun çıkış hattında ya da yolun ortasındaki paylaşılan bir kesitte duruyor olabilir; üstelik o kesiti yalnız da kullanmıyorsun, aynı anda oradan geçen her bağlantı payı bölüyor. Formüldeki N tam olarak bu.

Bunun tersi de doğru: bant genişliği bol olan bir yol, gecikmesi büyükse yine de yavaş hissettirir. Bant genişliği aktarımın ne kadar sürede biteceğini, gecikme ise ne kadar sürede başlayacağını belirliyor. Küçük dosyalarda baskın olan ikincisidir.

Bunu manzarayla birleştirdiğinde tablo tamamlanıyor: bir sayfa nesnelerin toplamıydı ve tarayıcı önbelleklerinden karşılanamayan her nesne kendi isteğini doğuruyordu. O isteklerin çoğu küçük. Küçük nesnelerde geçen sürenin büyük kısmı veri taşımak değil, gidip gelmek.

Özet

Peki, ne öğrendik?

  • Yol, iki ucu olan bir tel değil; bağımsız kararlar veren kutuların ağı. Karar paket başına verildiği için sıra bile garanti değil.
  • Mesaj paketlere bölünüyor, çünkü kablo paylaşılıyor. Bedeli sakla-ve-ilet: her durakta paketin tamamı bir kez daha kabloya itiliyor.
  • Devre anahtarlama garanti veriyor, karşılığında boş kapasite tutuyor. Paket anahtarlamanın kazancı istatistiksel çoklama, bedeli garantisizlik.
  • Dört gecikme üst üste biniyor: işleme, kuyruk, iletim ve yayılım. İletim L/R, yayılım d/s; hattı hızlandırmak yalnızca ilkini küçültüyor.
  • Kuyruğu büyüten şey ortalama yük değil, yükün dalgalanması ve bellek dolduğunda paket bekletilmiyor, siliniyor.
  • Baştan sona hız en dar kesitte belirleniyor. Küçük nesnelerde asıl bedel taşınan bayt değil, yapılan gidiş dönüş sayısı.

Yolun neye benzediğini artık biliyorsun: paylaşılan, garantisiz, her durağında yerel karar verilen bir yol. Ama o kutuların baktığı bir şey vardı, paketin üstündeki hedef. Yol paketlerle çalışıyorsa, paketin üstüne hangi adresi yazacaksın?

3. bölüme devam et: İsimden Adrese