---
title: 'NAT ve PAT'
source: 'https://academia.sh/tr/kurslar/ag-modelleri/nat-ve-pat'
course: 'Ağ Modelleri ve Protokoller'
language: tr
updated: '2026-08-17T18:07:09+00:00'
license: 'CC BY-SA 4.0'
---

# NAT ve PAT

Adres dönüştürme türleri, çevrim tablosunun beş bileşenli anahtarı, kapasite hesabı ve uçtan uca bağlantının bozulması.

Örnek ağdaki tüm cihazlar artık adres sahibidir. Ancak bu adreslerin tümü
`192.168.10.0/24` bloğundandır ve o blok genel İnternet'te yönlendirilmez: kaynak adresi
`192.168.10.196` olan bir paket sağlayıcının yönlendiricisine ulaşsa bile, dönüş paketinin
geri getirilebileceği bir yol yoktur.

Kurumun elinde tek bir genel adres vardır: `203.0.113.10`. Bu dersin sorusu, 182 iç
adresin tek bir genel adres üzerinden dışarı nasıl çıkabildiğidir.

## Üç Dönüştürme Türü

**Adres dönüştürme (network address translation, NAT)**, bir paketin başlığındaki adresleri
geçiş sırasında değiştirmektir. Üç biçimi ayrılır.

| Tür | Eşleme | Kaç genel adres | Dışarıdan bağlantı |
|---|---|---|---|
| Statik NAT | Bire bir, sabit | İç düğüm sayısı kadar | Kurulabilir |
| Dinamik NAT | Bire bir, havuzdan | Eşzamanlı düğüm sayısı kadar | Kurulamaz |
| Bağlantı noktalı dönüştürme (PAT) | Çoktan bire | Tek adres yeter | Yalnız tanımlıysa |

**Statik NAT**, bir iç adresi bir genel adrese kalıcı olarak bağlar. Dışarıdan erişilmesi
gereken bir sunucu için kullanılır.

**Dinamik NAT**, bir genel adres havuzundan geçici eşleme kurar. Havuz tükendiğinde yeni
düğümler dışarı çıkamaz. Kurumun tek genel adresi olduğundan bu tür örnek ağa uygun
değildir.

**Bağlantı noktalı dönüştürme (port address translation, PAT)**, adresle birlikte kaynak
bağlantı noktası numarasını da değiştirerek çok sayıda iç düğümü tek bir genel adrese
sığdırır. Örnek ağın kullandığı yöntem budur. Yaygın adlandırmada "NAT" denildiğinde
çoğunlukla bu tür kastedilir.

## Çevrim Tablosu

Dönüştürmeyi yapan cihaz, hangi dönüş paketinin hangi iç düğüme ait olduğunu bilmek zorundadır.
Bunun için bir **çevrim tablosu** tutar. Tablonun anahtarı beş bileşenlidir: kaynak adresi,
kaynak bağlantı noktası, hedef adresi, hedef bağlantı noktası ve protokol.

```python
DIS_ADRES = "203.0.113.10"


class Pat:
    """Bağlantı noktası çevirisi yapan bir çevrim tablosu."""

    def __init__(self, dis_adres: str, ilk_bnk: int = 61000) -> None:
        self.dis_adres = dis_adres
        self.sonraki = ilk_bnk
        self.ileri: dict[tuple, tuple] = {}     # iç anahtar -> dış anahtar
        self.geri: dict[tuple, tuple] = {}      # dış anahtar -> iç anahtar

    def disari(self, ic_ip: str, ic_bnk: int,
               hedef_ip: str, hedef_bnk: int) -> tuple[str, int]:
        anahtar = (ic_ip, ic_bnk, hedef_ip, hedef_bnk)
        if anahtar not in self.ileri:
            self.sonraki += 1
            dis = (self.dis_adres, self.sonraki)
            self.ileri[anahtar] = dis
            self.geri[(dis[0], dis[1], hedef_ip, hedef_bnk)] = (ic_ip, ic_bnk)
        return self.ileri[anahtar]

    def iceri(self, dis_ip: str, dis_bnk: int,
              kaynak_ip: str, kaynak_bnk: int) -> tuple[str, int] | None:
        return self.geri.get((dis_ip, dis_bnk, kaynak_ip, kaynak_bnk))


pat = Pat(DIS_ADRES)
akislar = [
    ("192.168.10.196", 49152, "198.51.100.20", 443),
    ("192.168.10.197", 49152, "198.51.100.20", 443),
    ("192.168.10.196", 49153, "198.51.100.20", 443),
    ("192.168.10.60", 51000, "198.51.100.20", 80),
]

print(f"{'iç kaynak':22s} {'dış kaynak':22s} {'hedef'}")
for ic_ip, ic_bnk, h_ip, h_bnk in akislar:
    d_ip, d_bnk = pat.disari(ic_ip, ic_bnk, h_ip, h_bnk)
    print(f"{ic_ip + ':' + str(ic_bnk):22s} {d_ip + ':' + str(d_bnk):22s} "
          f"{h_ip + ':' + str(h_bnk)}")

print()
print("dönüş paketi 203.0.113.10:61001 <- 198.51.100.20:443 ->",
      pat.iceri("203.0.113.10", 61001, "198.51.100.20", 443))
print("dönüş paketi 203.0.113.10:61003 <- 198.51.100.20:443 ->",
      pat.iceri("203.0.113.10", 61003, "198.51.100.20", 443))
print("istenmemiş paket 203.0.113.10:61999 <- 198.51.100.20:443 ->",
      pat.iceri("203.0.113.10", 61999, "198.51.100.20", 443))
```

Çıktı:

```
iç kaynak              dış kaynak             hedef
192.168.10.196:49152   203.0.113.10:61001     198.51.100.20:443
192.168.10.197:49152   203.0.113.10:61002     198.51.100.20:443
192.168.10.196:49153   203.0.113.10:61003     198.51.100.20:443
192.168.10.60:51000    203.0.113.10:61004     198.51.100.20:80

dönüş paketi 203.0.113.10:61001 <- 198.51.100.20:443 -> ('192.168.10.196', 49152)
dönüş paketi 203.0.113.10:61003 <- 198.51.100.20:443 -> ('192.168.10.196', 49153)
istenmemiş paket 203.0.113.10:61999 <- 198.51.100.20:443 -> None
```

İkinci satır, dönüştürmenin neden gerekli olduğunu gösterir: iki farklı iç düğüm aynı
kaynak bağlantı noktası numarasını (49152) kullanmıştır. Numaralar değiştirilmeseydi dönüş
paketleri ayırt edilemezdi.

Son satır, dönüştürmenin en belirgin yan etkisidir: tabloda karşılığı olmayan bir paket
düşürülür. Dışarıdan gelen, içeriden başlatılmamış hiçbir bağlantı içeri geçemez.

## Değişen Alanlar

Bir paket dönüştürülürken yalnızca adres alanları değişmez. IP başlığındaki kaynak adresi ve
taşıma başlığındaki kaynak bağlantı noktası değiştiğine göre, bunları kapsayan sağlamalar da
yeniden hesaplanmalıdır.

| Alan | Giden pakette | Dönen pakette |
|---|---|---|
| IP kaynak adresi | İç adres → genel adres | Değişmez |
| IP hedef adresi | Değişmez | Genel adres → iç adres |
| Taşıma kaynak bağlantı noktası | İç numara → çevrilmiş numara | Değişmez |
| Taşıma hedef bağlantı noktası | Değişmez | Çevrilmiş numara → iç numara |
| IP başlık sağlaması | Yeniden hesaplanır | Yeniden hesaplanır |
| Taşıma sağlaması | Yeniden hesaplanır | Yeniden hesaplanır |

Taşıma sağlamasının da değişmesinin nedeni, TCP ve UDP sağlamalarının IP adreslerini içeren
bir sözde başlık üzerinden hesaplanmasıdır. Bu ayrıntı, adres dönüştürmenin katman ihlali
olduğunu somutlaştırır: ağ katmanında çalışan bir cihaz, taşıma katmanı başlığını
değiştirmek zorundadır.

Aynı nedenle, taşıma başlığını okuyamayan bir dönüştürücü çalışamaz. Uçtan uca şifrelenmiş
bir taşıma katmanı, dönüştürmeyi olanaksız kılar.

## Kapasite Sınırı

Tek bir genel adres üzerinden yapılabilecek eşzamanlı çevrim sayısı, kullanılabilir bağlantı
noktası numarasıyla sınırlıdır.

```python
kullanilabilir = 65535 - 1024 + 1
print("kullanılabilir bağlantı noktası:", kullanilabilir)
for n in (182, 1000, 4000):
    print(f"{n:5d} istemci -> istemci başına eşzamanlı akış: {kullanilabilir // n}")
```

```
kullanılabilir bağlantı noktası: 64512
  182 istemci -> istemci başına eşzamanlı akış: 354
 1000 istemci -> istemci başına eşzamanlı akış: 64
 4000 istemci -> istemci başına eşzamanlı akış: 16
```

Örnek ağın 182 düğümü için istemci başına 354 eşzamanlı akış düşer; bu bol bir paydır.
Ancak sayı düğüm sayısıyla ters orantılıdır ve bin düğümde 64'e iner. Sayfa başına onlarca
bağlantı açan uygulamalar bu sınırı zorlar.

Hesap kötümserdir: çevrim anahtarı hedefi de içerdiğinden, farklı hedeflere giden akışlar
aynı çevrilmiş numarayı paylaşabilir. Yine de sınırın varlığı gerçektir ve büyük ağlarda
birden çok genel adres kullanılmasının nedeni budur.

İkinci bir sınır bellektedir: her akış için bir tablo girdisi tutulur. Girdiler süreli
tutulur ve zaman aşımına uğrar — bu, dönüştürmenin en görünür yan etkilerinden birini
doğurur.

## Uçtan Uca Bağlantının Bozulması

TCP/IP Modeli dersinde tanıtılan uçtan uca ilkesi, ağın içine durum konmamasını söyler.
Adres dönüştürme bu ilkeyi doğrudan ihlal eder: çevrim tablosu, ağın ortasında tutulan bir
durumdur. Sonuçları sıralanabilir.

**Dışarıdan bağlantı kurulamaz.** İçeriden başlatılmamış bir akışın tabloda karşılığı
yoktur. İçerideki bir cihazın dışarıdan erişilebilir olması için elle bir kural yazılması
gerekir — **bağlantı noktası yönlendirme (port forwarding)**. Örnek ağdaki iç sunucu
`192.168.10.226` dışarıya açılacaksa, `203.0.113.10:443` adresine gelen trafiğin ona
iletileceği bir kural tanımlanır.

**Boşta kalan akışlar kopar.** Tablo girdileri zaman aşımıyla silindiğinde, uzun süre veri
akmayan bir bağlantının dönüş yolu kaybolur. İki uç bağlantının açık olduğunu sanır, ancak
paketler geçmez. Uygulamalar bunu düzenli **canlı tutma** paketleriyle önler; TCP dersinde
bu düzenek ayrıntılandırılacaktır.

**Eşler doğrudan buluşamaz.** İki uç da dönüştürmenin arkasındaysa, hiçbiri diğerine
bağlanamaz. Çözüm, her iki ucun da dışarıdaki ortak bir sunucuya bağlanıp kendi dış adres ve
bağlantı noktasını öğrenmesi, sonra eşzamanlı olarak birbirine paket göndermesidir. Bu
yöntem ancak dönüştürücünün eşleme davranışı öngörülebilirse çalışır; çalışmadığında trafik
bir aktarma sunucusu üzerinden taşınır ve gecikme artar.

**İç istemci kendi dış adresine ulaşamayabilir.** İçeriden `203.0.113.10:443` adresine
bağlanmaya çalışan bir cihazın paketi, dönüştürücüye kendi iç arayüzünden gelir ve geri
dönmesi gerekir. Bu davranış **firkete (hairpinning)** olarak adlandırılır ve her
gerçekleştirimde desteklenmez. Belirtisi tipiktir: bir hizmet dışarıdan çalışır, aynı ağın
içinden çalışmaz.

## Dönüştürme Bir Güvenlik Düzeneği Değildir

Dışarıdan bağlantı kurulamaması güvenlik gibi görünür, ancak dönüştürme bir güvenlik
düzeneği olarak tasarlanmamıştır ve öyle sayılmamalıdır.

Erişim engeli bir yan etkidir, bir politika değildir. İçeriden başlatılan her akış dışarıya
açılır; kötü amaçlı bir yazılım içeriden bağlantı kurarak engeli aşar. Ayrıca dönüştürme,
geçen trafiğin içeriğine bakmaz; izin verilen bir akış içinde ne taşındığını denetlemez.

Erişim politikası, açıkça yazılmış filtreleme kurallarıyla kurulur. Adres dönüştürme adres
kıtlığını çözer; erişim denetimi ayrı bir işin adıdır.

## Sağlayıcı Düzeyi Dönüştürme

Adres kıtlığı sağlayıcı düzeyinde de yaşandığında, dönüştürme bir kat daha uygulanır:
abonelere genel adres yerine `100.64.0.0/10` bloğundan adres verilir ve çıkış sağlayıcının
genel adresleri üzerinden yapılır. Buna **sağlayıcı düzeyi adres dönüştürme (carrier-grade
NAT)** denir.

İki kat dönüştürmenin altında bağlantı noktası yönlendirme abone tarafından
tanımlanamaz, eşler arası buluşma daha sık başarısız olur ve bir dış adresi çok sayıda abone
paylaştığı için adres tabanlı tanı anlamını yitirir.

IPv6, bu katmanların hiçbirine gerek bırakmaz: her uca genel adres verilebildiğinde çevrim
tablosu da gereksizleşir. Önceki derste anlatılan geçiş yöntemlerinin gerekçelerinden biri
budur.

## Özet

- Özel kullanım adresleri genel İnternet'te yönlendirilmez; dışarı çıkış adres
  dönüştürmeyle sağlanır.
- Statik dönüştürme bire bir ve kalıcı, dinamik dönüştürme havuzdan geçici, bağlantı
  noktalı dönüştürme çoktan biredir.
- Çevrim tablosunun anahtarı beş bileşenlidir; farklı iç düğümler aynı kaynak bağlantı
  noktasını kullansa bile dönüş paketleri ayırt edilir.
- Adres ve bağlantı noktası değiştiği için hem IP hem taşıma sağlaması yeniden hesaplanır;
  bu, dönüştürmenin katman ihlali olduğunun kanıtıdır.
- Tek genel adreste 64 512 bağlantı noktası vardır; 182 düğüm için düğüm başına 354, bin
  düğüm için 64 eşzamanlı akış düşer.
- Dönüştürme uçtan uca bağlantıyı bozar: dışarıdan bağlantı kurulamaz, boşta akışlar kopar,
  eşler doğrudan buluşamaz. Bir güvenlik düzeneği değildir.

## Sonraki Adım

Bu konu boyunca "bağlantı noktası" terimi tanımlanmadan kullanıldı: çevrim tablosunun
anahtarında, kiralama protokolünün 67 ve 68 numaralarında, hedef sunucunun 443'ünde. Bu
numaraların ne olduğu ve bir işletim sisteminin gelen bir segmenti hangi uygulamaya
vereceğine nasıl karar verdiği taşıma katmanının konusudur. Sonraki ders bağlantı
noktalarını, soket kavramını ve bir bağlantıyı benzersiz kılan dörtlüyü ele alacak.
