Ders 18 / 18
Gecikme ve Verim
Gecikmenin dört bileşeni, bant genişliği–gecikme çarpımı, pencere boyutlandırma ve bir aktarım süresinin bileşenlerine ayrılması.
İçindekiler
Önceki iki ders taşıma protokollerinin verimi nasıl sınırladığını gösterdi: pencere, kayıp oranı, tıkanıklık davranışı. Bu sınırların altında daha temel bir katman vardır — bir bitin tel üzerine konması zaman alır ve sinyal sonlu hızda ilerler.
Bu dersin sorusu, “bağlantım 100 Mb/s” cümlesinin bir aktarımın süresi hakkında ne söylediği ve ne söylemediğidir. Yanıt çoğu durumda beklenenden farklıdır: süreyi belirleyen çoğunlukla bant genişliği değildir.
Gecikmenin Dört Bileşeni
Bir paketin bir bağlantıyı geçmesi dört bileşenden oluşur.
İletim süresi (transmission delay), paketin tüm bitlerinin tel üzerine konması için geçen süredir. Paket boyu ile bağlantı hızının oranıdır:
for hiz in (10e6, 100e6, 1e9, 10e9): print(f"{hiz/1e6:8.0f} Mb/s -> {1500*8/hiz*1e6:8.2f} us")
10 Mb/s -> 1200.00 us
100 Mb/s -> 120.00 us
1000 Mb/s -> 12.00 us
10000 Mb/s -> 1.20 us
Yayılım süresi (propagation delay), sinyalin mesafeyi kat etmesi için geçen süredir. Mesafe ile ortamdaki yayılım hızının oranıdır ve paket boyundan bağımsızdır. Fiber içinde hız yaklaşık m/s’dir.
for km in (1, 100, 1000, 10000): print(f"{km:6d} km -> {km*1000/2e8*1000:8.3f} ms")
1 km -> 0.005 ms 100 km -> 0.500 ms 1000 km -> 5.000 ms 10000 km -> 50.000 ms
Kuyruk gecikmesi (queuing delay), paketin yönlendiricide sırasını beklemesidir. Tek değişken bileşendir: yük arttıkça büyür ve kapasiteye yaklaşıldığında hızla artar. Arabellek şişkinliğinin gecikme üzerindeki etkisi bu bileşende görülür.
İşleme gecikmesi (processing delay), başlığın okunması ve yönlendirme kararının verilmesi için geçen süredir; diğerlerinin yanında küçük kalır.
İki bileşenin ölçek farkı belirleyicidir. 1 Gb/s’lik bir bağlantıda 1500 baytlık bir paketin iletimi 12 mikrosaniye sürerken, aynı paketin bin kilometre gitmesi 5 milisaniye sürer — dört yüz katı. Uzun mesafede süreyi belirleyen bant genişliği değil, ışığın hızıdır. Bant genişliğini artırmak iletim süresini kısaltır; yayılım süresine dokunamaz.
Gidiş–Dönüş Süresi
Gidiş–dönüş süresi (round-trip time, RTT), bir paketin hedefe gidip yanıtın dönmesi için geçen toplam süredir. İki yöndeki tüm bileşenlerin toplamıdır.
Ölçülen değer, iki uç arasındaki coğrafi mesafenin altına inemez. Bin kilometrelik bir yol, gidiş–dönüşte en az 10 ms yayılım süresi gerektirir; ara yönlendiriciler ve kuyruklar bunu artırır. Bir ölçümde bu alt sınırın altına düşen değer, hedefin sanılan yerde olmadığını gösterir.
RTT, taşıma katmanının her düzeneğinin ölçü birimidir: el sıkışma bir RTT, pencere güncellemesi bir RTT, tıkanıklık penceresinin her artışı bir RTT alır.
Bant Genişliği–Gecikme Çarpımı
Bant genişliği–gecikme çarpımı (bandwidth-delay product, BDP), yol üzerinde aynı anda “uçuşta” olabilecek veri miktarıdır:
Ölçü, yolun bir boru gibi düşünülmesinden gelir: bant genişliği borunun kesiti, gidiş–dönüş süresi uzunluğudur; çarpım borunun hacmidir.
for mbps, rtt in ((100, 0.040), (100, 0.100), (1000, 0.040), (1000, 0.100)): bdp = mbps*1e6*rtt/8 print(f"{mbps:5d} Mb/s x {rtt*1000:5.0f} ms = {bdp:12.0f} bayt = " f"{bdp/1024:9.2f} KiB = {bdp/1460:8.1f} MSS")
100 Mb/s x 40 ms = 500000 bayt = 488.28 KiB = 342.5 MSS 100 Mb/s x 100 ms = 1250000 bayt = 1220.70 KiB = 856.2 MSS 1000 Mb/s x 40 ms = 5000000 bayt = 4882.81 KiB = 3424.7 MSS 1000 Mb/s x 100 ms = 12500000 bayt = 12207.03 KiB = 8561.6 MSS
BDP’nin doğrudan bir sonucu vardır: pencere BDP’den küçükse bağlantı boş kalır. Gönderen pencereyi doldurur, onay bekler, bu süre boyunca hiçbir şey göndermez. Verim, TCP dersinde kurulan bağıntıyla sınırlanır.
Gereken pencere boyutu ve pencere ölçeği doğrudan hesaplanır:
| Hedef verim | RTT | Gereken pencere | Gereken ölçek |
|---|---|---|---|
| 100 Mb/s | 40 ms | 488,3 KiB | 3 |
| 500 Mb/s | 100 ms | 6103,5 KiB | 7 |
Ölçeksiz en büyük pencere 65 535 bayttır; her iki satır da onu aşar. Yüksek kapasiteli yollarda pencere ölçeği seçeneği bir eniyileme değil, zorunluluktur.
Bir Aktarımın Bileşenleri
Örnek ağdaki istemcinin 198.51.100.20 adresinden 2 MiB’lik bir kaynak aldığını
varsayalım. Dış bağlantı 100 Mb/s, sunucuya gidiş–dönüş süresi 40 ms, MSS 1460 bayt,
başlangıç tıkanıklık penceresi 10 MSS.
MSS = 1460 BOYUT = 2 * 1024 * 1024 HIZ = 100e6 RTT = 0.040 bdp_mss = HIZ * RTT / 8 / MSS cwnd = 10 gonderilen = 0 tur = 0 while gonderilen < BOYUT and cwnd < bdp_mss: tur += 1 bu_tur = cwnd * MSS gonderilen += bu_tur print(f"tur {tur}: cwnd={cwnd:4d} MSS, bu turda {bu_tur:7d} bayt, " f"toplam {gonderilen:8d} bayt") cwnd *= 2 kalan = BOYUT - gonderilen toplam = RTT + tur * RTT + kalan * 8 / HIZ print(f"el sıkışma {RTT*1000:.0f} ms + yavaş başlangıç {tur*RTT*1000:.0f} ms + " f"kalan {kalan*8/HIZ*1000:.1f} ms = {toplam*1000:.0f} ms") print(f"salt iletim süresi olsaydı: {BOYUT*8/HIZ*1000:.0f} ms") print(f"gerçekleşen ortalama verim: {BOYUT*8/toplam/1e6:.1f} Mb/s")
tur 1: cwnd= 10 MSS, bu turda 14600 bayt, toplam 14600 bayt tur 2: cwnd= 20 MSS, bu turda 29200 bayt, toplam 43800 bayt tur 3: cwnd= 40 MSS, bu turda 58400 bayt, toplam 102200 bayt tur 4: cwnd= 80 MSS, bu turda 116800 bayt, toplam 219000 bayt tur 5: cwnd= 160 MSS, bu turda 233600 bayt, toplam 452600 bayt tur 6: cwnd= 320 MSS, bu turda 467200 bayt, toplam 919800 bayt el sıkışma 40 ms + yavaş başlangıç 240 ms + kalan 94.2 ms = 374 ms salt iletim süresi olsaydı: 168 ms gerçekleşen ortalama verim: 44.8 Mb/s
Sonuç okunmaya değer. Salt iletim 168 ms sürerdi; gerçekleşen süre 374 ms’dir. Aradaki farkın tamamı gecikme kaynaklıdır: bir tur el sıkışma, altı tur pencere büyütme. Ortalama verim, bağlantı kapasitesinin yarısının altında kalmıştır.
Bu bir model hesabıdır; kayıp, ad çözümleme ve güvenli taşıma el sıkışması hesaba katılmamıştır. Her biri en az bir tur daha ekler. Modelin gösterdiği şey mutlak süre değil, bileşenlerin oranıdır.
Küçük Aktarımlarda Belirleyici Olan
Aktarım küçüldükçe gecikmenin payı büyür.
HIZ = 100e6 # önceki örnekle aynı bağlantı RTT = 0.040 kucuk = 20 * 1024 print(f"salt iletim: {kucuk*8/HIZ*1000:.2f} ms; " f"el sıkışma+ilk yanıt: {2*RTT*1000:.0f} ms") print(f"gecikmenin payı: {2*RTT/(2*RTT + kucuk*8/HIZ)*100:.1f} %")
salt iletim: 1.64 ms; el sıkışma+ilk yanıt: 80 ms gecikmenin payı: 98.0 %
20 KiB’lik bir kaynak için sürenin %98’i beklemeyle geçer. Bant genişliğini ikiye katlamak 1,64 ms’yi 0,82 ms’ye indirir ve toplamda fark edilmez; gidiş–dönüş süresini yarıya indirmek ise toplam süreyi neredeyse yarıya indirir.
Bu asimetri, birçok tasarım kararının gerekçesidir: içeriği kullanıcıya coğrafi olarak yakın tutmak, tur sayısını azaltmak, bağlantıları yeniden kullanmak. Hepsi gecikmeye yöneliktir, bant genişliğine değil.
Verim ile Bant Genişliği Aynı Şey Değildir
Üç terim ayrılmalıdır.
| Terim | Tanımı | Ölçülür mü |
|---|---|---|
| Bant genişliği | Bağlantının kuramsal üst sınırı | Genellikle bildirilir |
| Verim (throughput) | Belirli bir akışta gerçekleşen hız | Ölçülür |
| İyi verim (goodput) | Uygulamaya ulaşan yararlı veri hızı | Başlık ve yeniden iletim düşülür |
Üçü arasındaki fark, bu kurs boyunca kurulan her düzenekten pay alır: başlık yükü, yeniden iletim, pencere sınırı, tıkanıklık davranışı, parçalama.
Bir aktarımın yavaş olduğu söylendiğinde sorulacak sorular sırayla şunlardır. Darboğaz alma penceresi mi, tıkanıklık penceresi mi? Kayıp oranı nedir? Gidiş–dönüş süresi beklenenin üstünde mi? Yol MTU keşfi çalışıyor mu? Her sorunun yanıtı, bu kursun bir dersinde kurulmuştur.
Özet
- Gecikme dört bileşenden oluşur: iletim, yayılım, kuyruk ve işleme. Yalnızca iletim süresi bant genişliğine bağlıdır.
- Uzun mesafede süreyi yayılım belirler: 1 Gb/s’de 1500 baytlık paketin iletimi 12 µs, bin kilometrelik yayılımı 5 ms sürer.
- Bant genişliği–gecikme çarpımı, yolda aynı anda uçuşta olabilecek veri miktarıdır; pencere bundan küçükse bağlantı boş kalır.
- 100 Mb/s ve 40 ms için BDP 488 KiB’dir; ölçeksiz en büyük pencere 64 KiB olduğundan pencere ölçeği zorunludur.
- 2 MiB’lik bir aktarımda salt iletim 168 ms, el sıkışma ve yavaş başlangıçla birlikte 374 ms sürer; ortalama verim kapasitenin yarısının altında kalır.
- Küçük aktarımlarda sürenin neredeyse tamamı beklemedir; bant genişliğini artırmak fark yaratmaz, gidiş–dönüş süresini kısaltmak yaratır.
Kurs Kapanışı
Bu kurs tek bir örnek üzerinden yürüdü: 192.168.10.0/24 bloğuna sahip bir kurumun ağı ve o
ağdaki 192.168.10.196 adresli istemcinin dış dünyaya gönderdiği bir paket.
Katmanlı modeller, paketin hangi sorunları hangi sırayla çözdüğünü tanımladı ve bir arızayı doğru katmana yerleştirmenin yolunu verdi. Kapsülleme, verinin katman katman sarmalanmasını ve bu sarmalamanın maliyetini gösterdi.
Bağlantı ve ağ katmanı konusu adres planını kurdu. Eşit bölmenin 640 adres istediği yerde değişken uzunluklu bölme aynı işi 244 adresle yaptı; plan, kiralama havuzlarına ve dış çıkış için çevrim tablosuna dönüştü. Aynı ağ IPv6 ile yeniden adreslendiğinde adres sayımı hiç yapılmadı — kıtlığın ortadan kalkması, planlama işini de değiştirmişti.
Taşıma katmanı konusu, bu paketin bir akışın parçası olduğunu gösterdi. Dörtlü akışı adlandırdı; TCP güvenilirlik sözünü sıra numaraları, yeniden iletim ve pencerelerle tuttu; tıkanıklık denetimi görünmeyen bir kapasiteyi ölçüm ve uyumla tahmin etti; UDP bu sözlerin hangi durumlarda gereksiz olduğunu gösterdi. Son ders, tüm bu düzeneklerin altındaki fiziksel sınırları ayırdı.
Kursun kazanımları buluşur: bir sorunu doğru katmana yerleştirmek, bir adres planı tasarlayıp sınamak ve bir uygulamanın gereksinimine göre taşıma protokolü seçmek. Üçü de aynı alışkanlığa dayanır — bir davranışı, onu üreten düzeneğe kadar izlemek.
Bir sonraki kurs olan Uygulama Katmanı Protokolleri, buradaki taşıma soyutlamasının üstünde çalışan protokolleri ele alır: HTTP sürümlerinin tasarım farkları ve bunların sıra başı engellemesiyle ilişkisi, güvenli taşıma el sıkışmasının ek turları ve sertifika zincirinin doğrulanması, gerçek zamanlı iletişim için protokol seçimi. Bu kursta hesaplanan gecikme bütçesi, oradaki her tasarım kararının ölçütü olacaktır.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.