Bölüm 44:Ara Kutular
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
Bir önceki durakta paketin kaynak adresi geçitte değişti. O kutu paketi yalnızca iletmedi, başlığındaki bir alana dokundu. Yönlendiricinin tanımında böyle bir iş yok.
Yolun geri kalanı da benzer kutularla dolu ve çoğunun adı burada hiç geçmedi. Peki bir cihaz ne zaman yönlendirici olmaktan çıkıyor?
Bir kutu ne zaman yönlendirici olmaktan çıkar?
Resmi tanım RFC 3234 numaralı belgede duruyor. Tanıma göre ara kutu, kaynak ile hedef arasındaki veri yolunda bulunan ve bir IP yönlendiricisinin olağan işlevleri dışında iş gören her aracı kutudur. Tanımın biçimine dikkat et: ortada bir cihaz listesi yok, bir dışlama kuralı var.
Çizgi de katman numarasıyla çekiliyor. Bir yönlendiriciden en fazla üçüncü katmana kadar işlem yapması bekleniyor; dördüncü katmandaki port numarasına uzanan bir kutu o çizginin dışına çıkmış oluyor. Adres çeviren kutuyu zaten tanıyorsun: port çevirisinin end-to-end argument’a ödettiği bedeli saymıştık.
Katman eşlemesi eski bir tablodan geliyor: tekrarlayıcı fiziksel katmanda, anahtar ikinci katmanda, yönlendirici üçüncü katmanda durur. Adlandırma da tam burada karışıyor: IP dünyasında yönlendiricinin kendisine de geçit deniyor, oysa aynı ad ulaşımdan uygulamaya kadar dört katmanı birden kaplayan kutular için de kullanılıyor. Bir kutunun adı hangi katmanda çalıştığını söylemez; söyleyen şey baktığı alandır.
Ara kutular beş sınıfta toplanıyor ve her sınıf başka bir yerde duruyor.
| sınıf | eline aldığı şey | durduğu yer |
|---|---|---|
| adres çevirisi | başlıktaki adres ve port | ev, hücresel ağ, kurum ağı |
| güvenlik duvarı ve saldırı tespiti | geçme izni | şirket, kurum, servis sağlayıcı, erişim ağı |
| yük dengeleyici | isteğin kendisi | kurum, servis sağlayıcı, veri merkezi, mobil ağ |
| önbellek | yanıtın kopyası | servis sağlayıcı, mobil ağ, içerik dağıtım ağı |
| uygulamaya özgü kutu | tek bir protokolün verisi | konuştuğu uygulamanın yanı |
Dağılımın kendisi de bir şey söylüyor. Güvenlik duvarı ile saldırı tespiti tablodaki dört yerin hepsinde birden tekrarlanıyor. Aynı işlev dört kez satın alınıyor. O kutu hem erişim ağlarında hem çekirdek ağda duran özelleşmiş bir ara kutu olarak sınıflandırılıyor.
Beş sınıfın tamamı tek bir soyutlamaya iniyor: eşleştir ve uygula. Güvenlik duvarı IP adresleriyle taşıma portlarını eşleştirir, eylemi de izin vermek ya da reddetmektir. Yönlendirici, anahtar ve adres çevirici aynı kalıbı kullanır. Değişen tek şey hangi alana bakıldığıdır.
Bir istek kaç bağlantıya bölünüyor?
Vekil sunucu iki rolü aynı anda oynuyordu: isteği yapan istemciye karşı sunucu, menşe sunucuya karşı istemci. Ters vekil aynı ikiliği sunucunun önünde kurar ve istemcinin bağlantı kurduğu, el sıkıştığı taraf odur. İstemci tek istek yaptığını sanır; yolda iki ayrı istek-yanıt çifti oluşur.
Uygulama geçidi bu ikiliği bir adım ileri taşır. Yetkili kullanıcı için hedefe kendi bağlantısını kurar ve veriyi iki bağlantı arasında aktarır. Baktığı yer de IP, TCP ve UDP alanlarıyla sınırlı kalmaz; uygulama verisinin kendisini de okur. Başlık okumak ile içerik okumak arasındaki fark, kutunun hangi katmana kadar indiğini belirler.
Klasik vekilin bir bedeli var. İstemci yazılımının kutuya nasıl ulaşacağını bilmesi gerekir, örneğin tarayıcıya vekilin adresi elle girilir. Ters vekilde bu bedel ortadan kalkar. İstemci hiçbir ayar yapmaz, çünkü kutu zaten adın gösterdiği adreste oturur.
Asıl kırılma TLS tarafında. TLS üç şey sağlar: şifreli bir bağlantı, veri bütünlüğü ve uç nokta kimlik doğrulaması. Üçüncüsü burada can alıcı hâle geliyor, çünkü doğrulanan şey yol değil uç nokta oluyor. El sıkışmada iki taraf sertifikalarını ve özel anahtarlarını kullanarak birbirini doğrular ve paylaşılan bir sır üretir. Özel anahtarı elinde tutan kutu, o oturumun uç noktasıdır. Bu işe TLS sonlandırma deniyor. Sertifika zinciri bir adı doğruluyordu; TLS’i sonlandıran ters vekil o adın sahibi olarak konuşur.
Vakayı kuralım. İstemci 198.51.100.25 adresinden çıkıyor. Ters vekil 203.0.113.10 adresinde 443 portunu dinliyor, arkasında 192.0.2.11, 192.0.2.12 ve 192.0.2.13 duruyor. Tek bir HTTPS isteği için yolda 2 ayrı TCP bağlantısı ve 2 ayrı TLS oturumu kurulur. İstemcinin doğruladığı sertifika 203.0.113.10 adresindeki özel anahtara aittir. Arka uçtaki makinenin adını istemci hiç görmez. Kutu arkaya 80 portundan şifresiz bile konuşabilir.
Tek isteğin yolda kaç bağlantıya bölündüğünü görelim:
- İstemci tek bir adrese bağlanıyor. 198.51.100.25 adresindeki tarayıcı 203.0.113.10 adresinin 443 portunu çalıyor. Elinde yalnızca bu adres var; arkada kaç makine durduğunu bilmiyor.
- TLS ters vekilde sonlanıyor. El sıkışmanın karşı ucu bu kutu. Doğrulanan sertifika 203.0.113.10 adresindeki özel anahtara ait olduğu için oturumun uç noktası da bu kutu oluyor.
- Havuzdan bir arka uç seçiliyor. Karar IP başlığındaki hedef adresten çıkmıyor; kutu isteğin kendisine bakıyor. Üç makine de aynı tek adresin arkasında durduğu için seçim dışarıdan görünmüyor.
- İkinci bağlantı kuruluyor. Kutu bu kez istemci gibi davranıyor ve 192.0.2.12 adresine kendi bağlantısını açıyor. Yolda artık iki ayrı TCP bağlantısı ve iki ayrı TLS oturumu var.
- Yanıt zincirin tersinden dönüyor. Arka uç yanıtı kutuya, kutu da istemciye veriyor. İstemci tek istek yaptığını sanıyor; arka uçtaki makinenin adını hiç görmüyor.
Arka uç istemcinin kim olduğunu nereden bilecek?
İki bağlantıya bölmenin doğal bir sonucu var ve pratikte ilk gün karşına çıkıyor. Arka uçtaki sunucu, bağlantıyı kuran taraf olarak ters vekili görüyor. Kayıtlarında tek bir adres birikiyor, coğrafi kısıtlar çalışmıyor, adres başına hız sınırı bütün trafiği tek bir kovaya topluyor.
Çözüm üç ayrı yerde duruyor ve hangisini seçtiğin, vekilin hangi katmana kadar indiğine bağlı:
| yöntem | nereye yazılıyor | koşulu |
|---|---|---|
X-Forwarded-For | HTTP başlığına | vekil HTTP’yi okuyabiliyor olmalı |
Forwarded (RFC 7239) | HTTP başlığına, standart biçimde | aynı; adresle birlikte protokol ve ana bilgisayarı da taşır |
| PROXY protokolü | TCP bağlantısının ilk baytlarına | vekil HTTP’yi hiç okumasa da çalışır |
İlk ikisi bir liste tutuyor: her vekil kendi gördüğü adresi sona ekliyor, böylece zincir baştan sona okunabiliyor. Üçüncüsü ise bambaşka bir yerde çalışıyor — bağlantı kurulur kurulmaz, herhangi bir uygulama verisinden önce, tek bir satır hâlinde gerçek adres ve port yazılıyor. Şifreli trafiği hiç açmadan ileten bir dördüncü katman dengeleyici ancak bunu kullanabiliyor.
Bir güvenlik tuzağı da tam burada. Bu başlıkları istemci de yazabilir; hiçbiri doğrulanmıyor. Arka uç listenin tamamına güvenirse, saldırgan başka bir adresten geliyormuş gibi görünebilir. Kural şu: yalnızca kendi vekilinin eklediği son değere güven. Listede ondan öncesi istemciden gelmiş olabilir ve kanıtlanamaz.
Yükü dağıtan kutu neyi gizliyor?
Yük dengeleyicinin işi üç adımdır. Dışarıdan gelen istemci isteklerini alır, işi içeride dağıtır, sonucu dış istemciye döndürür. Dördüncü ve asıl etkisi bu üçünün yanında bir parantez gibi durur: veri merkezinin iç yapısını istemciden gizler.
Kararın nasıl verildiğinin ayrı bir adı var. Uygulama katmanı yönlendirmesi deniyor, çünkü karar IP başlığındaki hedef adresten çıkmıyor; isteğin kendisine bakılıyor. Havuzda üç arka uç varsa ve dağıtım sıra ile yapılıyorsa, 900 istekten her arka uca 300 tanesi düşer.
Sıra ile dağıtmak en basit kural ve tek başına yeterli değil. Kutunun elindeki seçenekler bir merdiven oluşturuyor:
| yöntem | kararı neye dayandırıyor | ne zaman doğru seçim |
|---|---|---|
| dönüşümlü | sıradaki arka uç | istekler birbirine benzer, arka uçlar özdeş |
| ağırlıklı dönüşümlü | her arka uca verilen pay | arka uçlar farklı güçte |
| en az bağlantı | o an en az açık bağlantısı olan | istek süreleri çok değişken |
| en kısa yanıt süresi | ölçülen gecikme | arka uçların yükü öngörülemez |
| özet tabanlı | istemci adresinin ya da bir çerezin özeti | aynı istemci hep aynı arka uca gitmeli |
Son satırın bir adı var: oturum yapışkanlığı. Arka uç kullanıcının oturumunu kendi belleğinde tutuyorsa, aynı kullanıcının her isteği aynı makineye düşmek zorunda — düşmezse kullanıcı sürekli oturumdan atılır. Durumun sunucudan neden çıkarıldığını biliyorsun; yapışkanlık, o dersi öğrenmemiş bir mimarinin ödediği bedeldir.
Özet almanın da bir tuzağı var. En akla yakın yöntem özet mod N — N arka uç sayısı. Ama havuza bir arka uç eklediğinde N değişiyor ve neredeyse bütün anahtarlar başka bir makineye kayıyor. Tek bir sunucu eklemek bütün oturumları dağıtıyor, bütün önbellekleri soğutuyor.
Çözümün adı tutarlı özetleme. Arka uçları ve anahtarları aynı dairesel uzaya yerleştiriyorsun; bir anahtar, saat yönünde kendisinden sonraki ilk arka uca ait oluyor. Havuza yeni bir arka uç girdiğinde yalnızca onun hemen solundaki dilim el değiştiriyor, geri kalan her şey yerinde kalıyor. Taşınan anahtar oranı 1/N’e iniyor. Aynı fikir içerik dağıtım ağlarında ve dağıtık önbelleklerde de aynen kullanılıyor.
Bir de kimin havuzda kalacağı sorusu var. Dengeleyici arka uçları düzenli aralıklarla yokluyor; adı sağlık denetimi. Etkin denetimde kutu her birkaç saniyede bir özel bir istek atıp cevabı ölçüyor, edilgen denetimde ise gerçek trafikteki hataları sayıyor. Belirlenen eşiği aşan arka uç havuzdan çıkarılıyor ve düzelince geri alınıyor. Bu mekanizma olmadan dengeleyici, ölmüş bir sunucuya sadakatle istek yollamayı sürdürür.
Bu kutunun var oluş nedeni bir zorluk listesinde geçiyor: yükü yönetmek ve dengelemek, işlem, ağ ve veri darboğazlarından kaçınmak. Yük dengeleyici bir ölçek aracıdır. Güvenlik önlemi olarak tasarlanmamıştır; iç yapıyı gizlemesi ondan çıkan bir yan etkidir.
Adın yanıltmasına da izin verme. Ağ geçidi yedekliliği protokollerinde dengeleme tek bir sanal IP adresi ile birden çok sanal MAC adresi üzerinden, ARP cevaplarıyla ve ikinci katmanda yapılır. Yol üstündeki yük dengeleyici ise isteğin kendisine bakıyor. Aynı ad iki ayrı katmanda karşına çıkıyor.
İçerik dağıtım ağının kenar sunucusunu tanıyorsun ve önbellek isabetinin yolu nasıl kısalttığını da. Sunucuları erişim ağlarının derinine iten o yerleştirme felsefesi, RFC 3234 tanımına göre tam anlamıyla bir ara kutu üretir. Sunucu veri yolunda durur ve yönlendiricinin işi olmayan bir iş yapar.
Bu kutuların bir bölümü ağın kendi zayıflığını telafi etmek için orada. IP en iyi çaba modelinde çalışır ve hiçbir garanti vermez; veri merkezleri ile içerik dağıtım ağları istemci ağlarının yakınına yerleştiği için aynı hizmet birden çok noktadan verilebilir hâle gelir. Eksik garantiyi kapatan şey protokolün kendisi değil, yolun üstüne konan kutulardır.
Kasa yazılıma dönünce ne değişti?
Tarihsel model sadeydi. Her ağ katmanı işlevi için ayrı bir kutu satın alınırdı: güvenlik duvarı bir kutu, yük dengeleyici başka bir kutu, adres çevirici üçüncü bir kutu. İşlev ile kasa aynı şeydi. Başlangıç noktası tescilli ve kapalı donanım çözümleriydi.
Yönlendiricinin yekpare kasasında veri düzlemi ile kontrol düzlemi aynı satıcı yazılımında birlikte duruyordu. Yol üstündeki kutular da aynı kalıptaydı. Sonra yön değişti.
Bugün tescilli donanımdan uzaklaşılıyor ve açık bir arayüz gerçekleyen sade donanıma doğru gidiliyor. Yerel eylemler eşleştir-uygula kalıbıyla programlanabilir hâle geliyor, yenilik de donanımdan yazılıma kayıyor. Ağ işlev sanallaştırmanın tanımı buradan çıkıyor: sade donanım üstündeki ağ, hesaplama ve depolama kaynakları üzerinde programlanabilir hizmetler. Yük dengeleyici artık bir kasa değil, bir sunucuda çalışan bir süreçtir.
Şimdi geri çekilip resmin tamamına bak. İnternet mimarisinin bilinen adı kum saati modelidir: fiziksel, bağlantı, taşıma ve uygulama katmanlarında çok sayıda protokol varken ağ katmanında yalnızca bir tane vardır. O ince bel IP’dir ve internete bağlı milyarlarca cihazın her birinde gerçeklenmek zorundadır. Belin çevresine sonradan dört kalem birikti: adres çevirisi, ağ işlev sanallaştırma, güvenlik duvarları ve önbellekleme.
Mimarinin üç köşe taşı sayılıyor: yalın bağlanabilirlik, ince bel olarak IP, ve zekânın ağın kenarında durması. Sonuncusunun adı end-to-end argument’tır. Beldeki dört kalemin dördü de onu aşındırıyor. İlk ikisine hiçbiri dokunmuyor.
Savın künyesi de belli. 1981’de Saltzer, Reed ve Clark adlandırdı: bir işlev ancak iletişimin uçlarındaki uygulamanın bilgisiyle tam ve doğru gerçeklenebilir. RFC 1958 aynı cümleyi mimarinin merkezine koyuyor — zekâ ağın içinde saklı değildir, uçlardadır. Ama metnin çoğu zaman atlanan bir parantezi var: iletişim sisteminin sağladığı eksik bir sürüm, bir başarım iyileştirmesi olarak bazen yararlı olabilir. Ara kutuların meşruiyeti tam olarak oradan çıkıyor. Sav ağın içindeki işlevi yasaklamıyor; ona yalnızca son söz hakkı vermiyor. Bir mimari ilke de ihlal edildiği için aşınmaz, ihlali ucuzladığı her yerde tekrarlandığı için aşınır.
Özet
Peki, ne öğrendik?
- Ara kutu bir cihaz adı taşımaz: tanımı, veri yolunda durup yönlendiricinin olağan işleri dışında iş görmektir; ölçüt kasanın markası değil, yapılan işin katmanıdır.
- Beş sınıf tek kalıba iner: adres çevirisi, güvenlik duvarı, yük dengeleyici, önbellek ve uygulamaya özgü kutu, hepsi eşleştir-uygula kalıbıyla çalışır.
- Ters vekil oturumu keser: özel anahtar onda olduğu için tarayıcının doğruladığı ad arkadaki makinenin değil, kutunun kendi adıdır.
- Yük dengeleyici bir ölçek aracıdır: isteği alır, işi içeride dağıtır, sonucu döndürür ve bunu yaparken veri merkezinin iç yapısını görünmez kılar.
- Aşınan tek bir köşe taşıdır: belin çevresindeki dört kalem zekânın kenarda durmasını, yani end-to-end argument’ı yıpratır; yalın bağlanabilirliğe ve ince bele dokunmaz.
Beş sınıfın hepsi paketin bir yerine bakıyor ve her biri baktığı yere göre karar veriyor. Peki görmelerini hiç istemiyorsan ne yaparsın?
45. bölüme devam et: Tünelleme ve IPsec