İnternet Trafiğinde TCP ve UDP Arasındaki Farklar

TCP ve UDP, IP üzerinde uygulamalar arasında veri taşımak için kullanılan iki temel taşıma protokolüdür. İkisi de kaynak ve hedef uygulamaları port numaralarıyla ayırabilir, ancak uygulamaya sundukları hizmet modeli belirgin biçimde farklıdır. Bu nedenle seçim yalnız “hangisi daha hızlı?” sorusuyla yapılamaz.
TCP bağlantı yönelimli, güvenilir ve sıralı bir bayt akışı sunar. UDP, datagram adı verilen bağımsız mesajları bağlantı kurmadan taşır; teslim veya sıralama garantisi vermez. Kaybolan datagramları kendiliğinden yeniden iletmez, sıralamayı düzeltmez ve alıcının işleme kapasitesine göre yerleşik akış kontrolü uygulamaz.
Pratikte temel ayrım, bu sorumlulukları taşıma protokolünün mü yoksa uygulamanın mı üstlendiğidir. Teslimin eksiksiz ve sıralı olması zorunluysa TCP önemli mekanizmaları hazır sunar; zaman duyarlılığı veya mesaj temelli işleme ön plandaysa UDP uygun bir temel olabilir, fakat uygulamanın gereken güvenilirlik ve tıkanıklık kontrolünü tasarlaması gerekir.
Bağlantı Kurulumunun Veri Gönderimine Etkisi
TCP bağlantı yönelimli bir taşıma protokolüdür. Normal TCP kurulumunda istemci SYN, sunucu SYN-ACK, istemci de ACK göndererek üç aşamalı el sıkışmayı tamamlar. Bu alışverişte iki uç başlangıç sıra numaralarını bildirip karşı tarafın bildirimini onaylar ve bağlantı durumunu oluşturur. Bağlantı, iki uçtaki IP adresleri ve port numaralarıyla ayırt edilir; sıra numaraları baytların doğru sırada teslim edilmesini sağlar. TCP Fast Open gibi uzantılar, gerekli koşullar sağlandığında el sıkışma tamamlanmadan veri gönderilip işlenmesine izin verebilir; bu, her TCP bağlantısında kullanılan bir özellik değildir.
UDP'de böyle bir taşıma katmanı bağlantı kurulumu yoktur. Bir uygulama uygun hedef adresi ve portu bildiğinde datagram gönderebilir. Uygulamanın işletim sistemi üzerinden veri gönderip aldığı iletişim ucu olan UDP soketi, belirli bir uzak adres ve portla “bağlanmış” olarak kullanılabilir. Ancak bu, TCP'deki gibi karşı uçla el sıkışma yapan veya ağ üzerinde bağlantı durumu kuran bir işlem değildir.
Bağlantı kurulumunun gecikmeye etkisi özellikle kısa ömürlü veri alışverişlerinde görülebilir. Buna karşılık uzun süre açık kalan bir TCP bağlantısında kurulum maliyeti yalnız başlangıçta oluşur; bu nedenle yalnız el sıkışmaya bakarak her trafik için UDP'nin daha hızlı olduğu sonucuna varmak doğru değildir.
Teslim Güvencesi ve Yeniden İletim
TCP, güvenilir teslimi sıra numaraları, onaylar, hata denetimi ve yeniden iletim mekanizmalarıyla sağlar. Bir segment kaybolduğunda veya verinin beklenen kısmı alınmadığında TCP kaybı algılayabilir ve gerekli veriyi yeniden gönderebilir. Uygulama bu mekanizmaları tek tek tasarlamak yerine güvenilir bir bayt akışıyla çalışır.
Bu güvenilirlik, “veri her koşulda mutlaka ulaşır” anlamına gelmez. Ağ yolu uzun süre çalışmazsa, karşı uç erişilemez hale gelirse veya bağlantı başarısız olursa TCP işlemi tamamlayamayabilir ve uygulamanın bu hatayı ele alması gerekir. TCP'nin avantajı, çalışır durumdaki bağlantıda kayıp ve yeniden iletim ayrıntılarını taşıma katmanında yönetmesidir. TCP ağdaki paket kaybını önlemez; kaybı algılayıp eksik veriyi yeniden göndermeye çalışır.
Bir TCP ACK (Acknowledgment) mesajı, ilgili baytların karşı TCP ucuna ulaştığını bildirir; sunucu uygulamasının bunları işlediğini veya diske kaydettiğini kanıtlamaz. Benzer biçimde uygulamadaki gönderme işleminin başarılı dönmesi, verinin yalnız yerel gönderim tamponuna kabul edildiği anlamına gelebilir. Bir komutun tamamlandığını bilmek gerekiyorsa uygulama protokolünün sonuç yanıtı beklenmelidir.
UDP kaybolan datagramları yeniden iletmez ve teslim edildiğine dair yerleşik bir güvence sunmaz. Güvenilir mesaj teslimine ihtiyaç duyan UDP tabanlı bir uygulama onay, zamanlayıcı, yeniden iletim ve yinelenen mesajları ayıklama gibi mekanizmaları kendisi tanımlamalıdır. Uygulama bu mekanizmaları eklediğinde UDP'nin üstlenmediği teslim ve sıralama sorumluluklarını da kendisi yönetir.
Sıralama ve Veri Modeli
TCP uygulamaya güvenilir ve sıralı bir bayt akışı sunar. Uygulamanın iki ayrı yazma işlemi yapması, alıcı tarafın aynı sınırlarla iki ayrı mesaj göreceği anlamına gelmez; uygulama protokolü kendi mesaj çerçevelemesini uzunluk alanı, ayraç veya başka bir yöntemle belirlemelidir.
Kayıp yaşandığında sıralı teslim beklemeye yol açabilir. Daha sonraki baytlar ağdan ulaşmış olsa bile önceki eksik bölüm tamamlanmadan uygulamaya teslim edilemez. Bu davranış, veri bütünlüğü ve sıra gerektiren işlemler için yararlıdır; ancak zaman duyarlı bir uygulamada eksik verinin yeniden iletilmesini beklemek uygulamanın algıladığı gecikmeyi artırabilir.
UDP ise mesaj temelli çalışır; her datagramın başlangıcı ve sonu bellidir. Ağ datagramları farklı sırada ulaştırabilir, geciktirebilir, çoğaltabilir veya düşürebilir. Uygulama mesajların sırasını önemsiyorsa sıra numarası gibi bir mekanizma tanımlamalı ve geç ya da yinelenen datagramlarla ne yapılacağını belirlemelidir.
Akış Kontrolü ile Tıkanıklık Kontrolü Arasındaki Farklar
Akış kontrolü, göndericinin alıcıyı işleyebileceğinden fazla veriyle boğmamasını amaçlar. TCP alıcısı kabul edebileceği veri miktarını pencere bilgisiyle bildirir; gönderici yeni veri miktarını bu sınıra göre ayarlar. Alıcı penceresinin daralması veya sıfıra inmesi, göndericinin ne kadar yeni veri yollayabileceğini doğrudan belirler.
UDP'de yerleşik akış kontrolü yoktur. Gönderici, yalnız UDP mekanizmasına bakarak alıcının tamponunun dolduğunu veya uygulamanın datagramları yeterince hızlı tüketemediğini öğrenemez. Gönderim hızı alıcı kapasitesini aşarsa paketler göndericide, alıcıda veya ağın ara noktalarında düşebilir.
Akış kontrolü alıcının kapasitesiyle ilgilenirken tıkanıklık kontrolü ağ yolunun taşıyabileceği yükü dikkate alır. TCP temel tıkanıklık kontrolü mekanizmalarını uygulamak zorundadır. UDP'nin kendi içinde böyle bir mekanizma bulunmadığından, genel internet üzerinde UDP kullanan uygulamalar, ürettikleri trafiğe uygun hız sınırlama ve tıkanıklık kontrolü mekanizmalarını ayrıca kurmalıdır. Az veri gönderen bir uygulama da yanıt alamadığında aralıksız yeniden deneme yaparak ağı yüklememelidir.
Gecikme ve Kayıp Altında Davranış
UDP'nin protokol düzeyinde bağlantı kurmaması ve kayıp datagramları otomatik olarak yeniden iletmemesi, bazı zaman duyarlı tasarımlarda uygulamanın kayıp veriyi beklemeden çalışmayı sürdürmesine yardımcı olabilir. Örneğin eski bir durum bilgisinin geç ulaşması yerine atlanması ve daha yeni bilginin işlenmesi tercih ediliyorsa uygulama kaybı kabul edip güncel veriyi işlemeyi sürdürebilir.
TCP ise eksik veriyi tamamlamaya ve sıralı akışı korumaya çalışır. Kayıp olduğunda yeniden iletimi ve eksik bölümün tamamlanmasını beklemek, uygulamanın algıladığı gecikmeyi artırabilir. Bunun karşılığında uygulama eksik baytları kendi güvenilirlik katmanıyla takip etmek zorunda kalmaz.
Bu fark “UDP düşük gecikmeli, TCP yüksek gecikmeli” şeklinde kesin bir kurala dönüştürülemez. Ağın gerçek gecikmesi, kayıp oranı, bağlantının ne kadar süre açık kaldığı, uygulamanın yeniden iletim politikası ve gönderim hızı sonuç üzerinde etkilidir. UDP üzerinde güvenilirlik ve sıkı sıralama yeniden kurulursa bekleme davranışı TCP'ye yaklaşabilir veya uygulama tasarımına bağlı olarak daha karmaşık hale gelebilir.
TCP ve UDP Davranışlarının Karşılaştırması
İki protokolü yalnız protokol başlıklarının boyutu veya varsayılan “hız” algısıyla değil, aynı gereksinimler üzerinden karşılaştırmak gerekir. Temel davranış farkları şöyledir:
| Özellik | TCP | UDP |
|---|---|---|
| Bağlantı | Bağlantı yönelimlidir ve bağlantı durumu tutar. | Protokol düzeyinde bağlantı kurulumu gerektirmez. |
| Veri modeli | Sıralı bayt akışı sunar. | Bağımsız datagramlardan oluşan mesaj taşıma modeli sunar. |
| Kayıp yönetimi | Kayıp veriyi yeniden iletmeye yönelik mekanizmalar içerir. | Kayıp datagramı kendiliğinden yeniden iletmez. |
| Teslim sırası | Uygulamaya sıralı veri sunar. | Sıralı teslim sağlamaz; gerekiyorsa uygulama sıralama mekanizması kurar. |
| Akış kontrolü | Alıcının ilan ettiği pencereyle gönderimi sınırlar. | Yerleşik akış kontrolü yoktur. |
| Tıkanıklık kontrolü | Temel tıkanıklık kontrolü TCP davranışının bir parçasıdır. | UDP yerleşik tıkanıklık kontrolü sağlamaz; gerekli mekanizma uygulamaya veya üst protokole aittir. |
| Gecikme davranışı | Kurulum, yeniden iletim ve sıralama bazı durumlarda bekleme ekleyebilir. | Kurulum ve zorunlu yeniden iletim yoktur; düşük gecikme yine de garanti değildir. |
| Uygulama sorumluluğu | Güvenilir ve sıralı aktarımı taşıma katmanı yönetir. | Gereken güvenilirlik, sıralama ve tıkanıklık kontrolü uygulamada ek tasarım gerektirebilir. |
Kullanım Senaryosuna Göre Protokol Seçimi
TCP, eksiksiz veri ve doğru sıra uygulamanın temel şartı olduğunda doğal bir seçimdir. Dosya aktarımı, veritabanı komutları veya uzun süreli uzaktan yönetim oturumları gibi güvenilir bir bayt akışına ihtiyaç duyulan durumlarda kayıp telafisini taşıma katmanına bırakmak tasarımı sadeleştirir.
UDP, uygulamanın bağımsız mesajlarla çalıştığı ve bazı verilerin gecikerek gelmesindense atlanmasının kabul edilebildiği tasarımlarda uygun olabilir. Canlı ses ve görüntü, sensör ölçümleri, ağdaki cihazları bulma ve kısa istek-yanıt alışverişleri buna örnek olabilir; ancak hangi protokolün uygun olduğu uygulamanın teslim, güvenlik, tıkanıklık ve mesaj boyutu gereksinimlerine bağlıdır.
Bazı uygulamalar tek bir taşıma yaklaşımına bağlı kalmak zorunda değildir. Örneğin kontrol komutları TCP üzerinden, gecikmiş örneklerin atlanabildiği ses verileri UDP üzerinden gönderilebilir. UDP üzerinde çalışan QUIC ise güvenilir bayt akışlarını ve tıkanıklık kontrolünü kendisi sağlar; dolayısıyla UDP kullanılması dosya aktarımının güvenilir olamayacağı anlamına gelmez.
TCP veya UDP Kullanmak Veriyi Şifreler mi?
İki protokol de kendi başına uygulama verisini şifrelemez. TCP için kullanılan “güvenilir” sözcüğü, verinin sıralı teslimi ve kayıpların yeniden iletilmesiyle ilgilidir; dinlemeye karşı koruma anlamına gelmez. İletişimi korumak için TCP üzerinde TLS veya UDP üzerinde DTLS gibi ayrıca şifreleme ve kimlik doğrulama sağlayan bir protokol kullanılabilir. QUIC de şifreli taşıma sağlar; bu koruma UDP'nin değil QUIC'in özelliğidir.







