---
title: 'Bağlantı Noktaları ve Soketler'
source: 'https://academia.sh/tr/kurslar/ag-modelleri/baglanti-noktalari-ve-soketler'
course: 'Ağ Modelleri ve Protokoller'
language: tr
updated: '2026-08-17T18:07:13+00:00'
license: 'CC BY-SA 4.0'
---

# Bağlantı Noktaları ve Soketler

Uygulama uç noktalarının adreslenmesi, bağlantı noktası aralıkları, bir bağlantıyı benzersiz kılan dörtlü ve dinleyen soket ile bağlantı soketi ayrımı.

Önceki 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.

Terimin tanımlanma yeri taşıma katmanıdır. Ağ katmanı bir paketi doğru **makineye** ulaştırır
ve orada durur; oysa bir makinede aynı anda onlarca program ağ kullanır. Bu dersin sorusu,
gelen bir segmentin hangi programa verileceğine nasıl karar verildiğidir.

## Çoğullama

Bir makinede aynı anda birden çok ağ akışı bulunur: bir tarayıcı birkaç sunucuyla konuşur,
bir posta istemcisi arka planda çalışır, bir yedekleme aracı veri gönderir. Hepsinin IP
adresi aynıdır.

Taşıma katmanının ilk görevi bu akışları ayırmaktır. Ayrım için başlığa iki alan konur:
**kaynak bağlantı noktası** ve **hedef bağlantı noktası**. Her biri 16 bittir; değer aralığı
$0$ ile $65\,535$ arasındadır.

Gelen bir segmentin doğru akışa verilmesine **çoğullama çözme (demultiplexing)**, giden
segmentlerin tek bir ağ katmanı akışına bindirilmesine **çoğullama (multiplexing)** denir.
Kapsülleme dersinde tanıtılan çoğullama anahtarları zincirinin son halkası budur: Ethernet
tür alanı IP'ye, IP protokol alanı TCP'ye, TCP bağlantı noktası numarası uygulamaya götürür.

## Numara Aralıkları

Numaralar üç aralığa bölünmüştür:

| Aralık | Ad | Kullanım |
|---|---|---|
| 0–1023 | İyi bilinen (well-known) | Standartlaşmış hizmetler; atanması yetki gerektirir |
| 1024–49151 | Kayıtlı (registered) | Belirli uygulamalara kaydedilmiş numaralar |
| 49152–65535 | Dinamik / geçici (ephemeral) | İstemcilerin kaynak numarası olarak kullandığı aralık |

İlk aralıktaki numaralar, çoğu işletim sisteminde ayrıcalıklı yetki olmadan bağlanamaz. Bu
kısıt bir güvenlik önlemidir: ayrıcalıksız bir programın standart bir hizmetin numarasını
ele geçirip yerine geçmesi engellenir.

Bazı yerleşik numaralar:

| Numara | Protokol | Hizmet |
|---|---|---|
| 22 | TCP | Güvenli kabuk |
| 53 | UDP ve TCP | Ad çözümleme |
| 67, 68 | UDP | Adres kiralama (sunucu, istemci) |
| 80 | TCP | Kaynak aktarımı |
| 443 | TCP ve UDP | Güvenli kaynak aktarımı |

Numaraların protokolden bağımsız olduğuna dikkat edilmelidir: TCP 443 ile UDP 443 **ayrı
uç noktalardır**. Aynı makinede biri bir uygulamaya, diğeri başka bir uygulamaya ait
olabilir. İki ayrı ad uzayı vardır.

Numaralar bir sözleşmedir, bir zorunluluk değil. Bir hizmet başka bir numarada da
çalıştırılabilir; bu durumda istemcinin numarayı açıkça bilmesi gerekir.

## Bağlantıyı Benzersiz Kılan Dörtlü

Tek başına bağlantı noktası numarası, bir akışı belirlemeye yetmez. Bir sunucunun 443
numarasına aynı anda binlerce istemci bağlanır ve hepsi aynı hedef numarayı kullanır.

Bir TCP bağlantısını benzersiz kılan **dörtlüdür**:

$$
(\text{kaynak adresi},\ \text{kaynak bağlantı noktası},\ \text{hedef adresi},\ \text{hedef bağlantı noktası})
$$

Protokol de hesaba katıldığında beşli olur; NAT ve PAT dersindeki çevrim tablosunun anahtarı
bu beşliydi.

**Soket (socket)**, bir uçtaki adres ve bağlantı noktası çiftidir; işletim sistemi
düzeyinde ise bu uç noktayı temsil eden nesnedir. İki soket bir bağlantı oluşturur.

Aşağıdaki program aynı dinleyen uç noktaya iki bağlantı kurar ve dörtlüleri iki taraftan da
yazdırır.

```python
import socket
import threading
import time


def sunucu(hazir: threading.Event, kap: dict) -> None:
    dinleyen = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    dinleyen.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    dinleyen.bind(("127.0.0.1", 9101))
    dinleyen.listen(5)
    kap["dinleyen"] = dinleyen.getsockname()
    hazir.set()
    for _ in range(2):
        baglanti, karsi = dinleyen.accept()
        kap.setdefault("baglantilar", []).append((baglanti.getsockname(), karsi))
        baglanti.close()
    dinleyen.close()


hazir = threading.Event()
kap: dict = {}
threading.Thread(target=sunucu, args=(hazir, kap), daemon=True).start()
hazir.wait()
print("dinleyen uç nokta:", kap["dinleyen"])

for i in range(2):
    istemci = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    istemci.connect(("127.0.0.1", 9101))
    print(f"istemci {i + 1}: yerel={istemci.getsockname()} uzak={istemci.getpeername()}")
    istemci.close()

time.sleep(0.2)
for yerel, karsi in kap["baglantilar"]:
    print(f"sunucu tarafı: yerel={yerel} karşı={karsi}")
```

Çıktı:

```
dinleyen uç nokta: ('127.0.0.1', 9101)
istemci 1: yerel=('127.0.0.1', 53044) uzak=('127.0.0.1', 9101)
istemci 2: yerel=('127.0.0.1', 53045) uzak=('127.0.0.1', 9101)
sunucu tarafı: yerel=('127.0.0.1', 9101) karşı=('127.0.0.1', 53044)
sunucu tarafı: yerel=('127.0.0.1', 9101) karşı=('127.0.0.1', 53045)
```

Geçici bağlantı noktası numaraları (`53044`, `53045`) **her çalıştırmada değişir**; işletim
sistemi bunları geçici aralıktan seçer. Değişmeyen, iki bağlantının farklı numaralar almış
olmasıdır. Dörtlüler:

| Bağlantı | Kaynak | Hedef |
|---|---|---|
| 1 | `127.0.0.1:53044` | `127.0.0.1:9101` |
| 2 | `127.0.0.1:53045` | `127.0.0.1:9101` |

Üç bileşen ortaktır, yalnızca kaynak bağlantı noktası farklıdır — ayrımı sağlayan budur.

## Dinleyen Soket ve Bağlantı Soketi

Çıktıda dikkat çeken bir ayrıntı vardır: sunucu tarafında `9101` numarası hem dinleyen
sokette hem de iki bağlantı soketinde görünür. Bu bir çakışma değildir, çünkü iki tür soket
ayrı anahtarlarla aranır.

| Soket türü | Anahtar | Görevi |
|---|---|---|
| Dinleyen soket | (yerel adres, yerel bağlantı noktası) | Yeni bağlantı isteklerini karşılar |
| Bağlantı soketi | Dörtlünün tamamı | Kurulmuş bir bağlantının verisini taşır |

Gelen bir segment için işletim sistemi önce **tam dörtlü** eşleşmesi arar; bulamazsa ve
segment yeni bağlantı isteğiyse dinleyen sokete yöneltir. Bu ikili arama, tek bir dinleyen
soketin sınırsız sayıda bağlantıya kaynaklık edebilmesini sağlar.

Aynı ayrım, bir sunucunun eşzamanlı kapasitesinin neden bağlantı noktası sayısıyla sınırlı
olmadığını açıklar. Sunucunun numarası tek bir değerde sabittir; farklılaşan, istemci
tarafının adresi ve numarasıdır.

İstemci tarafında ise sınır gerçektir: tek bir istemci makinenin tek bir hedefe kurabileceği
eşzamanlı bağlantı sayısı, geçici aralıktaki numara sayısıyla sınırlıdır. Bu, NAT ve PAT
dersinde hesaplanan kapasite sınırının aynısıdır.

## Örnek Ağdaki Uç Noktalar

Kursun izlediği akış, dörtlü olarak şöyle yazılır:

| Konum | Kaynak | Hedef |
|---|---|---|
| İstemcide | `192.168.10.196:49152` | `198.51.100.20:443` |
| Dönüştürmeden sonra | `203.0.113.10:61001` | `198.51.100.20:443` |
| Sunucuda görülen | `203.0.113.10:61001` | `198.51.100.20:443` |

Sunucu, istemcinin gerçek adresini ve numarasını hiçbir zaman görmez. Dönüştürme, dörtlünün
iki bileşenini değiştirmiştir ve bu değişiklik iki uç için de görünmezdir.

İç ağda kalan bir akış ise dönüştürmeye uğramaz. Yönetim bölümündeki istemcinin sunucu
odasındaki `192.168.10.226` adresine yaptığı bir istek şu dörtlüyle gider ve yol boyunca
değişmez:

```
192.168.10.196:49160  ->  192.168.10.226:443
```

## Bağlanma Hataları

Bir uygulamanın bir numaraya bağlanması iki nedenle başarısız olur.

**Numara kullanımda.** Aynı adres ve numara çiftine bağlı başka bir dinleyen soket vardır.
Bir sunucu programı yeniden başlatıldığında bu hata sık görülür; nedeni önceki bağlantıların
kapanış sürecini tamamlamamış olmasıdır. Bu davranışın ayrıntısı TCP dersinde ele
alınacaktır. Yukarıdaki programdaki `SO_REUSEADDR` seçeneği, tam olarak bu durumu aşmak
içindir.

**Yetki yetersiz.** 1024'ün altındaki bir numaraya ayrıcalıksız bir süreç bağlanamaz.

Bağlanırken verilen adres de anlamlıdır. `127.0.0.1` adresine bağlanan bir soket yalnızca
aynı makineden erişilebilir; tüm arayüzleri temsil eden `0.0.0.0` adresine bağlanan soket
ağdan da erişilebilir. Yerel geliştirme sırasında çalışan bir hizmetin ağdan erişilememesi
çoğunlukla bu ayrımdan kaynaklanır.

## Özet

- Taşıma katmanı, aynı makinedeki akışları 16 bitlik bağlantı noktası numaralarıyla ayırır.
- Numaralar üç aralığa bölünür: iyi bilinen (0–1023), kayıtlı (1024–49151), geçici
  (49152–65535).
- TCP ve UDP numaraları ayrı ad uzaylarıdır; aynı numara iki protokolde iki ayrı uç nokta
  demektir.
- Bir bağlantıyı benzersiz kılan dörtlüdür: kaynak adresi, kaynak numarası, hedef adresi,
  hedef numarası.
- Dinleyen soket yalnızca yerel çiftle, bağlantı soketi dörtlünün tamamıyla aranır; bu
  yüzden tek bir dinleyen soket sınırsız bağlantıya kaynaklık eder.
- Bir sokete bağlanırken verilen adres erişim kapsamını belirler: `127.0.0.1` yalnız yerel,
  `0.0.0.0` tüm arayüzler.

## Sonraki Adım

Dörtlü, bir akışı adlandırır; akışın güvenilir olacağını söylemez. Ağ katmanı paket
kaybedebilir, sırayı bozabilir, aynı paketi iki kez teslim edebilir. Sonraki ders bu üç
sorunu birden çözen protokolü — el sıkışmasını, sıra numaralarını, yeniden iletimi ve akış
denetimini — ele alacak.
