Bölüm 2: Paket Anahtarlamalı Yol
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 1: Yola Çıkmadan Önce (Bölüm 1-5)
Tüm bölümler
- Giriş
- Adres Çubuğundan İsteğe
- Paket Anahtarlamalı Yol
- İsimden Adrese
- DNS Kayıtları
- Önbellek, Tazelik ve Güven
- Port Numarası ve Soket
- Bağlantısız Taşıma: UDP
- Üç Adımlı El Sıkışma
- Simetrik Şifreleme
- Açık Anahtarlı Kriptografi
- TLS El Sıkışması
- Sertifika Zinciri
- HTTP Mesajının Anatomisi
- Durum, Çerez ve Oturum
- HTTP/2'den HTTP/3'e
- İçerik Dağıtım Ağları
- Diğer Uygulama Protokolleri
- Katmanlı Mimari
- Hizmet ve Protokol
- Encapsulation ve Başlıklar
- Paket Yakalama ve Çözümleme
- Ağ Interface Kartı
- Fiziksel Adresleme
- Hata Sezme ve CRC
- Adres Çözümleme: ARP
- Ortam Erişimi: CSMA/CD
- Switch'ler
- Ağ Topolojileri
- Sanal Yerel Ağlar
- Kablosuz Erişim: 802.11
- Radyo Kanalı ve Kapasite
- Kablosuz Ağ Güvenliği
- Hücresel Ağlar
- Spektrum ve Kuşaklar
- Hareketlilik ve Aktarma
- Adres Kiralama: DHCP
- Adresin Anatomisi
- Adres Tükenmesi ve IPv6
- Router Mimarisi
- Kuyruk Yönetimi
- Cihaz Yapılandırma
- Routing Protokolleri
- Kontrol Düzlemi ve SDN
- Ağ İzleme ve Yönetimi
- Alanlar Arası Routing
- Adres Çevirisi
- Ara Kutular
- Tünelleme ve IPsec
- Firewall'lar
- Ağ Saldırıları
- Operatör ve Metro Ağları
- Bitten Sinyale
- Sembol Hızı ve Kanal Kapasitesi
- Multiplexing Teknikleri
- İletim Ortamları
- Bakır Kablo Sonlandırma
- Fiber Sonlandırma
- Fiber Optik İletim
- Bakır Erişim Ağı: DSL
- DSL'de Hız ve Mesafe
- Pasif Optik Ağlar
- Kablo Erişim Ağları
- Kablo Modem ve CMTS
- Denizaltı Kabloları
- Veri Merkezi Ağları
- Encapsulation Çözme
- Güvenilir Aktarım
- Tıkanıklık Denetimi
- Trafik Çözümleme
- Gecikme Bütçesi
- Soket Programlama
- Eşten Eşe ve Protokol Tasarımı
- Uyarlanır Video Akışı
- Gerçek Zamanlı Ses ve Görüntü
- Kablosuz Sensör Ağlarının Mimarisi
- Sensör Ağlarında Ortam Erişimi
- Sensör Ağlarında Yönlendirme ve IP
- Zaman Eşitleme ve Konum Bulma
- Sensör Ağı Uygulamaları
- Mobil Kablosuz Sensör Ağları
- Son Söz
Tarayıcı isteği yazdı, soketi açmaya hazırlandı, sonra durdu. Ağ isimden anlamıyor ve bunun sebebi bir ihmal değil, ölçek. Yolu baştan sona bilen bir merkez yok; her kutu yalnızca paketi hangi komşusuna vereceğini biliyor. İsimle çalışan bir ağda her kutunun dünyadaki bütün isimlerin nerede durduğunu bilmesi gerekirdi.
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 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 (forwarding) diyoruz. İletirken bakılan tabloya da iletme tablosu (forwarding table) deniyor; Türkçede çoğu zaman yönlendirme tablosu diye de geçiyor. O tabloyu doldurmak ise küresel bir iştir, yavaştır, kutuların birbiriyle konuşmasıyla yürür; buna da routing diyoruz. İletmeyi 39., routing’i 42. bölümde ayrı ayrı açacağız. Kutuların adını da burada verelim. Bunlara router (yönlendirici) deniyor; kitabın geri kalanında o adla anacağım.

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. 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ü hız; onu görmek için önce yoldaki kutunun nasıl çalıştığına bakmak gerekiyor.
Kutu, paketin tamamı kendisine ulaşmadan onu bir sonraki kabloya itmeye başlamıyor; paketin sonuna eklenen hata denetimini ancak paket bütünüyle gelince yapabiliyor. Bu çalışma biçiminin adı store-and-forward, yani sakla ve ilet: her durakta paketin tamamı bir kez daha kabloya itiliyor.
Mesaj bölünmeseydi bu bedel ağır olurdu. 10 megabitlik bir mesajı, saniyede 10 megabit taşıyan üç hattan geçirdiğini düşün. Bütün hâlinde gönderilen mesaj her durakta bir saniye bekliyor ve varış üç saniye sürüyor. Bin pakete bölündüğünde ise ilk paket üçüncü milisaniyede varıyor, arkadakiler onu boşluk bırakmadan izliyor ve son paket bir saniyeyi iki milisaniye geçe varıyor. Aynı hatlar, aynı mesaj, neredeyse üç kat hızlı varış. Sebep, bölünmüş mesajın aynı anda birden fazla kabloda bulunabilmesi: baştaki paket üçüncü hattayken sondaki hâlâ birincide ilerliyor.
Mesajı paketlere bölüp her paketi durak durak sakla ve ilet kuralıyla taşıyan bu düzenin adı paket anahtarlama (packet switching). Router, bu düzenle çalışan kutudur: paketin tamamı gelmeden onu bir sonraki kabloya itmez, çıkış kablosunu da iletme tablosundan seçer.
Ö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. Bu yüzden devre anahtarlama garantili bant genişliği veriyor: hatta başkaları ne yaparsa yapsın senin hızın değişmiyor. Garanti bağlantı kurulurken veriliyor; yolda ayrılacak pay kalmadıysa bağlantı hiç kurulmuyor.

Payı ayırmanın iki klasik yolu var ve ikisi de tek bir hattı birden çok devreye bölüyor. Frekans bölmede (FDM) 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 (TDM) 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. İkisini 54. bölümde ayrıntısıyla göreceksin.
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. Şerit hattın kapasitesine, ayrılmış şerit devreye, giriş rampasındaki bekleme kuyruk gecikmesine, yolun en dar kesiti ise darboğaza karşılık geliyor. Benzetmenin tutmadığı yer taşma anı: 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 multiplexing. 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 multiplexing’in 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ş 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ı kuruşu kuruşuna 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:
| gecikme | neye bağlı | tipik mertebe | hattı hızlandırınca |
|---|---|---|---|
| işleme | kutunun donanımı | mikrosaniyenin altı | değişmez |
| iletim | paket boyu / hat hızı | 1 Gbit/s’te 12 µs | küçülür |
| yayılım | mesafe / ortamdaki hız | 1.000 km’de 5 ms | değişmez |
| kuyruk | başkalarının trafiği | 0’dan onlarca ms’ye | dolaylı olarak küçülür |
İletimle yayılım arasındaki 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.
İletimle yayılımın farkını zaman ekseninde görmek istersen:
- İki uç ve zaman. Soldaki dikey çizgi gönderen, sağdaki alıcı; aralarında 1.000 km fiber var. Zaman yukarıdan aşağı akıyor. İki kalemi aynı çizime ölçekli sığdırmak için yavaş bir hat seçtik: 1 Mbit/s.
- İlk bit yola çıkıyor. İlk bit sıfır anında gönderenden çıkıyor ve camda saniyede yaklaşık 200.000 km ilerleyip alıcıya 5 ms sonra varıyor. Çizginin eğimi yalnızca mesafeye ve ortama bağlı: yayılım gecikmesi.
- Son bit 12 ms sonra çıkıyor. 1.500 baytı, yani 12.000 biti saniyede bir milyon bitle kabloya itmek 12 ms sürüyor. Son bit ancak o zaman yola çıkabiliyor. Gönderen tarafta biriken bu süre iletim gecikmesi.
- Paket bir şerit gibi akıyor. İki çizgi arasındaki şerit paketin bitleri. Son bit alıcıya 12 + 5 = 17 ms sonra varıyor: paketin tamamını almak iletimle yayılımın toplamı kadar sürüyor.
- Hat on kat hızlanınca. 10 Mbit/s hatta son bit 1,2 ms sonra çıkıyor ve şerit on kat inceliyor. Eğim ise hiç değişmiyor, yayılım yine 5 ms. Gigabitlik bir hatta şerit çizgiye döner; geriye yalnızca yayılım kalır.
Kuyruk neden birden büyü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 bilerek basitleştiriyorum: tıkanıklığı “kuyruk dolar, paket silinir” diye geçiyorum. Uçların buna nasıl tepki verdiği ayrı bir konu; 68. bölümde 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.
Evindeki hattı yükselttiğin hâlde hiçbir şeyin hızlanmaması çoğu zaman bununla açıklanıyor. 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 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 ilk durakta gördüğün 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
- Yol, iki ucu olan bir tel değil; bağımsız kararlar veren kutuların ağı. Karar paket başına, iletme tablosuna bakılarak verildiği için sıra bile garanti değil.
- Mesaj paketlere bölünüyor: kablo paylaşılabiliyor, bozulan parça tek başına yeniden gönderiliyor ve store-and-forward’ın her durakta ödettiği bekleme, paketler art arda aktıkça neredeyse kayboluyor.
- Devre anahtarlama garantili bant genişliği veriyor, karşılığında boş kapasite tutuyor ve payı frekansta (FDM) ya da zamanda (TDM) bölüyor. Paket anahtarlamanın kazancı istatistiksel multiplexing, bedeli garantisizlik.
- Dört gecikme üst üste biniyor: işleme, kuyruk, iletim ve yayılım. İletim paket boyu bölü hat hızı, yayılım mesafe bölü ortamdaki hız; hattı hızlandırmak yalnızca iletimi 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