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

# UDP

Sekiz baytlık başlık, datagram sınırının korunması, güvencesiz iletimin uygun olduğu uygulamalar ve uygulama katmanında güvenilirlik kurma.

Önceki iki ders TCP'nin güvencelerini ve bunların bedelini kurdu: el sıkışma bir tur, kayıp
durumunda yeniden iletim ek turlar, sıralı teslim ise bekleme.

Bu bedel her uygulama için gerekli değildir; bazıları için doğrudan zararlıdır. Bu dersin
sorusu, hiçbir güvence vermeyen bir taşıma protokolünün ne işe yaradığı ve hangi
gereksinimlerde doğru seçim olduğudur.

## Sekiz Baytlık Başlık

**UDP (User Datagram Protocol)** başlığı 8 bayttır:

| Alan | Boyut | İşlev |
|---|---|---|
| Kaynak bağlantı noktası | 2 bayt | Gönderen uç nokta; kullanılmıyorsa sıfır |
| Hedef bağlantı noktası | 2 bayt | Alıcı uç nokta |
| Uzunluk | 2 bayt | Başlık dahil datagram boyu |
| Sağlama | 2 bayt | Başlık, yük ve sözde başlık üzerinde |

TCP'nin 20 baytlık başlığındaki alanların çoğu burada yoktur: sıra numarası, onay numarası,
pencere, bayraklar. Yokluklarının nedeni, karşılık gelen düzeneklerin de olmamasıdır.

Sağlama alanı IPv4'te isteğe bağlıdır; sıfır bırakılırsa denetim yapılmaz. IPv6'da
zorunludur, çünkü ağ katmanında başlık sağlaması kaldırılmıştır ve tek denetim taşıma
katmanında kalmıştır.

## Verilmeyen Sözler

| TCP'nin sözü | UDP |
|---|---|
| Teslim güvencesi | Yok — kaybolan datagram yeniden gönderilmez |
| Sıra | Yok — datagramlar gönderim sırasından farklı gelebilir |
| Yinelemesizlik | Yok — aynı datagram iki kez teslim edilebilir |
| Akış denetimi | Yok — alıcının kapasitesi gözetilmez |
| Tıkanıklık denetimi | Yok — ağın durumu gözetilmez |
| Bağlantı durumu | Yok — el sıkışma ve kapanış yoktur |

Bu liste eksiklik listesi gibi okunmamalıdır. Her satır aynı zamanda bir maliyetin
kaldırılmasıdır: durum tutulmaz, tur beklenmez, gecikmiş veri için sıra bekletilmez.

## Datagram Sınırı

UDP'nin verdiği tek yapısal söz, **mesaj sınırının korunmasıdır**. Gönderilen her datagram,
alıcıda tek bir okuma işleminde ve aynı boyutla teslim edilir. TCP'de böyle bir söz yoktur:
akış, baytların kesintisiz bir dizisidir ve gönderim çağrılarının sınırları kaybolur.

Aşağıdaki program aynı üç mesajı iki protokolle gönderir ve alınanları yazdırır.

```python
import socket
import threading
import time

MESAJLAR = [b"ALFA", b"BRAVO", b"CHARLIE"]


def tcp_sunucu(alinan: list, hazir: threading.Event) -> None:
    d = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    d.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    d.bind(("127.0.0.1", 9201))
    d.listen(1)
    hazir.set()
    baglanti, _ = d.accept()
    time.sleep(0.3)                       # üç gönderim de arabellekte birikir
    while True:
        parca = baglanti.recv(4096)
        if not parca:
            break
        alinan.append(parca)
    baglanti.close()
    d.close()


def udp_sunucu(alinan: list, hazir: threading.Event) -> None:
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.bind(("127.0.0.1", 9202))
    hazir.set()
    for _ in range(len(MESAJLAR)):
        veri, _ = s.recvfrom(4096)
        alinan.append(veri)
    s.close()


tcp_alinan: list = []
hazir = threading.Event()
threading.Thread(target=tcp_sunucu, args=(tcp_alinan, hazir), daemon=True).start()
hazir.wait()
istemci = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
istemci.connect(("127.0.0.1", 9201))
for m in MESAJLAR:
    istemci.send(m)
time.sleep(0.5)
istemci.close()
time.sleep(0.3)
print("TCP  gönderilen:", MESAJLAR)
print("TCP  okunan    :", tcp_alinan)

udp_alinan: list = []
hazir2 = threading.Event()
threading.Thread(target=udp_sunucu, args=(udp_alinan, hazir2), daemon=True).start()
hazir2.wait()
u = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
for m in MESAJLAR:
    u.sendto(m, ("127.0.0.1", 9202))
time.sleep(0.5)
u.close()
print("UDP  gönderilen:", MESAJLAR)
print("UDP  okunan    :", udp_alinan)
```

Çıktı:

```
TCP  gönderilen: [b'ALFA', b'BRAVO', b'CHARLIE']
TCP  okunan    : [b'ALFABRAVOCHARLIE']
UDP  gönderilen: [b'ALFA', b'BRAVO', b'CHARLIE']
UDP  okunan    : [b'ALFA', b'BRAVO', b'CHARLIE']
```

TCP tarafında üç gönderim tek bir okumada birleşmiştir. Bu birleşme **garanti değildir**;
zamanlamaya göre iki veya üç ayrı okumada da gelebilirdi. Garanti olan, sınırların
korunmayacağıdır: TCP üzerinde mesaj taşıyan bir uygulama, mesaj sınırını kendisi
kodlamalıdır — sabit uzunluk, uzunluk öneki veya ayraç kullanarak.

UDP tarafında üç datagram üç ayrı okumada gelmiştir ve bu **garantidir**. Alıcının okuma
arabelleği datagramdan küçükse datagram kırpılır; kalan bölümü kaybolur.

## Ne Zaman Seçilir

Seçim ölçütü, uygulamanın **geciken veriye ne yaptığıdır**.

| Uygulama sınıfı | Seçim | Gerekçe |
|---|---|---|
| Dosya aktarımı | TCP | Her bayt gerekli; sıra ve bütünlük zorunlu |
| Ad çözümleme | UDP | Tek istek–tek yanıt; el sıkışma turu maliyetin çoğu olur |
| Adres kiralama | UDP | Adres yokken bağlantı kurulamaz |
| Gerçek zamanlı ses ve görüntü | UDP | Geciken çerçeve değersizdir; yeniden iletim zarar verir |
| Etkileşimli oyun durumu | UDP | Eski konum bilgisi yenisiyle geçersizleşir |
| Sürekli ölçüm gönderimi | UDP | Tek bir örneğin kaybı önemsiz |
| Yayın ve çok noktaya gönderim | UDP | TCP çoklu alıcıyı desteklemez |

Gerçek zamanlı akış satırı, seçimin özünü gösterir. Bir ses çerçevesi 200 ms geç ulaşırsa
çalınacağı an geçmiştir; onu yeniden istemek yalnızca ağı yorar. Kayıp çerçevenin yerine
sessizlik veya kestirim koymak, geciken çerçeveyi beklemekten iyidir.

## Sıra Başı Engellemesi

TCP'nin sıralı teslim sözünün ikinci bir bedeli vardır. Alıcı, akıştaki bir boşluğu
doldurmadan sonraki verileri uygulamaya veremez — elinde olsalar bile. Bir segment
kaybolduğunda, arkasından ulaşan segmentler arabellekte bekletilir. Buna **sıra başı
engellemesi (head-of-line blocking)** denir.

Tek bir akış taşıyan bir bağlantıda bu doğru davranıştır. Ancak tek bir TCP bağlantısı
üzerinde birbirinden bağımsız birden çok mantıksal akış taşınıyorsa, bir akıştaki kayıp
diğerlerini de bekletir — aralarında hiçbir bağımlılık olmamasına karşın.

UDP'de bu engelleme yoktur, çünkü sıra sözü de yoktur. Bağımsız akışları çoğullayan
protokollerin UDP üzerine kurulmasının nedenlerinden biri budur: sıra ve güvenilirlik
akış başına yönetilir, akışlar birbirini bekletmez.

## Güvenilirliği Uygulamada Kurmak

UDP seçmek, güvenilirlikten vazgeçmek anlamına gelmez; onu **gerektiği kadar** kurmak
anlamına gelir. Uygulama katmanında sık kurulan parçalar şunlardır:

- **Yeniden deneme ve zaman aşımı.** Ad çözümlemedeki tipik kalıp: yanıt gelmezse aynı sorgu
  yinelenir, birkaç denemeden sonra başka bir sunucuya geçilir.
- **Sıra numarası.** Datagramlara numara konarak kayıp ve sıra bozulması sezilir; hangi
  eksiğin telafi edileceğine uygulama karar verir.
- **Seçmeli yeniden iletim.** Yalnızca hâlâ değerli olan veriler yeniden istenir.
- **Hız denetimi.** Tıkanıklık denetimi olmadığından, sürekli veri gönderen bir uygulama
  kendi hız sınırını kendisi koymalıdır.

Son madde ihmal edilmemelidir. Denetimsiz bir UDP akışı, aynı yolu paylaşan TCP akışlarını
geri çekilmeye zorlar ve payını haksız biçimde büyütür; ağın tamamı için de tıkanıklık
riski doğurur.

Bu parçaların tümü kuruluyorsa TCP'yi yeniden yazmak gibi görünür. Fark, **hangi
parçaların** kurulduğudur: uygulama, kendi verisinin hangi bölümünün gecikince değersizleştiğini
bilir; TCP bilemez.

## Boyut ve Parçalama

UDP gövdeyi bölmez. Uygulama 3000 baytlık bir datagram gönderirse, bölme işi IP katmanına
düşer ve Çerçeve, Paket, Segment dersindeki parçalama maliyeti doğar: parçalardan biri
kaybolursa datagramın tamamı kaybolur.

Bu yüzden UDP kullanan protokoller datagram boyunu yol MTU'sunun altında tutar. Ethernet ve
IPv4 için sınır $1500 - 20 - 8 = 1472$ bayttır; tünel bulunma olasılığına karşı daha güvenli
bir eşik seçmek yaygın bir uygulamadır.

## Kaynak Adresi Sahteciliği

UDP'de el sıkışma olmadığından, gönderenin adresi hiçbir aşamada doğrulanmaz. Kaynak adresi
başkasına ait gösterilen bir datagram, yanıtın o adrese gitmesine yol açar.

Bunun ölçek sorunu, yanıtın istekten büyük olduğu protokollerde ortaya çıkar: küçük bir
istek, hedefe büyük bir yanıt yönlendirir ve trafik çarpılarak yansıtılır. Karşı önlemler
protokolün dışındadır:

- **Kaynak adresi doğrulaması.** Ağ operatörü, kendi ağından çıkan paketlerin kaynak
  adreslerinin o ağa ait olduğunu denetler. Sahte kaynaklı paket ağdan çıkamaz.
- **Yanıt hızı sınırlaması.** Aynı kaynağa verilen yanıt sayısı sınırlanır.
- **Sorgu doğrulama.** Sunucu, büyük yanıt vermeden önce isteğin gerçekten o adresten
  geldiğini küçük bir alışverişle sınar.

TCP'de aynı sahtecilik daha zordur: el sıkışmanın ikinci adımındaki sıra numarasını görmek
gerekir ve numara rastgele seçilir. TCP dersinde belirtilen rastgelelik gereksiniminin
gerekçelerinden biri budur.

## Özet

- UDP başlığı 8 bayttır; sıra, onay, pencere ve bayrak alanları yoktur çünkü karşılık gelen
  düzenekler de yoktur.
- Teslim, sıra, yinelemesizlik, akış ve tıkanıklık denetimi güvenceleri verilmez; karşılığında
  durum tutulmaz ve tur beklenmez.
- UDP mesaj sınırını korur; TCP korumaz — TCP üzerinde mesaj taşıyan uygulama sınırı kendisi
  kodlamalıdır.
- Seçim ölçütü, geciken verinin uygulama için hâlâ değerli olup olmadığıdır.
- Sıra başı engellemesi, bağımsız akışların tek bir TCP bağlantısında birbirini bekletmesine
  yol açar; UDP'de bu engelleme yoktur.
- Uygulama katmanında yeniden deneme, sıra numarası ve hız denetimi kurulabilir; hız
  denetimi ihmal edilirse akış paylaşımı bozulur.

## Sonraki Adım

İki protokolün de verimi aynı fiziksel gerçeklere çarpar: bir bit tel üzerine konması zaman
alır, ışık sonlu hızda ilerler, kuyruklar bekletir. Sonraki ders bu bileşenleri ayırarak
gecikmenin nereden geldiğini, bant genişliği ile gecikmenin çarpımının neden bir kapasite
ölçüsü olduğunu ve bir aktarımın süresini belirleyenin çoğu zaman bant genişliği olmadığını
hesapla gösterecek.
