Bölüm 62:Gecikme Bütçesi
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
- Giriş
- Adres Çubuğundan İsteğe
- Paket Anahtarlamalı Yol
- İsimden Adrese
- Ö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
- Kapsülleme ve Başlıklar
- Paket Yakalama ve Çözümleme
- Ağ Arayüz Kartı
- Fiziksel Adresleme
- Hata Sezme ve CRC
- Adres Çözümleme: ARP
- Anahtarlama ve Ortam Erişimi
- 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
- Yönlendirici Mimarisi
- Kuyruk Yönetimi
- Cihaz Yapılandırma
- Yönlendirme Protokolleri
- Kontrol Düzlemi ve SDN
- Ağ İzleme ve Yönetimi
- Alanlar Arası Yönlendirme
- Adres Çevirisi
- Ara Kutular
- Tünelleme ve IPsec
- Güvenlik Duvarları
- Operatör ve Metro Ağları
- Bitten Sinyale
- Çoklama Teknikleri
- İletim Ortamları
- Kablo Sonlandırma
- Fiber Optik İletim
- Bakır Erişim Ağı: DSL
- Pasif Optik Ağlar
- Kablo Erişim Ağları
- Denizaltı Kabloları
- Veri Merkezi Ağları
- Kapsülleme Çözme
- Güvenilir Aktarım
- Tıkanıklık Denetimi
- Trafik Çözümleme
- Gecikme Bütçesi
- Son Söz
Kayıt elinde ve hangi segmentin ne zaman kaybolduğunu görüyorsun. Tek bir sayı hâlâ eksik: ilk bayt sandığından geç düşüyor.
Bu gecikmenin nerede biriktiğini tahmin etmek yerine ölçebilirsin. Peki o süre tam olarak hangi kalemlerden toplanıyor?
Fatura hangi kalemlerden çıkıyor?
Ölçünün adı ilk bayta kadar geçen süre. Tuşa bastığın an başlar. Yanıtın ilk baytı geldiğinde durur. İçinde tek bir mekanizma yoktur; yolculuğun her durağı bu sayıya bir şey yazar.
Sayma birimi gidiş-dönüş süresidir. Küçük bir paket sunucuya gidip geri dönene kadar ne kadar geçiyorsa, kalemlerin hepsi o birimin katları olarak yazılır.
Tek bir nesnenin yanıt süresi de üç parçadan oluşuyor. Bağlantıyı kurmak bir gidiş-dönüş, isteği gönderip ilk baytları geri almak bir gidiş-dönüş, dosyanın akması ise ayrı bir süre. İlk bayt bu formülün ikinci turunun sonunda düşüyor. Üçüncü parça ondan sonra başlıyor. Bu yüzden ilk bayt ile sayfanın tamamlanması ayrı iki ölçüdür ve biri iyileşirken öteki bozulabilir.
Somut bir yol kuralım ve sayıları oraya oturtalım. Tek yön uzunluğu 2.000 km olsun. Yayılım hızını 200.000 km/sn alalım. Bölme işlemi tek yön için 10 ms veriyor. Gidiş-dönüş 20 ms eder.
Şimdi turları sayalım. Adı adrese çevirmek bir tur ister; kök sunucudan yetkili sunucuya inen zincirin bedeli tam burada faturaya yazılıyor. Bağlantıyı kurmak ikinci turdur ve o tur bittiğinde henüz tek bir uygulama baytı yola çıkmamıştır. üç el sıkışmanın RTT bedeli bu kalemin ta kendisidir. Kilidi kurmak üçüncü turdur. İsteği gönderip ilk baytları geri almak dördüncüdür.
Dört tur, 20 ms’lik birimle 80 ms yapıyor. Buna bir de sunucu düşünme süresi ekleniyor; isteği alıp yanıtı hazırlamak için 25 ms koyalım.
| kalem | süre | bütçedeki payı |
|---|---|---|
| ad çözme | 20 ms | %19 |
| TCP el sıkışması | 20 ms | %19 |
| TLS anlaşması | 20 ms | %19 |
| istek turu | 20 ms | %19 |
| sunucunun kendi işi | 25 ms | %24 |
| ilk bayta kadar toplam | 105 ms | %100 |
Dağılım asıl dersi veriyor. Dört kurulum turu gecikme bütçesinin %76’sını yiyor. Sunucunun payı %24’te kalıyor. Tek başına ad çözme kalemi %19 tutuyor. Sunucu kodunu iki katına hızlandırmak, tek bir turu silmekten daha az kazandırır.
Bu turların hangisi silinebilir?
Sabit sanılan kalem aslında en oynak olanı. Ad çözme kalemi soğukken var, sıcakken yok. Bir ad sunucusu öğrendiği eşlemeyi önbelleğine alır ve sonraki sorguyu doğrudan yanıtlar. Girdi, yaşam süresi dolunca silinir. Aynı siteye ikinci girişte o 20 ms çoğu zaman ortadan kalkar.
Bağlantı kalemi de her nesne için yeniden ödenmiyor. Her nesneye ayrı bağlantı kurmak nesne başına iki gidiş-dönüş ve her bağlantı için ayrı bir işletim sistemi yükü demek. Tarayıcılar bu yüzden paralel bağlantı açıyor. Kalıcı bağlantı ise aynı sayfadaki nesnelerin toplam maliyetini tek bir tura indiriyor.
Kurulumun sırası bedeli açıklıyor. Önce TCP bağlantısı kuruluyor. Sonra karşı tarafın kimliği doğrulanıyor. En sonda oturum anahtarlarını türeten ana sır taşınıyor. Üçü aynı anda yapılamıyor ve her biri öncekinin bitmesini bekliyor; bütçenin en büyük sabit kalemi tam olarak bu sıralılıktan çıkıyor.
Bir adım daha var: QUIC güvenilirliği, tıkanıklık denetimini, kimlik doğrulamayı ve şifreleme durumunu tek el sıkışmada kuruyor. Ardışık iki kurulum turu tek tura iniyor ve bütçeden bir 20 ms siliniyor. Önceki oturumdan saklanan bilet ise el sıkışma gecikmesini sıfıra indiriyor; ilk istek verisi el sıkışmanın ilk paketiyle birlikte yola çıkıyor.
Aynı yolu iki uçtan hesaplamak bütçenin ne kadar oynadığını gösteriyor. Kilit iki tur sürdüğünde toplam 125 ms’e çıkıyor. Ad önbellekteyse ve bilet elindeyse aynı yolculuk 45 ms’e iniyor. Arada tam 80 ms var. Yol aynı yol, mesafe aynı mesafe. Değişen tek şey kaç kez gidip geldiğin.
Milisaniyeyi kim yazıyor?
Bir durakta biriken gecikmeyi dört bileşene ayırmıştık; bu bütçede o dördünün ağırlıkları birbirine hiç benzemiyor.
İşleme kalemi görünmez. Başlığı okumak, bit hatasına bakmak ve çıkış hattını seçmek bugünün donanımında mikrosaniyenin altında kalıyor.
İletim kalemi de şaşırtacak kadar küçük. 1.500 baytlık bir paket 100 Mbit/s hatta 120 µs sürüyor. Aynı paket 1 Gbit/s hatta 12 µs sürüyor. İkisi de 20 ms’lik turun yanında yuvarlama hatası kadar kalıyor.
Geriye iki kalem kalıyor. Yayılım pazarlığa kapalıdır: mesafeyi hıza bölersin, sonuç neyse odur. Sinyalin ışık hızında gittiğini de sanma. Bir ölçüm koaksiyel kabloda yayılım hızını 209.214 km/sn veriyor; aynı kablonun teorik üst sınırı 299.337 km/sn.
Kuyruk ise bütçenin tek gerçekten değişken kalemi. Çıkış hattında beklemek yönlendiricinin o anki yüküne bağlıdır ve o yük saniye saniye oynar. Yayılım her ölçümde aynı sayıyı verir; kuyruk vermez. Bu yüzden tek bir koşu sana bir sayı vermez, bir örnek verir: aynı adresi arka arkaya ölçtüğünde farklı süreler görürsün ve aradaki fark bu kalemden gelir.
Kalemler tek bir durakta da bitmiyor. Aynı dört bileşen yol üstündeki her kutuda yeniden birikiyor, dolayısıyla iki uç arasındaki cihaz sayısı arttıkça toplam da büyüyor. Bir atlama eklemek bir kablonun boyunu uzatmakla aynı kapıya çıkmıyor; eklenen şey mesafe değil, bir kuyruk ile bir iletim daha.
İlk bayt düştükten sonra hesap el değiştiriyor. Aktarım süresini artık turlar belirlemiyor, yol üzerindeki darboğaz hattı belirliyor. Tıkanıklık penceresinin tavanını çizen bant genişliği-gecikme çarpımı bu bütçeden çıkıyor: 100 Mbit/s’lik darboğazı 20 ms’lik turla çarpınca 2.000.000 bit, yani 250.000 bayt. İlan edilen kayan pencere bu sayının altında kalırsa gönderen boruyu hiç dolduramaz.
Süreyi kendin nasıl ölçersin?
Traceroute yol üzerindeki her yönlendiriciye kadar olan gecikmeyi ölçer. Ölçtüğü şey uçtan uca süre değil, o ara noktaya kadar geçen süredir.
Yöntemi tek bir alana yaslanıyor. Paket süzme kurallarını yazarken ayırdığın iki ICMP mesajı burada yöntemin kendisi oluyor. İlk set TTL=1 ile gider, ikinci set TTL=2 ile. Sıradaki yönlendirici datagramı atar ve kaynağa tür 11 kod 0 zaman aşımı mesajı döner. Her atlama için üç yoklama paketi gönderilir. Yolculuk hedefe varınca durur: kapalı bir porta düşen segmente tür 3 kod 3 cevabı gelir.
Çıktı bir merdivene benziyor.
$ traceroute -n 203.0.113.7 # Windows: tracert -d 203.0.113.7
1 192.0.2.1 1 ms 1 ms 1 ms
2 198.51.100.9 6 ms 6 ms 6 ms
3 * * *
4 198.51.100.42 14 ms 14 ms 14 ms
5 203.0.113.7 21 ms 21 ms 20 msMerdivenin asıl işi satırların farkını okumaktır. İkinci satır 6 ms, dördüncü satır 14 ms gösteriyor; aradaki 8 ms o iki nokta arasına giren hattın payıdır. Son satırdaki 21 ms ise bütçeye 20 ms diye yazdığımız turun ölçülmüş hâlidir.
Üçüncü satırdaki yıldızlar yolun koptuğu anlamına gelmiyor. Ya o yoklama kayboldu ya da yönlendirici yanıt vermemeyi seçti. Paket yoluna devam etti; kanıtı dördüncü satırın dolu gelmesi.
Ters yönde şaşırtan bir durum daha var. İleri bir atlamanın süresi bir öncekinden küçük çıkabilir. Her satır ayrı bir paketin ayrı bir yolculuğudur; merdiven kümülatif bir sayaç değildir.
Aynı mesajları yakalama aracında da görebilirsin. ip.ttl süzgeci gelen paketin kaç atlama harcadığını gösterir. icmp.type ve icmp.code süzgeçleri traceroute’un ürettiklerini ayıklar. Aynı yakalamada bütçeyi doğrudan da okuyabilirsin: isteği taşıyan çerçevenin zaman damgasıyla yanıtın ilk baytını getiren çerçevenin zaman damgası arasındaki fark, ilk bayta kadar geçen sürenin ta kendisidir.

En kaba ölçüm hâlâ ping. ICMP üzerinden bir echo isteği gider, karşı taraf cevabını döner, arada geçen zaman hesaplanıp ekrana yazılır. Windows tarafında pathping aynı yolu daha uzun örneklemeyle ölçer.
Faturayı kalem kalem görmek istiyorsan tek satır yetiyor.
curl -o /dev/null -s \
-w 'ad: %{time_namelookup} tcp: %{time_connect} tls: %{time_appconnect} ilk bayt: %{time_starttransfer}\n' \
https://example.comSon sütun ilk bayta kadar geçen süredir ve örneğimizde 0,105 saniye yazar. Aradaki farklar kalemleri veriyor. Ad ile TCP arasındaki fark kurulumun ilk turu, TLS ile ilk bayt arasındaki fark ise isteğin turu artı sunucunun düşünme süresidir.
Özet
Peki, ne öğrendik?
- İlk bayta kadar geçen süre bir toplamdır. Yolculuğun her durağı ona bir kalem yazar ve sayma birimi tek bir gidiş-dönüştür.
- Ağırlık kurulumdadır. 2.000 km’lik bir yolda dört tur 80 ms, sunucu 25 ms tutar ve 105 ms’lik bütçenin %76’sı turlara gider.
- Turlar silinebilir. Önbellek ad çözmeyi, kalıcı bağlantı ile tek el sıkışma kurulumu, saklanan bilet ise el sıkışma gecikmesini düşürür.
- Mikrosaniye ile milisaniye karışmaz. İşleme ve iletim mikrosaniye mertebesinde kalır, faturayı yayılım ile kuyruk yazar.
- traceroute merdiveni kümülatif değildir. Her satır ayrı bir paketin ölçümüdür, yıldız da kopukluk değil yanıtsızlık demektir.
Yolculuk bitti. Tuşa bastığın andan ilk baytın düştüğü ana kadar her durağın faturaya ne yazdığını artık sayıyla biliyorsun. Geriye tek bir soru kalıyor: bunca durak, bunca zarf ve bunca tur neden tam olarak böyle kurulmuş?
63. bölüme devam et: Son Söz