TLDR;
- TCP - akış yönelimli, bağlantı gerektirir, güvenilir, yavaş
- UDP - mesaj odaklı, bağlantısız, güvenilmez, hızlı
Başlamadan önce, bir şeyin tüm dezavantajlarının avantajlarının devamı olduğunu unutmayın . Bir iş için sadece doğru bir araç var, her derde deva yok. TCP / UDP onlarca yıldır ve bir nedenden dolayı bir arada var oluyor.
TCP
Son derece güvenilir olacak şekilde tasarlandı ve işini çok iyi yapıyor. Çok karmaşık çünkü zorlu bir görevi yerine getiriyor: güvenilir olmayan IP protokolü üzerinden güvenilir bir aktarımı kanıtlamak.
Tüm TCP'nin karmaşık mantığı ağ yığınına dahil edildiğinden, uygulama katmanında çok sayıda zahmetli, hataya eğilimli düşük seviyeli öğe yapmakta özgürsünüz.
TCP üzerinden veri gönderdiğinizde, göndericideki sokete paketlere bölündüğü, yığını geçtiği ve kablo üzerinden gönderildiği bayt akışı yazarsınız. Alıcı tarafında paketler tekrar sürekli bir bayt akışına yeniden birleştirilir.
Bu güzel soyutlamayı sürdürmenin karmaşıklık ve performans açısından bir maliyeti vardır. Bayt akışından gelen ilk paket kaybolursa, alıcı daha önce gelmiş olsa bile sonraki paketlerin işlenmesini geciktirir.
Ayrıca, güvenilir olmak için TCP bunu uygular:
- TCP, 3 gidiş-dönüş ("rezil" 3-yollu el sıkışma) gerektiren yerleşik bir bağlantı gerektirir.
- TCP, bir alıcının verilere ayak uydurmasını sağlamak için bir bağlantı kurduktan sonra iletim hızını kademeli olarak artırdığında "yavaş başlatma" adlı bir özelliğe sahiptir.
- Gönderilen her paket onaylanmalıdır, aksi takdirde gönderen daha fazla veri göndermeyi durdurabilir
- Ve tekrar tekrar ...
TCP, gecikmelerin öngörülebilir olduğu ve paket kaybının çok yaygın olmadığı kablolu ağlar için tasarlanırken, tüm bunlar yavaş güvenilmez kablosuz ağlarda daha da kötüleşir. Buna ek olarak, daha önce bahsettiğim birçok insan gibi, bazı şeyler için TCP hiç çalışmıyor (DHCP). Bununla birlikte, ilgili durumlarda, TCP hala olağanüstü derecede iyi çalışır.
Bir posta benzetmesi kullanarak TCP oturumu, sekreterinize postaları kıran ve bir yayıncıya berbat bir posta hizmeti gönderen bir hikayeyi anlatmaya benzer. Diğer tarafta başka bir sekreter postaları tek bir metin halinde toplar. Bazı postalar kaybolur, bazıları bozulur, bu nedenle güvenilir teslimat için çok karmaşık bir prosedür gereklidir ve 10 sayfalık hikayenizin yayıncınıza ulaşması uzun zaman alabilir.
UDP
Öte yandan UDP mesaj yönelimlidir, bu nedenle bir alıcı sokete bir mesaj (paket) yazar ve daha sonra herhangi bir bölme / montaj olmaksızın bir alıcıya olduğu gibi iletilir.
TCP ile karşılaştırıldığında, özellikleri çok basittir. Temel olarak, sizin için tek yaptığı, bir alıcının bozulmasını algılayabilmesi için pakete bir sağlama toplamı eklemektir. Diğer her şey bir yazılım geliştiricisi olarak sizin tarafınızdan uygulanmalıdır. Şimdi hacimli TCP özelliklerini okuyun ve bazı kısımlarını yeniden uygulamayı düşünmeyi deneyin.
Bazı insanlar bu şekilde gitti ve HTTP / 3'ün UDP'ye dayanan bir protokol olan QUIC'yi kullandığı noktaya kadar çok iyi sonuçlar aldı. Ancak, bu daha çok bir istisnadır. UDP'nin yaygın uygulamaları, paketleri kaybetmenin TCP'nin getirdiği bir gecikmeye kıyasla çok önemli olmadığı Skype, Zoom veya Google Hangout gibi sesli / video akışı ve konferans uygulamalarıdır.