Ana içeriğe geç

Bölüm 46: Adres Çevirisi

12 dakikalık okumaGüncelleme:

Ağlar'a “Sen”i Katmak kitabının bir bölümü: adres çubuğuna yazdığın tek bir isteğin peşinden bakırla fiberin fiziğine inip karşı taraftan geri dönen uzun bir teknik yolculuk.

Kısım 7: Ağlar Arasında (Bölüm 45-51)

Tüm bölümler
  1. Giriş
  2. Adres Çubuğundan İsteğe
  3. Paket Anahtarlamalı Yol
  4. İsimden Adrese
  5. DNS Kayıtları
  6. Önbellek, Tazelik ve Güven
  7. Port Numarası ve Soket
  8. Bağlantısız Taşıma: UDP
  9. Üç Adımlı El Sıkışma
  10. Simetrik Şifreleme
  11. Açık Anahtarlı Kriptografi
  12. TLS El Sıkışması
  13. Sertifika Zinciri
  14. HTTP Mesajının Anatomisi
  15. Durum, Çerez ve Oturum
  16. HTTP/2'den HTTP/3'e
  17. İçerik Dağıtım Ağları
  18. Diğer Uygulama Protokolleri
  19. Katmanlı Mimari
  20. Hizmet ve Protokol
  21. Encapsulation ve Başlıklar
  22. Paket Yakalama ve Çözümleme
  23. Ağ Interface Kartı
  24. Fiziksel Adresleme
  25. Hata Sezme ve CRC
  26. Adres Çözümleme: ARP
  27. Ortam Erişimi: CSMA/CD
  28. Switch'ler
  29. Ağ Topolojileri
  30. Sanal Yerel Ağlar
  31. Kablosuz Erişim: 802.11
  32. Radyo Kanalı ve Kapasite
  33. Kablosuz Ağ Güvenliği
  34. Hücresel Ağlar
  35. Spektrum ve Kuşaklar
  36. Hareketlilik ve Aktarma
  37. Adres Kiralama: DHCP
  38. Adresin Anatomisi
  39. Adres Tükenmesi ve IPv6
  40. Router Mimarisi
  41. Kuyruk Yönetimi
  42. Cihaz Yapılandırma
  43. Routing Protokolleri
  44. Kontrol Düzlemi ve SDN
  45. Ağ İzleme ve Yönetimi
  46. Alanlar Arası Routing
  47. Adres Çevirisi
  48. Ara Kutular
  49. Tünelleme ve IPsec
  50. Firewall'lar
  51. Ağ Saldırıları
  52. Operatör ve Metro Ağları
  53. Bitten Sinyale
  54. Sembol Hızı ve Kanal Kapasitesi
  55. Multiplexing Teknikleri
  56. İletim Ortamları
  57. Bakır Kablo Sonlandırma
  58. Fiber Sonlandırma
  59. Fiber Optik İletim
  60. Bakır Erişim Ağı: DSL
  61. DSL'de Hız ve Mesafe
  62. Pasif Optik Ağlar
  63. Kablo Erişim Ağları
  64. Kablo Modem ve CMTS
  65. Denizaltı Kabloları
  66. Veri Merkezi Ağları
  67. Encapsulation Çözme
  68. Güvenilir Aktarım
  69. Tıkanıklık Denetimi
  70. Trafik Çözümleme
  71. Gecikme Bütçesi
  72. Soket Programlama
  73. Eşten Eşe ve Protokol Tasarımı
  74. Uyarlanır Video Akışı
  75. Gerçek Zamanlı Ses ve Görüntü
  76. Kablosuz Sensör Ağlarının Mimarisi
  77. Sensör Ağlarında Ortam Erişimi
  78. Sensör Ağlarında Yönlendirme ve IP
  79. Zaman Eşitleme ve Konum Bulma
  80. Sensör Ağı Uygulamaları
  81. Mobil Kablosuz Sensör Ağları
  82. Son Söz

Paket dışarı çıktı ve yolunu buldu. Ama üstündeki adres artık seninki değil.

Sınırdaki geçit kaynak alanını silip yerine kendi adresini yazdı. O adres değiştiği için cevap da geçide dönecek. Peki geçit dönen cevabı senin makinene nasıl ulaştırıyor?

Aynı adres neden milyonlarca ağda birden var?

Kendi makinenin adresine bakarsan büyük ihtimalle 192.168 ile başlıyor. Aynı adres şu anda başka ağlarda da duruyor, hem de milyonlarcasında. Bu bir kaza değil. 36. bölümde gördüğümüz gibi RFC 1918 üç bloğu yerel ağlara ayırdı ve bu üç blok internette yönlendirilmiyor.

BlokUçlarAdres sayısı
10.0.0.0/810.0.0.0 – 10.255.255.25516.777.216
172.16.0.0/12172.16.0.0 – 172.31.255.2551.048.576
192.168.0.0/16192.168.0.0 – 192.168.255.25565.536

Üçünün toplamı 17.891.328 adres eder. Hangisinin seçileceğine ağın boyu karar veriyor; kurumsal ağların çoğu en büyük bloktan çalışıyor.

Böyle bir adresi hedef gösteren paket omurgada yol bulamıyor. Otonom sistemlerin birbirine hangi önekleri ilan ettiğini 45. bölümde gördün; özel bloklar o ilanların hiçbirinde geçmiyor. Taşıyıcı router onu düşürüyor. Bu yüzden özel adresleme tek başına bir çözüm değil; ikinci parça çeviridir.

Geçit paketin üstünde neyi değiştiriyor?

Ev kutusunun dört işini sayarken varsayılan geçidin dışarı çıkan paketleri neden çevirdiğini açmadan bırakmıştım. Cevabın adı NAT (Network Address Translation, Ağ Adres Çevirisi).

Geçidin iki interface’i iki ayrı dünyaya ait. İçeri bakan yüz özel bloktan bir adres taşıyor, dışarı bakan yüz genel bloktan. Çeviri tam bu iki yüzün arasında oluyor.

İşin kendisi basit: geçit, giden paketin kaynak adresini ve kaynak portunu siliyor, yerine kendi dış adresini ve kendi seçtiği yeni bir portu yazıyor. Seçeneksiz bir IPv4 başlığı 20 bayt tutuyor. Silinen kaynak adres onun içinde 4 baytlık bir pencere; kaynak portu taşıma başlığında 2 baytlık bir alan.

Değiştirdiği çifti bir NAT tablosuna yazmasa dönüş paketini kime vereceğini bilemezdi. Tablonun iki sütunu var: WAN tarafı ve LAN tarafı. Bir satır bir flow’un kimliği.

ProtokolWAN tarafıLAN tarafı
TCP198.51.100.83:60117192.168.42.137:52310
TCP198.51.100.83:60118192.168.42.104:52310
UDP198.51.100.83:60119192.168.42.137:51820

Gelen yönde işlem simetrik olarak yürüyor. Uzaktaki sunucu cevabı 198.51.100.83:60117 hedefine gönderiyor. Geçit tabloya bakıyor, hedef alanını 192.168.42.137:52310 yapıyor ve paketi içeri veriyor. O sunucu senin özel adresini hiç görmedi.

Dört alanı yan yana koyunca hangi ikisinin oynadığı tek bakışta çıkıyor:

yön ve noktakaynak IPkaynak porthedef IPhedef port
giden · geçitten önce192.168.42.13752310203.0.113.9443
giden · geçitten sonra198.51.100.8360117203.0.113.9443
dönen · geçitten önce203.0.113.9443198.51.100.8360117
dönen · geçitten sonra203.0.113.9443192.168.42.13752310

Dört alanın geçitten önce ve sonra nasıl göründüğünü izleyelim:

Dört alandan ikisi değişiyor
geçitten öncekaynak 192.168.42.137:52310hedef 203.0.113.9:443geçitgeçitten sonrakaynak 198.51.100.83:60117hedef 203.0.113.9:443protokolWAN tarafıLAN tarafıTCP198.51.100.83:60117192.168.42.137:52310dönen pakette aynı satır ters okunuyor: hedef çifti LAN tarafına çevriliyoriki uç aynı bağlantıya farklı dörtlülerle bakıyor, ve ikisi de haklı
Giden paket geçide varıyor. Kaynak alanında evindeki özel adres, hedef alanında uzaktaki sunucu. Bu paket olduğu gibi internete çıkarsa cevabı dönecek bir yer yok: 192.168.42.137 milyonlarca ağda birden var.
  1. Giden paket geçide varıyor. Kaynak alanında evindeki özel adres, hedef alanında uzaktaki sunucu. Bu paket olduğu gibi internete çıkarsa cevabı dönecek bir yer yok: 192.168.42.137 milyonlarca ağda birden var.
  2. Geçit yalnızca kaynak çiftini değiştiriyor. Kaynak adresin yerine kendi genel adresini, kaynak portun yerine kendi seçtiği yeni bir numarayı yazıyor. Hedef çiftine hiç dokunmuyor; iki kartta da aynı duruyor.
  3. Değişikliği bir satıra yazıyor. Bu satır olmadan dönüş paketini kime vereceğini bilemezdi. Satırı yazan şey içeriden çıkan bu ilk paket; dışarıdan gelen ve tabloda karşılığı olmayan bir istek hiçbir yere gidemiyor.
  4. Dönen paket aynı satırı ters okuyor. Cevap 198.51.100.83:60117 hedefine geliyor. Geçit satırı bulup hedef çiftini LAN tarafına çeviriyor. Giden yönde kaynak, dönen yönde hedef değişiyor; tek satır iki yönü birden tarif ediyor.

Kalın yazılan alanlar geçidin dokunduğu yerler. Giden yönde kaynak çifti, dönen yönde hedef çifti değişiyor; öteki iki alana hiç dokunulmuyor. Bu simetri tesadüf değil, tablonun kendisi: bir satır iki yönü birden tarif ediyor.

Aynı tabloya iki uçtan bakınca ilginç bir şey oluyor. Senin makinen bağlantıyı 192.168.42.137:52310 ↔ 203.0.113.9:443 diye biliyor; sunucu ise 203.0.113.9:443 ↔ 198.51.100.83:60117 diye. İki uç aynı bağlantıya farklı adlar veriyor ve ikisi de haklı. Ortadaki kutu bir çevirmen gibi çalışıyor ve iki taraf da çevirmenin varlığından habersiz.

Alanlara dokunmanın bir bedeli var: geçit hem IP başlığının checksum’ını hem de transport layer’ın sağlamasını yeniden hesaplamak zorunda. 7. bölümdeki sahte başlık yüzünden TCP ve UDP sağlaması IP adreslerini de kapsıyordu; adres değişince o da değişmek zorunda. Satırlar protokolü de taşıyor, çünkü ICMP’nin portu yok; orada eşleme kimlik alanı üzerinden kuruluyor.

Bir yana: Cisco terminolojisinde aynı makinenin iki adı var. İçerideki özel adres iç yerel adres, geçidin dışarıya bakan yüzündeki genel adres ise iç global adres diye geçiyor. Hangi taraftan bakıldığına göre ad değişiyor.

6. bölümde bir bağlantının kimliğini soket four-tuple’ı taşıyordu: kaynak adres, kaynak portu, hedef adres, hedef portu. NAT bunun ilk iki bileşenini yolun ortasında değiştiriyor. İki uç aynı bağlantıya bakıp farklı four-tuple’lar görüyor.

Bu düzenlemenin iki kazancı var. Sağlayıcıdan abone başına tek adres almak yetiyor, cihaz başına bir adres değil. İkincisi, iç adres planı dışarıdan bağımsız kalıyor: sağlayıcı değişse de içerideki adresler olduğu gibi duruyor.

Tek adresin arkasına kaç bağlantı sığıyor?

Dışarı çıkan bütün datagramların kaynak adresi aynı; ayıran şey kaynak portları. Çeviriyi mümkün kılan da bu. Sınır buradan geliyor: port alanı 16 bit, sıfır kullanılmadığı için geriye 65.535 numara kalıyor. Pratikte tek bir dış adresin arkasında yaklaşık 60.000 eşzamanlı bağlantı taşınıyor; TCP ile UDP’nin havuzları ayrı. Darboğaz adres değil, port havuzu.

Beşinci bölümün apartmanı burada bir kat yukarı taşınıyor. Sokak adresi geçidin dış adresine, daire numarası geçidin attığı dış porta, dairede oturan da içerideki makineye karşılık geliyor. Tek fark: apartmanda daire numaralarını kimse yeniden dağıtmaz, geçitte ise numarayı her flow için geçidin kendisi seçiyor.

Numarayı geçidin seçmesi bir sorunu kendiliğinden eliyor. Yukarıdaki tablonun ilk iki satırında iki ayrı cihaz aynı kaynak portu seçmiş, ama çakışma yok.

TürEşleme
Statik NATBir iç adres hep aynı dış adrese; kalıcı satır
Dinamik NATHavuzdan geçici eşleme; iş bitince bırakılıyor
Port çevirisiÇok sayıda iç adres tek dış adrese; ayrım portta

Ev ve mobil ağlarda gördüğün çeviri neredeyse her zaman üçüncüsü, yani port çevirisi (PAT, öteki adıyla NAPT). RFC 3022 iki türü birlikte tanımlıyor: yalnızca adrese dokunan temel NAT ve porta da dokunan NAPT. Temel NAT’ta bir özel adres bir dış adrese bağlanıyor; porta dokunmadan çoğa bir eşleme kurulamıyor. Ölçek sınırı da buradan çıkıyor: çok geniş özel ağlarda tek bir port havuzu ve tek bir tablo darboğaza dönüşüyor.

Tabloya satırı kim yazıyor?

Satırı yazan şey içeriden çıkan ilk pakettir. Dışarıdan gelen ve tabloda karşılığı olmayan bir istek hiçbir yere gidemiyor. Geçit onu kime vereceğini bilmiyor. NAT arkasındaki bir sunucuya dışarıdan bağlanma problemi budur. Uygulama tasarımcısı bunu hesaba katmak zorunda, özellikle iki ucun doğrudan buluşmaya çalıştığı eşler arası uygulamalarda.

Tablodaki satırlar ölümlü oluyor. Kullanılmayan eşleme zaman aşımıyla siliniyor ve RFC 4787 bu süreye alt sınır koyuyor: bir UDP eşleme zamanlayıcısı iki dakikadan önce dolamıyor, önerilen varsayılan ise beş dakika ve üstü. Eşlemenin silinmemesi için uygulamanın daha kısa aralıklarla canlı tutma paketi göndermesi gerekiyor. TCP için RFC 5382 çok daha cömert: kurulmuş bir bağlantının eşlemesi iki saat dört dakikadan önce silinmemeli. Sahadaki kutuların çoğu bu kurala uymuyor; uzun süre sessiz kalan bir bağlantının koptuğunu gördüysen sebebi bu. Linux tabanlı bir geçitte tablonun kendisine conntrack -L ile bakabilirsin; çıktıdaki her satır bir eşlemedir.

Tabloya satır yazmanın elle yapılan bir yolu da var. Port yönlendirme (port forwarding), dış adresin belirli bir portuna gelen paketi sabit bir iç adrese ve porta gönderen kalıcı bir satır kuruyor. Ev kamerası böyle açılıyor. Birçok ev kutusu bu satırı uygulamanın kendisine de açtırıyor (UPnP, daha yeni adıyla PCP); oyun konsollarının “NAT türü açık” demesinin arkasında çoğu zaman bu var.

Bütün geçitler aynı satırı aynı şekilde yazmıyor

Şimdiye kadar “bir satır açılıyor” dedim. Gerçekte o satırın ne kadar açık olduğu geçitten geçide değişiyor ve bu fark, NAT’ın arkasında çalışan uygulamaların kaderini belirliyor.

İki ayrı soru var. Birincisi eşleme: aynı iç çiftten farklı hedeflere giden paketler aynı dış portu mu kullanıyor? İkincisi süzme: açılan dış porta kim paket gönderebiliyor?

davranışaynı dış portiçeri kimi kabul ediyor
tam koniher hedefe aynıherkes
adres kısıtlı koniher hedefe aynıyalnızca daha önce paket yolladığın IP
port kısıtlı koniher hedefe aynıyalnızca daha önce paket yolladığın IP ve port
simetrikher hedefe ayrıyalnızca o hedef

İlk üçünde eşleme uç-bağımsız: dışarıdan bakan port, hedef kim olursa olsun aynı kalıyor. RFC 4787’nin ilk şartı da bu ve sebebi birazdan görülecek. Dördüncüsünde ise her yeni hedef yeni bir dış port doğuruyor; dışarıdan bakan biri senin portunu tahmin edemiyor.

Simetrik NAT bir güvenlik kazancı gibi duruyor ama asıl etkisi başka: iki ucun doğrudan buluşmasını imkânsıza yakın kılıyor.

İki NAT arkasındaki iki makine birbirini nasıl buluyor?

Görüntülü görüşme, çevrimiçi oyun ve dosya paylaşımı aynı problemi çözmek zorunda: iki tarafın da tablosu boş, ikisi de yalnızca içeriden çıkan paketle satır açabiliyor ve kimse ilk paketi alamıyor. Kilitli bir kapının iki yanında iki kişi.

Çözüm üç parçalı ve üçünün de adı var.

STUN en basiti. İnternette duran bir sunucuya paket yolluyorsun, o da “seni 198.51.100.83:60117 olarak görüyorum” diye cevap veriyor. Kendi dış adresini ve portunu böyle öğreniyorsun: kendi geçidin sana söylemiyor, dışarıdaki bir tanık söylüyor.

Delik açma (hole punching) asıl numara. İki taraf da öğrendiği dış çifti bir aracı sunucu üzerinden karşıya bildiriyor, sonra ikisi birden karşının dış çiftine paket yolluyor. Her paket kendi geçidinde bir satır açıyor. İlk paketler karşı tarafın geçidinde henüz satır olmadığı için düşüyor; ama satırlar açıldıktan sonra ikinci tur geçiyor. İki kapı da içeriden açılmış oluyor.

Numaranın çalışması için eşlemenin uç-bağımsız olması şart: aracıya bildirdiğin portun, karşı tarafa giderken de aynı kalması gerekiyor. Simetrik NAT işi burada bozuyor: bildirdiğin port yalnızca aracıyla konuşurken geçerli.

TURN ise pes etmenin adı. Delik açılamıyorsa trafik ortadaki bir röle sunucusundan geçiriliyor. Çalışıyor, ama artık uçtan uca değil: gecikme artıyor ve bant genişliğini biri ödüyor.

Üçünü sırayla deneyip en iyisini seçen çerçevenin (framework) adı ICE. Tarayıcındaki görüntülü görüşme başlarken saniyenin bir kısmını buna harcıyor: adayları topluyor, sırayla sınıyor, çalışan ilk yolu seçiyor. Eşler arası uygulamaların niçin bu kadar uğraştırdığının sebebi bu üç basamaklı merdiven. Görüşmenin bu adımdan sonrası 74. bölümde, eşler arası dosya dağıtımının NAT’la derdi 72. bölümde.

Adres yükün içine yazılmışsa ne oluyor?

Buraya kadar geçit yalnızca başlıklara dokundu. Bazı protokoller bu varsayımı bozuyor: adresi yükün içine yazıyorlar.

Klasik örnek FTP. İstemci veri bağlantısı için sunucuya kendi adresini ve portunu bir komut satırıyla bildiriyor ve o satır IP başlığında değil, TCP yükünün içinde yazılı bir metin. Geçit başlıkları çevirip yükü olduğu gibi geçirirse, sunucu içerideki özel adrese bağlanmaya çalışıyor ve hiçbir yere varamıyor.

Çare, geçidin yükü de okuyup içindeki adresi düzeltmesi. Bunu yapan parçanın adı uygulama katmanı geçidi (application layer gateway, ALG) ve tanımı gereği application layer’a çıkan bir network layer cihazı. 19. bölümde katmanlamanın faturalarından biri bilgi saklamaktı; ALG o faturanın en çıplak kalemidir.

Bedeli de ağır. ALG protokolü bilmek zorunda, yani her yeni protokol için yeni kod gerekiyor. Yük şifreliyse hiçbir şey yapamıyor. Ve yanlış çalıştığında ortaya, hiçbir ucun açıklayamadığı arızalar çıkıyor: SIP telefonlarının tek yönlü ses sorunu çoğu zaman kutudaki bir ALG’nin eseridir. Modern protokoller bu yüzden adresi yükün içine hiç yazmıyor; STUN ile dış adresini öğrenip onu yazmayı tercih ediyorlar.

Bir yan etki daha var ve adı saç tokası (hairpinning). İçerideki bir sunucuyu, dış adresini yazarak yine içeriden çağırdığında paket geçide çıkıp aynı interface’ten geri dönmek zorunda. Kutuların bir kısmı bunu yapmıyor: aynı sunucu dışarıdan erişilebilirken içeriden erişilemiyor. Ev ağında “telefon şebekeden çalışıyor, Wi-Fi’da çalışmıyor” şikâyetinin sık rastlanan sebeplerinden biri budur.

DerinleşmeNAT bir güvenlik önlemi mi, yoksa öyle sanılan bir yan etki mi?

İçerideki cihazların dışarıdan doğrudan adreslenememesi çeviriye sık sık bir güvenlik avantajı diye yazılır. Ama bu tasarlanmış bir politika değil, tablonun boş olmasının yan etkisi. Politika yazılan ve uygulanan bir kuraldır; buradaki koruma yalnızca satır bulunmamasıdır. Tabloya satır yazan her mekanizma o korumayı delip geçer: elle açılan bir port yönlendirmesi, içeriden kurulan her bağlantı, kutunun kendiliğinden eşleme açan özellikleri. Gerçek politika kutunun kural tablosunda durur; sınırdaki listede ilk eşleşen satırın kazandığını 47. bölümde göreceğiz. Oradaki ret yazılmış bir karardır, buradaki kapalılık ise yalnızca bir boşluktur.

İkinci itiraz daha derin. Bir network layer cihazı transport layer’ın port alanına dokunuyor; router’ın network layer’ın üstüne çıkmaması beklenirdi. End-to-end argument’a ödetilen bedel de bu. Bağlantının kimliğine artık yalnızca uçlar karar vermiyor.

38. bölümdeki dört cevaptan yaygınlaşanlar erteleyenler oldu. Kökten çözen IPv6 yayıldığı ölçüde her cihaz yeniden dışarıdan adreslenebilir hâle geliyor ve çeviriden gelen erişilemezlik kendiliğinden kayboluyor. İçeriyi kapalı tutan bir şey kalıyorsa o çeviri değil, yazılmış bir kuraldır.

Çeviri ikinci kez yapılırsa ne oluyor?

Bu iş yalnızca evlerde olmuyor. Kurum ağları ve 4G/5G hücresel ağlar aynı mekanizmayı yoğun kullanıyor. Telefonunun mobil veriyle aldığı IPv4 adresi de büyük ihtimalle çevrilmiş bir adres.

Operatör aboneye genel adres vermeyi de bırakabiliyor. Bu düzenlemenin adı CGNAT (Carrier-Grade NAT), yani operatör düzeyi çeviri. RFC 6598 bunun için 100.64.0.0/10 bloğunu paylaşımlı adres alanı olarak ayırdı. Blokta 4.194.304 adres var ve bir operatör bununla dört milyondan fazla aboneyi genel adres harcamadan numaralayabiliyor. Blok klasik özel adres alanından ayrı tutuldu. Sebebi çakışma: abonenin evinde zaten özel adres kullanılıyor ve aynı blok iki katmanı birbirine karıştırırdı. Bu trafik sağlayıcı sınırlarının ötesine de iletilmiyor.

Sonuç iki kat çeviri. Ev geçidi 192.168.42.137:52310 çiftini 100.64.19.7:60117 yapıyor, operatörün cihazı da onu 198.51.100.83:41022 yapıyor. Paketin kaynağı hedefe varana kadar iki kez değişiyor. İki ayrı tabloda iki satır duruyor. Bedeli de belli: port yönlendirme çalışmıyor, kayıt tutmak zorlaşıyor ve bir abonenin yaptığı, dış dünyada aynı adresi paylaşan öteki abonelere yansıyor.

Bütün bunları kendi makinende yan yana koyabilirsin:

ip addr show                      # Windows'ta: ipconfig
curl -s https://api.ipify.org

Birincisi içerideki özel adresi basıyor, ikincisi dışarıdan görünen adresi. İki farklı adres, tek makine. Bir adım daha at: router’ın WAN durum sayfasındaki adres 100.64 ile başlıyorsa ya da ikinci komutun söylediğinden farklıysa, arada operatörün çevirisi de var demektir.

Özet

  • Özel adresleme tek başına yetmiyor: üç blok yalnızca yerel ağda anlamlı, dışarı çıkışı ancak çeviri ile birlikte mümkün oluyor.
  • Çeviri iki alana dokunuyor: geçit kaynak adresi ile kaynak portu değiştiriyor ve dönüş yolunu tek bir tablo satırında saklıyor.
  • Sınırı koyan şey port havuzu: 16 bitlik alan tek dış adresin arkasına yaklaşık 60.000 eşzamanlı bağlantı sığdırıyor.
  • Tabloyu içeriden çıkan paket yazıyor: karşılığı olmayan istek içeri giremiyor, kalıcı satırı ise port yönlendirme elle açıyor.
  • Her geçit satırı aynı genişlikte açmıyor: koni davranışlarında dış port her hedefe aynı kalır, simetrik NAT’ta ise hedef başına değişir ve delik açma çalışmaz.
  • İki uç birbirini üç adımda buluyor: STUN dış adresi öğretir, delik açma iki kapıyı içeriden açar, TURN başarısızlıkta trafiği röleye alır; sırayı ICE yürütür.
  • Operatör aynı işi ikinci kez yapabiliyor: CGNAT abonenin adresini de paylaştırıyor ve kaynak adres yolda iki kez değişiyor.

Geçit paketin üstündeki iki alanı senden habersiz değiştirdi ve bunu yaparken sıradan bir router’ın işini aştı. Adres çevrildi; peki yol üstünde paketimize dokunan başka kim var?

47. bölüme devam et: Ara Kutular