Bir web sayfası sana nasıl ulaşır? İnternette paketlerin yolculuğu
Bir bağlantıya dokunduğun an, sayfa yüzlerce küçük pakete bölünür; paketler farklı yollardan, bazen sırasız gelir, kaybolanlar yeniden gönderilir. DNS, IP adresi, yönlendiriciler, TCP ve gecikmeyi kurcalanabilir bir ayıklama tesisiyle anlatıyoruz.
Yazan: Kuazara Bilim EkibiYayın: Güncelleme: 8 dk okuma
Bu yazıda · 9 bölüm
Telefonunda bir bağlantıya dokunuyorsun ve bir saniye bile geçmeden sayfa açılıyor. Oysa o sayfa belki yüzlerce, belki binlerce kilometre ötedeki bir bilgisayarda duruyor. Arada tek bir kablo yok; onlarca ağ, deniz altından geçen fiber kablolar ve yolu üzerindeki her kavşakta karar veren cihazlar var. Üstelik sayfa yola tek parça çıkmıyor: Küçük paketlere bölünüyor, paketler birbirinden habersiz yolculuk ediyor ve senin cihazında yeniden birleşiyor. Bu yazıda bu yolculuğu adım adım izliyoruz ve ortasında kendin kurcalayabileceğin bir ayıklama tesisi var.
Önce adres: DNS bir rehber gibi çalışır
Tarayıcına example.com gibi bir ad yazarsın; ama ağdaki cihazlar adlarla değil sayılarla, yani IP adresleriyle konuşur. Adı adrese çeviren sisteme DNS (Domain Name System, alan adı sistemi) denir. Telefon rehberine benzer: Ada bakarsın, numarayı bulursun.
Cihazın önce bir çözümleyiciye sorar; bu genellikle internet sağlayıcının ya da seçtiğin bir hizmetin sunucusudur. Çözümleyici cevabı bilmiyorsa sırayla kök sunuculara, .com gibi uzantının sunucularına ve en sonunda o alan adından sorumlu sunucuya sorar. Gelen cevap bir süre önbellekte tutulur; böylece aynı siteye ikinci kez girdiğinde bu soru-cevap çoğu zaman hiç yaşanmaz. DNS sorgusu genellikle milisaniyeler sürer, ama yavaş bir çözümleyici sayfanın açılmasını gözle görülür biçimde geciktirebilir.
Mesaj paketlere bölünür
Adres bulununca asıl iş başlar. Bir web sayfası tek bir büyük blok olarak gönderilmez; küçük parçalara bölünür. Ev ve okul ağlarında çok kullanılan Ethernet’te bir paket en çok 1500 bayt veri taşıyabilir. IP ve TCP başlıkları yaklaşık 40 bayt yer kapladığından her pakete 1460 bayt kadar asıl veri kalır. Yani 1 megabaytlık bir sayfa yaklaşık 700 pakete bölünür.
Neden bölünür? Çünkü ağ, bir yolun tamamını tek bir konuşmaya ayırmaz. Eski telefon santrallerinde iki kişi konuşurken aralarındaki hat onlara ayrılırdı (devre anahtarlama). İnternet ise paket anahtarlama kullanır: Aynı kablodan aynı anda milyonlarca kişinin paketleri sırayla geçer, kimse yolu tek başına tutmaz. Bir paket kaybolursa bütün mesajı değil yalnızca o paketi yeniden göndermek yeter.
Bu fikir 1960’larda iki yerde, birbirinden bağımsız olarak geliştirildi: ABD’de RAND şirketinde Paul Baran, hasar görse bile çalışmaya devam edecek dağıtık bir haberleşme ağı tasarladı; İngiltere’de Ulusal Fizik Laboratuvarı’nda Donald Davies aynı fikre ulaştı ve parçalara “paket” adını verdi. 1969’da çalışmaya başlayan ARPANET bu fikri ilk kez büyük ölçekte denedi.
IP adresi: her paketin üstündeki etiket
Her paketin başında bir başlık vardır; bir zarfın üstündeki yazılara benzer. En önemli iki bilgi gönderenin ve alıcının IP adresidir. Bugün en yaygın sürüm olan IPv4’te adres 32 bitlik bir sayıdır ve 203.0.113.7 gibi noktalarla ayrılmış dört sayıyla yazılır. Bu biçimde yaklaşık 4,3 milyar farklı adres olabilir; bu sayı bugünkü cihazlara yetmediği için 128 bitlik adresler kullanan IPv6’ya geçiş sürüyor.
Başlıkta bir de yaşam süresi (TTL) alanı bulunur. Paketin geçtiği her yönlendirici bu sayıyı bir azaltır; sayı sıfıra inerse paket atılır. Böylece yanlış kurulmuş bir ağda sonsuza dek dönüp duran paketler oluşmaz.
Bir not: Bugün sitelerin çoğu HTTPS ile açılır. Bu durumda paketin içindeki veri şifrelidir; yol üzerindeki cihazlar sayfanın içeriğini okuyamaz. Ama paketi doğru yere götürebilmeleri için adres etiketini okumaları gerekir; o yüzden başlık açıktır.
Yönlendiriciler: her kavşakta tek bir karar
Paketin yolculuğunda karşılaştığı her kavşakta bir yönlendirici (router) durur. Evindeki modem de küçük bir yönlendiricidir; internet sağlayıcılarının merkezlerinde ise saniyede milyonlarca paket işleyen büyük yönlendiriciler çalışır.
Yönlendiricinin işi sanıldığından basittir: Paketin hedef adresine bakar, kendi yönlendirme tablosunda o adrese en uygun çıkışı bulur ve paketi o kapıdan bir sonraki cihaza iletir. Paketin bütün yolunu bilmez; yalnızca “bu adres için şu komşuya ver” bilgisini bilir. Yol, her kavşakta verilen bu küçük kararların toplamıdır.
Tablolar sabit değildir. Yönlendiriciler komşularıyla sürekli bilgi alışverişi yapar; internetin büyük ağları arasında bu işi BGP adlı bir yönlendirme protokolü görür. Bir kablo koptuğunda ya da bir yol tıkandığında bu bilgi yayılır ve trafik başka yollara kayar. Yeni yolun öğrenilmesi bir süre alır; o arada bozuk yola giden paketler kaybolabilir.
Aşağıdaki figürde bu dünyayı küçük bir ayıklama tesisi olarak kurduk. Soldaki masada mesaj numaralı kartuşlara, yani paketlere bölünmüş olarak bekler. İlk yönlendiricide döner bir makas kolu her paketi üst ya da alt hatta yollar. Hatlardaki istasyonlarda paketler başka trafik yüzünden sıra bekleyebilir. Sağdaki alıcı her paketi numaralı yuvasına koyar. Gönder’e bas, bir istasyona dokunarak hattını kes; mesaj boyunu (KB ya da paket sayısı), kayıp oranını ve hat gecikmesini kendin yaz ve sayıların nasıl değiştiğine bak.
Paketler sırasız varır
Figürde mesajı birkaç kez gönderdiğinde varış sırasının her seferinde biraz farklı olduğunu göreceksin: 5 numaralı paket 4’ten önce gelebilir. Bunun iki nedeni var. Birincisi, paketler farklı yollardan gidebilir ve yolların uzunluğu farklıdır. İkincisi, her yönlendiricide bir kuyruk vardır; o anda başka paketler de geçiyorsa paket bekler. Bekleme süresi andan ana değişir.
Gerçek ağlarda bir bağlantının paketleri çoğu zaman aynı yoldan gider; çünkü yönlendiriciler aynı bağlantıya ait paketleri bilerek aynı yola koymaya çalışır. Yol, bir arıza ya da yük değişimi olduğunda değişir ve sırasız varış o zaman sık görülür. Figürde etkiyi kolay görebilmen için ilk yönlendirici paketleri tek tek iki hatta dağıtıyor.
Alıcı bu karışıklıkla nasıl baş eder? Burada devreye TCP (Transmission Control Protocol, iletim denetim protokolü) girer. TCP gönderilen veriye sıra numaraları koyar. Gerçekte bu numaralar paketleri değil baytları sayar, ama fikir aynıdır: Alıcı gelen parçaları numaralarına göre bir tampon bellekte dizer ve uygulamaya, yani tarayıcına, yalnızca sırası tamamlanmış veriyi verir. Figürdeki alıcı masasında her yuvanın önüne bir numara kazınmış olması bu yüzdendir.
Kaybolan paket: TCP onu yeniden gönderir
İnternet paketlerin ulaşacağını garanti etmez; ağ “elinden geleni yapar”. Paketler kaybolabilir. En sık neden tıkanıklıktır: Bir yönlendiricinin kuyruğu dolduğunda yeni gelen paketleri atmak zorunda kalır. Kopan bir kablo, arızalı bir cihaz ya da bozulmuş bir sinyal de paket kaybettirir.
TCP bu sorunu onaylarla çözer. Alıcı aldığı veri için gönderene bir onay (ACK) yollar. Gönderen her paketin bir kopyasını onay gelene kadar saklar. Onay belirli bir süre içinde gelmezse, yani zaman aşımı dolarsa, paketi yeniden gönderir. Bu süre sabit değildir; TCP gidiş-dönüş süresini sürekli ölçer ve zaman aşımını buna göre ayarlar. Ayrıca alıcı aynı eksik parçayı art arda birkaç kez sorduğunda, gönderen zaman aşımını beklemeden de yeniden gönderebilir (hızlı yeniden iletim).
Figürde bir hattı kesip mesajı gönder. Kesik hatta giden paketler istasyonda takılır ve kutuya düşer. Kısa bir süre sonra ilk yönlendirici kesintiyi öğrenir ve trafiği öbür hatta verir. Kaybolan paketlerin onayı hiç gelmediği için gönderen onları yeniden yollar; yeniden gönderilen kartuşları mor etiketlerinden tanırsın. Toplam süre uzar, ama mesaj eksiksiz birleşir. Bu, internetin en önemli özelliklerinden biridir: Parçalar kaybolsa bile bütün sonunda doğru gelir.
Her uygulama bu güvenceyi istemez. Görüntülü görüşmede ya da çevrim içi oyunda geç gelen bir ses parçasını beklemek, onu atlamaktan daha kötüdür. Bu tür uygulamalar çoğu zaman yeniden gönderme yapmayan UDP’yi kullanır. Yeni web protokolü HTTP/3 ise UDP üzerinde çalışan ve güvenilirliği kendisi sağlayan QUIC’i kullanır.
Gecikme nereden gelir?
Bir paketin yolculuğu dört tür gecikmenin toplamıdır:
- Yayılma gecikmesi: Sinyalin kabloda yol alması zaman ister. Işık fiber kabloda saniyede yaklaşık 200 000 kilometre gider; bu, her 1000 kilometre için yaklaşık 5 milisaniye demektir. Kablolar da kuş uçuşu gitmez, bu yüzden gerçek yol daha uzundur.
- İletim gecikmesi: Paketin bitlerini kabloya “dökmek” de zaman alır. 1500 baytlık bir paket, saniyede 100 megabitlik bir hatta kabaca 0,12 milisaniyede yola çıkar.
- Kuyruk gecikmesi: Yönlendiricide sıra beklemek. Ağ ne kadar yoğunsa o kadar uzar ve en çok değişen gecikme budur.
- İşleme gecikmesi: Yönlendiricinin başlığı okuyup kararı vermesi. Modern cihazlarda genellikle çok kısadır.
Yayılma gecikmesi fizik yasasıdır; daha hızlı bir bağlantı satın alarak kısaltılamaz. Dünya çevresinde yaklaşık 36 000 kilometre yükseklikteki yer sabit uydular üzerinden yapılan bir bağlantıda, sinyalin uyduya gidip geri inmesi tek yönde bile yaklaşık çeyrek saniye sürer. Bu yüzden kıtalar arasındaki verinin büyük bölümü uydu yerine deniz altından geçen fiber kablolarla taşınır.
Figürdeki varsayılan süreler ise gerçek bir bağlantıdan ölçülmedi; yalnızca bu dört etkiyi görmeyi kolaylaştıran örnek değerlerdir. Hat gecikmesini kendin değiştirebilirsin: Örneğin yer sabit uydu bağlantısını denemek için 250 ms yaz ve mesajı bir de yüzde 10 kayıpla gönder. Kayıp ve yeniden gönderme olduğunda toplam süre belirgin biçimde uzar, çünkü gönderen önce zaman aşımının dolmasını beklemek zorundadır; gecikme büyüdükçe zaman aşımı da büyür ve her kayıp daha pahalıya patlar.
Kendin dene: paketin rotasını izle
Bilgisayarında paketlerin geçtiği yönlendiricileri görebilirsin. Windows’ta Komut İstemi’ni aç ve şunu yaz:
tracert example.com
macOS ve Linux’ta komut traceroute example.com olur. Program yaşam süresi (TTL) alanını kullanır: Önce TTL’si 1 olan paketler yollar; ilk yönlendirici sayıyı sıfıra indirip paketi atar ve geri bir hata mesajı gönderir. Sonra TTL’yi 2 yapar, sonra 3 ve böyle devam eder. Her satır bir yönlendiriciyi ve oraya gidip gelme süresini gösterir. Bazı satırlarda yıldız (*) görürsen korkma: Birçok yönlendirici bu tür mesajlara cevap vermeyecek biçimde ayarlanmıştır. Okul ya da iş ağları bu komutları engelleyebilir; o zaman evde dene. ping example.com komutu da yalnızca gidiş-dönüş süresini ölçer.
İki farklı siteyi dene: Biri yakın bir ülkede, biri okyanus ötesinde barındırılan iki sitenin süreleri arasındaki farkı yayılma gecikmesiyle açıklayabilir misin?
Özet
- Alan adı önce DNS ile bir IP adresine çevrilir; cevap önbellekte tutulur.
- Veri yaklaşık 1,5 kilobaytlık paketlere bölünür; her paketin başlığında gönderenin ve alıcının IP adresi yazar.
- Yönlendiriciler her pakete yalnızca bir sonraki adımı seçer; yol, bu kararların toplamıdır ve arıza olunca değişebilir.
- Paketler farklı yollar ve kuyruklar yüzünden sırasız varabilir; TCP sıra numaralarıyla onları yeniden dizer.
- Kaybolan paketin onayı gelmez; zaman aşımı dolunca gönderen paketi yeniden gönderir.
- Gecikme; yayılma, iletim, kuyruk ve işleme sürelerinin toplamıdır; yayılma gecikmesini ışığın hızı sınırlar.
Sık sorulanlar
5 soruİnternette veri neden paketlere bölünür?
IP adresi nedir?
Paketler neden sırasız gelir?
Kaybolan bir paket ne olur?
DNS ne işe yarar?
Kaynaklar
8 kaynak- 1.RFC 791 — Internet Protocol (1981) (yeni sekmede açılır)rfc-editor.org
- 2.RFC 9293 — Transmission Control Protocol (TCP) (2022) (yeni sekmede açılır)rfc-editor.org
- 3.RFC 6298 — Computing TCP's Retransmission Timer (2011) (yeni sekmede açılır)rfc-editor.org
- 4.RFC 1034 — Domain Names: Concepts and Facilities (1987) (yeni sekmede açılır)rfc-editor.org
- 5.RFC 8200 — Internet Protocol, Version 6 (IPv6) Specification (2017) (yeni sekmede açılır)rfc-editor.org
- 6.Cerf, V. G., Kahn, R. E. (1974) — A Protocol for Packet Network Intercommunication, IEEE Transactions on Communications, 22(5)
- 7.Baran, P. (1964) — On Distributed Communications, RAND Corporation (yeni sekmede açılır)rand.org
- 8.Kurose, J. F., Ross, K. W. — Computer Networking: A Top-Down Approach, Pearson
- #internet
- #paket anahtarlama
- #IP adresi
- #yönlendirici
- #TCP
- #DNS
- #gecikme