Ana içeriğe geç

Bölüm 62:Gecikme Bütçesi

7 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

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.

kalemsürebütçedeki payı
ad çözme20 ms%19
TCP el sıkışması20 ms%19
TLS anlaşması20 ms%19
istek turu20 ms%19
sunucunun kendi işi25 ms%24
ilk bayta kadar toplam105 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 ms

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

Bir yakalama aracının arayüzünde ICMP paketlerinin listesi: her satır tek bir paket, sütunlarda zaman damgası, kaynak, hedef ve protokol. traceroute ile ping’in ürettiği mesajlar kayıtta böyle görünüyor.

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

Son 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