İçeriğe geç
academia.sh

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:

diletim=LRd_{\text{iletim}} = \frac{L}{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 2×1082 \times 10^8 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:

BDP=R×RTT\text{BDP} = R \times \text{RTT}

Ö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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat