TCP ve UDP: Farklar ve Kullanım Senaryoları

TCP ve UDP arasındaki temel farkları keşfedin. Hangi protokolün hangi durumlarda kullanılacağını öğrenin ve Linux sistemlerinde port protokollerini nasıl kontrol edeceğinizi inceleyin.

L
Linuxize
0 görüntülenme
TCP ve UDP: Farklar ve Kullanım Senaryoları

TCP ve UDP Nedir?

TCP (Transmission Control Protocol) ve UDP (User Datagram Protocol), internet protokolü (IP) katmanının üzerinde yer alan taşıma katmanı protokolleridir. Bu protokoller, verilerin ağ üzerinden nasıl iletileceğini ve teslimat garantilerini belirler. TCP, güvenilir ve sıralı bir veri akışı sağlarken, UDP bağımsız veri paketlerinin (datagram) gönderilmesini ve teslimat garantisinin uygulama katmanına bırakılmasını destekler.

Günümüzde hemen hemen tüm ağ uygulamaları, doğrudan ya da bu protokollerin üzerine inşa edilmiş başka protokoller aracılığıyla TCP veya UDP kullanır. Örneğin, bir dosya indirirken TCP tercih edilirken, canlı bir görüşme sırasında UDP daha yaygın olarak kullanılır. Bu farklılık, TCP'nin kayıp veriyi otomatik olarak düzeltme yeteneğine sahip olması, UDP'nin ise kayıp paketleri uygulamaya bırakmasıyla ilgilidir.

İki Taşıma Protokolü: TCP ve UDP

TCP ve UDP, IP katmanının hemen üzerinde yer alır. IP, paketleri bir uçtan diğerine iletir ancak paketlerin ulaşacağı, tek seferde ulaşacağı ya da sıralı ulaşacağı konusunda herhangi bir garanti vermez. Taşıma katmanı protokolleri (TCP/UDP), bu belirsizlikleri gidermek için tasarlanmıştır.

TCP Protokolü

TCP, bağlantı odaklı bir protokoldür. Veri aktarımından önce, istemci ve sunucu arasında üç yönlü bir el sıkışma (three-way handshake) gerçekleşir:

  1. İstemci, sunucuya SYN (synchronize) paketi gönderir.
  2. Sunucu, SYN-ACK (synchronize-acknowledge) yanıtıyla karşılık verir.
  3. İstemci, ACK (acknowledge) paketiyle onay gönderir.

Bu işlem, hem istemci hem de sunucunun birbirleriyle senkronize olmasını ve bağlantıyı başlatmasını sağlar. TCP'nin sağladığı temel özellikler şunlardır:

  • Güvenilir teslimat: TCP, kaybolan veya hasar gören segmentleri (veri parçalarını) algılar ve bağlantı kullanılabilir durumdayken yeniden gönderir. Eğer kurtarma başarısız olursa, uygulama bir hata alır.
  • Sıralı teslimat: Segmentler, sıralama numaraları taşıyarak ağdaki gecikmelerden bağımsız olarak verilerin sıralı şekilde yeniden birleştirilmesini sağlar.
  • Akış ve tıkanıklık kontrolü: TCP, gönderme hızını hem alıcıyı hem de ağın kapasitesini aşmayacak şekilde ayarlar.
  • Sürekli bayt akışı: Uygulamalar verileri sırayla okur, ancak TCP bireysel yazı sınırlarını korumaz. Uygulamalar kendi mesaj formatlarını tanımlamalıdır.

Bu özellikler, TCP'yi dosya transferleri, web tarayıcıları ve uzaktan erişim gibi uygulamalar için ideal hale getirir. Ancak, el sıkışma süreci ve onay mekanizmaları nedeniyle TCP'de gecikme ve ek yük oluşur.

UDP Protokolü

UDP, bağlantısız bir protokoldür. Veri göndermek için herhangi bir el sıkışma gerekmez. Gönderici, veriyi bir datagram içine yerleştirir ve doğrudan gönderir. Alıcı, datagramı alabilir, sırasız alabilir ya da hiç alamayabilir. UDP, bu durumları düzeltmek için herhangi bir mekanizma sağlamaz.

UDP'nin temel özellikleri şunlardır:

  • Bağlantı kurulumu yok: Uygulama, ilk datagramı göndermek için herhangi bir taşıma katmanı el sıkışması tamamlamak zorunda değildir.
  • Düşük protokol yükü: UDP başlığı sadece 8 bayttır, TCP başlığının en az 20 baytıyla karşılaştırıldığında oldukça hafiftir.
  • Sıralama garantisi yok: Gecikmiş ya da kaybolmuş bir datagram, diğer datagramların teslimatını engellemez.
  • Uygulama kontrollü kurtarma: Uygulama, kayıp veriyi görmezden gelme, yeniden deneme ya da kendi onaylama ve yeniden gönderme mekanizmalarını ekleme konusunda tam kontrole sahiptir.

Not: UDP, her durumda otomatik olarak daha hızlı değildir. Daha küçük başlık boyutu ve bağlantı kurulumunun olmaması, gecikmeyi azaltabilir. Ancak gerçek performans, uygulama protokolüne, ağ koşullarına, paket boyutuna ve UDP üzerine inşa edilmiş güvenilirlik mekanizmalarına bağlıdır.

TCP ve UDP Arasındaki Temel Farklar

Aşağıdaki tabloda, TCP ve UDP arasındaki temel farklar özetlenmiştir:

Özellik TCP UDP
Bağlantı Bağlantı odaklı, ilk olarak el sıkışma gerekir Bağlantısız, herhangi bir kurulum gerekmez
Veri modeli Sürekli bayt akışı Bağımsız datagramlar
Güvenilirlik Kayıp tespit eder ve yeniden gönderir Teslimat ve yeniden gönderme mekanizması yok
Sıralama Verileri sıralı şekilde teslim eder Datagramlar sırasız gelebilir
Akış ve tıkanıklık kontrolü TCP tarafından yerleşik olarak sağlanır Uygulama protokolü tarafından sağlanmalıdır
Başlık boyutu 20 bayt veya daha fazla 8 bayt
Tipik kullanım alanları HTTP/1.1, HTTP/2, e-posta (SMTP/IMAP/POP3), SSH, FTP DNS sorguları, DHCP, NTP, ses/video konferans, çevrimiçi oyunlar, QUIC

Hangi Protokol Hangi Hizmetler Tarafından Kullanılır?

Bir hizmetin hangi protokolü kullandığı, o hizmetin sıralı bayt akışına, bağımsız mesajlara, düşük kurulum gecikmesine veya kurtarma konusunda uygulama kontrollü yaklaşıma ihtiyaç duyup duymadığına bağlıdır.

TCP Kullanan Hizmetler

  • HTTP/1.1 ve HTTP/2: Web tarayıcıları ve sunucular arasındaki iletişim genellikle TCP üzerinden gerçekleşir. HTTP/3, QUIC protokolü üzerinden UDP kullanır.
  • SSH (Secure Shell): Uzaktan erişim ve komut çalıştırma için kullanılır.
  • E-posta protokolleri (SMTP, IMAP, POP3): E-postaların gönderilmesi ve alınması için kullanılır.
  • FTP (File Transfer Protocol): Dosya transferleri için kullanılır.

UDP Kullanan Hizmetler

  • DHCP (Dynamic Host Configuration Protocol): Cihazların ağa bağlanırken otomatik olarak IP adresi almasını sağlar. Bağlantı kurulumu gerekmediği için UDP kullanılır.
  • NTP (Network Time Protocol): Ağdaki cihazların zaman senkronizasyonunu sağlar.
  • Ses ve video konferans, çevrimiçi oyunlar: Canlı veri akışı gerektiren uygulamalarda, gecikmiş bir paketin atlanması, yeni verinin teslim edilmesine tercih edilir. Bu nedenle UDP kullanılır.

Bazı uygulama protokolleri hem TCP hem de UDP'yi destekleyebilir. Örneğin:

  • DNS (Domain Name System): Genellikle UDP üzerinden sorgular gönderir, ancak büyük yanıtlar için TCP'ye geçebilir. DNS, TCP port 53'ü hem UDP hem de TCP için kullanır.
  • QUIC: UDP üzerine inşa edilmiş yeni bir protokoldür. Güvenilir akışlar, tıkanıklık kontrolü, şifreleme ve bağlantı yönetimini kendi içinde barındırır. HTTP/3, QUIC protokolünü kullanır.

Linux Sisteminde Port Protokollerini Kontrol Etme

Linux sistemlerinde hangi portun hangi protokolü (TCP/UDP) kullandığını belirlemek için ss komutu kullanılır. Bu komut, hem TCP hem de UDP soketlerini listelemek için kullanılabilir.

Adım Adım Talimatlar

  1. Terminali açın ve aşağıdaki komutu çalıştırın:

    sudo ss -tulpn

    -t TCP soketlerini, -u UDP soketlerini, -l dinleyen soketleri, -p işlem bilgilerini ve -n adres ve port numaralarını gösterir.

  2. Komutun çıktısı aşağıdaki gibi görünecektir:

    Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
    tcp LISTEN 0 4096 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=712,fd=13))
    tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1043,fd=3))
    tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1410,fd=6))
    udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* users:(("systemd-resolve",pid=712,fd=12))
    udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=920,fd=6))
    

    Netid sütunu, kullanılan protokolü (TCP/UDP) gösterir. TCP için LISTEN durumu, UDP için UNCONN durumu yaygındır. Örneğin, DNS hizmeti (port 53) hem TCP hem de UDP için dinlenirken, SSH (port 22) ve web sunucusu (port 80) yalnızca TCP'yi kullanır.

  3. DNS için TCP ve UDP kullanımını doğrulamak amacıyla /etc/services dosyasını inceleyebilirsiniz:

    grep -E '^[[:space:]]*domain[[:space:]]' /etc/services

    Not: /etc/services dosyası, hizmetlerin standart port numaralarını ve protokollerini tanımlar. Ancak bu dosya, hangi süreçlerin aktif olarak kullanıldığını göstermez. Aktif soket durumunu görmek için ss komutunu kullanın.

Hangisini Seçmek Gerekir?

TCP ve UDP arasındaki seçim, uygulamanızın gereksinimlerine bağlıdır:

  • TCP'yi seçin: Eğer uygulamanızın güvenilir ve sıralı veri teslimatı gerekiyorsa (örneğin, dosya transferi, web sayfaları, e-posta).
  • UDP'yi seçin: Eğer uygulamanızın düşük gecikme ve hız önceliği varsa ve kayıp veriyi tolere edebiliyorsa (örneğin, canlı yayın, çevrimiçi oyunlar, VoIP).

Bazı durumlarda, uygulamanızın gereksinimlerine bağlı olarak hem TCP hem de UDP'yi kullanabilirsiniz. Örneğin, DNS hem UDP hem de TCP'yi destekler.

Sonuç

TCP ve UDP, ağ uygulamalarının temelini oluşturan iki önemli taşıma katmanı protokolüdür. TCP, güvenilir ve sıralı veri akışı sağlarken, UDP daha basit ve hafif bir yapı sunar. Hangi protokolün kullanılacağına karar verirken, uygulamanızın gereksinimlerini dikkate almalısınız. Linux sistemlerinde hangi protokolün hangi portta kullanıldığını kontrol etmek için ss -tulpn komutunu kullanabilirsiniz. Bu sayede, ağ trafiğinizin nasıl yönetildiğini daha iyi anlayabilir ve gerektiğinde sorunları çözebilirsiniz.

Öneri: Uygulamanızın gereksinimlerini net bir şekilde tanımlayın. Eğer kayıp veriyi tolere edemiyorsanız ve sıralı teslimat gerekiyorsa, TCP'yi tercih edin. Eğer düşük gecikme ve hız kritikse, UDP'yi kullanın ve gerekirse uygulama katmanında kendi kurtarma mekanizmanızı geliştirin.

Kaynak

Linuxize