Ana içeriğe geç

Bölüm 44:Ara Kutular

9 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

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ıfeline aldığı şeydurduğu yer
adres çevirisibaşlıktaki adres ve portev, hücresel ağ, kurum ağı
güvenlik duvarı ve saldırı tespitigeçme iznişirket, kurum, servis sağlayıcı, erişim ağı
yük dengeleyiciisteğin kendisikurum, servis sağlayıcı, veri merkezi, mobil ağ
önbellekyanıtın kopyasıservis sağlayıcı, mobil ağ, içerik dağıtım ağı
uygulamaya özgü kututek bir protokolün verisikonuş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:

Tek bir isteğin arka arkaya eklenmiş iki oturumu
tek bir HTTPS isteğiarka uç havuzuistemci198.51.100.25ters vekil203.0.113.10TCP 443 dinliyor192.0.2.11192.0.2.12192.0.2.13TLS oturumu 1TLS oturumu 2TLS burada bitiyorhavuzdan biri seçildi
İ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.
  1. İ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.
  2. 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.
  3. 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.
  4. İ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.
  5. 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öntemnereye yazılıyorkoşulu
X-Forwarded-ForHTTP başlığınavekil HTTP’yi okuyabiliyor olmalı
Forwarded (RFC 7239)HTTP başlığına, standart biçimdeaynı; adresle birlikte protokol ve ana bilgisayarı da taşır
PROXY protokolüTCP bağlantısının ilk baytlarınavekil 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öntemkararı neye dayandırıyorne 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 payarka uçlar farklı güçte
en az bağlantıo an en az açık bağlantısı olanistek süreleri çok değişken
en kısa yanıt süresiölçülen gecikmearka uçların yükü öngörülemez
özet tabanlıistemci adresinin ya da bir çerezin özetiaynı 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