TCP ve UDP arasındaki fark nedir?


144

TCP ve UDP arasındaki fark nedir?

TCP'nin zaman açısından kritik olmayan uygulamalarda ve UDP'nin hızlı veri iletimi gerektiren oyunlar veya uygulamalar için kullanıldığını biliyorum. TCP'nin HTTP, HTTPs, FTP, SMTP ve Telnet için kullanıldığını biliyorum. UDP'nin DNS ve DHCP için kullanıldığını biliyorum.

Ama neden? TCP ve UDP'nin hangi özellikleri, ilgili kullanım durumları için yararlı kılar?


13
Ve bu ( skullbox.net/tcpudp.php ) - ilk Google hit oldu - yeterince açık değil miydi? Bu konuda kafa karıştırıcı olan neydi? Belki bu daha iyidir? tcpipguide.com/free/…
S.Lott

1
Bu sorunun neden (yazma sırasında) 3 oy aldığını gerçekten merak ediyorum. İlk cümle bir anlam ifade etmiyor ve arama yaparsa bu konuda pek çok materyal mevcut.
MattH

21
@MattH: 1) Oldukça geniş ve yinelenen bir cevap zaten iyi ise, iyi bir soru. 2) Yazım hatalarını ilk cümlede düzeltmek için fazlasıyla ün kazandınız. 3) Bu konudaki bilgilerin başka yerlerde bulunması önemsizdir. Stack Overflow bir bilgi deposu olmayı hedefliyor ve burada soruları kanonik olarak cevaplıyor .
ire_and_curses

2
Neredeyse hiç kimsenin DHCP'nin yayın kullandığından bahsetmemesi ilginçtir, ancak herkes 'cevap', teslimat ve yeniden iletim garantisi ile ilgilidir.
Heath Hunnicutt

1
Gelecekte bunu okuyan herkes için, yukarıda belirtilen Skullbox sitesinde Google'a göre MALWARE var (üzerine tıkladığımda beni durdurdu). Oraya gitmemenizi tavsiye ederim.
Alan006

Yanıtlar:


119

TCPIP ağı üzerinden bağlantıya yönelik bir akıştır. Gönderilen tüm paketlerin hedefe doğru sırada ulaşmasını garanti eder. Bu, gönderene geri gönderilen onay paketlerinin kullanımını ve otomatik yeniden iletimin ek gecikmelere ve genel olarak daha az verimli iletime neden olduğunu ima eder UDP.

UDPbağlantısız bir protokoldür. İletişim datagram yönelimlidir. Bütünlük yalnızca tek datagramda garanti edilir. Datagramlar hedefe ulaşır ve arızalı olarak gelebilir veya hiç gelmez. ACKTCP olmayanlar kullandığından daha verimlidir . Genellikle gerçek zamanlı iletişim için kullanılır, burada bir bağlantı yükü için paket kayıp oranının küçük bir yüzdesi tercih edilir .TCP

Belirli durumlarda UDPyayın paket iletimine izin verdiği için kullanılır. DHCPProtokol gibi durumlarda bu bazen önemlidir , çünkü istemci makine hala bir IPadres DHCPalmamıştır (bu, müzakere protokolü amacıdır) ve adresin kendisi TCPolmadan bir akış oluşturmanın herhangi bir yolu olmayacaktır IP.


5
UDP'nin kullanıldığı bir örnek, burada birkaç paket kaybetmenin ve genellikle çok önemli olmadığı video ve ses iletimidir (bir çerçevenin rengi kapalı olabilir veya küçük bir nano saniye ses kesilebilir veya değiştirilebilir) - insanlar için fark edilmez). Tabii ki, bağlantınız gerçekten kötüyse, video bulanık / pikselli görünecek ve ses bulanıklaşacak ve çok fazla kesip kesecek kadar çok paket kaybedebilirsiniz.
Niko Bellic

53

Gönderen Skullbox makalesinde:

TCP (İletim Kontrol Protokolü) İnternet'te en sık kullanılan protokoldür. Bunun nedeni TCP'nin hata düzeltmesi sunmasıdır. TCP protokolü kullanıldığında "garantili teslimat" vardır. Bunun nedeni büyük ölçüde "akış kontrolü" adı verilen bir yöntemdir. Akış kontrolü, verilerin ne zaman yeniden gönderilmesi gerektiğini belirler ve önceki paketler başarıyla aktarılana kadar veri akışını durdurur. Bu, bir veri paketi gönderilirse, bir çakışma meydana gelebileceği için çalışır. Bu durumda, istemci tüm paket tamamlanana ve orijinaliyle aynı olana kadar paketi sunucudan yeniden ister.

UDP (Kullanıcı Datagram Protokolü), internette yaygın olarak kullanılan diğer bir protokoldür. Ancak, UDP asla web sayfaları, veritabanı bilgileri vb. Gibi önemli verileri göndermek için kullanılmaz; UDP genellikle ses ve video akışı için kullanılır. Windows Media ses dosyaları (.WMA), Real Player (.RM) ve diğerleri gibi akışlı ortamlar hız sağladığı için UDP kullanır! UDP'nin TCP'den daha hızlı olmasının nedeni, akış kontrolü veya hata düzeltme biçimi olmamasıdır. İnternet üzerinden gönderilen veriler çarpışmalardan etkilenir ve hatalar olacaktır. UDP'nin sadece hız ile ilgili olduğunu unutmayın. Medya akışının yüksek kalitede olmamasının ana nedeni budur.

1) TCP bağlantı yönelimli ve güvenilirdir, çünkü UDP daha az bağlantılıdır ve güvenilir değildir.

2) TCP, UDP'de olmadığı gibi ağ arayüzü düzeyinde daha fazla işleme ihtiyaç duyar.

3) TCP, güvenilir iletim sağlamak için 3 yollu el sıkışma, tıkanıklık kontrolü, akış kontrolü ve diğer mekanizma kullanır.

4) UDP çoğunlukla paket gecikmesinin paket kaybından daha ciddi olduğu durumlarda kullanılır.


1
+1 Oldukça iyi bir özet. Gerçi is the most commonly used protocol on the Internetifadesi gerçekten tartışılabilir olduğunu ve nasıl tanımladığınıza bağlıdır most commonly used, protocolve the Internet. Örneğin, İnternet Protokolü, söz konusu taç için daha muhtemel bir rakiptir.
MattH

-1: DHCP için UDP'nin kullanılmasının nedeninin paket gecikmesi veya kaybı ile ilgisi yoktur.
Heath Hunnicutt

2
Net bir kanalda çok fazla veri gönderirken, TCP genellikle UDP'den daha hızlıdır. UDP'nin canlı akışlı ses veya video gibi şeyler için kullanılmasının nedeni, bir TCP paketi kaybolduğunda, alıcı uygulamanın, eksik veriler tekrar iletilip alınana kadar daha fazla bir şey görmemesidir. Birçok akış uygulamasında, geç gelen veriler işe yaramaz, bu nedenle yine de işe yaramayacak bir yeniden iletimi beklerken her şeyi ayakta tutan bir anlamı yoktur.
supercat

TCP yayınları desteklemediğinden UDP DHCP için kullanılır. DHCP, DHCP sunucusunun IP adresini almak için bir yayın kullanımına dayanır. Bkz. Stackoverflow.com/questions/21266008/…
ScottSmudger

41

TCP'yi iki konum arasında özel bir zamanlanmış UPS / FedEx alma / bırakma olarak düşünürken, UDP bir posta kutusuna posta kartı atmaya eşdeğerdir.

UPS / FedEx, postaladığınız paketin oraya ulaşmasını ve zamanında oraya ulaşmasını sağlamak için ellerinden geleni yapacaktır. Posta kartıyla, hiç gelmediği için şanslısınız ve siparişin geç veya geç gelmesi (tatilden eve geldikten SONRA birinden kaç kez kartpostal aldınız?)

UDP sadece "en iyi çaba" iken, TCP alabileceğiniz garantili bir dağıtım protokolüne yakındır.


1
Yeterince iyi bir cevap. Bir TCP akışında paketlerin hedef tarafından kabul edildiğini ve bozuk paketlerin / eksik paketlerin gönderen tarafından yeniden gönderildiğini eklerim. UDP'de paketler gönderilir ve hedef bunları herhangi bir sırada alır ve makbuzu kabul etmez.
Erik Nedwidek

2
Biraz yanıltıcı bir benzetme belki de QoS için daha uygun
MattH

11
ben benzetmeyi çok seviyorum, ama bu cevap biraz yanlış temsil bir şey hızdır. gerçekte UDP daha az yük olduğu için TCP'nin daha hızlı olduğu gibi ses çıkarır.
iliketocode

22

DNS ve DHCP için UDP'nin kullanılma nedenleri:

DNS - TCP, sunucudan (bağlantıları dinleyen) istemciden daha fazla kaynak gerektirir. Özellikle, TCP bağlantısı kapatıldığında, sunucunun TIME_WAIT_2 olarak bilinen bir durum sırasında bağlantının ayrıntılarını (bellekte tutan) iki dakika boyunca hatırlaması gerekir. Bu, önceki bağlantının hatalı olarak tekrarlanan paketlere karşı geçerli bağlantının bir parçası olarak yorumlandığı bir özelliktir. TIME_WAIT_2'nin bakımı, sunucuda çekirdek belleği kullanır. DNS istekleri küçüktür ve birçok farklı istemciden sık sık gelir. Bu kullanım modeli, istemcilerle karşılaştırıldığında sunucudaki yükü artırır. İstemci veya sunucuda hiçbir bağlantısı ve durumu olmayan UDP kullanımının bu sorunu iyileştireceğine inanılıyordu.

DHCP - DHCP, BOOTP'nin bir uzantısıdır. BOOTP, istemci önyükleme yaparken istemci bilgisayarların bir sunucudan yapılandırma bilgilerini almak için kullandığı bir protokoldür. Sunucuyu bulmak için, BOOTP (veya DHCP) sunucularını soran bir yayın gönderilir. Yayınlar yalnızca UDP gibi bağlantısız bir protokol aracılığıyla gönderilebilir. Bu nedenle, BOOTP'nin sunucu bulma yayını için en az bir UDP paketi gerekiyordu. Ayrıca, istemci başlatılırken BOOTP çalıştığı için ve bu, istemcinin tüm TCP / IP yığınının yüklü ve çalışıyor olmadığı bir zaman dilimi olduğundan, UDP, istemcinin işlemeye hazır olduğu tek protokol olabilir zaman. Son olarak, bazı DHCP / BOOTP istemcilerinde yalnızca UDP bulunur. Örneğin, bazı IP termostatları sadece UDP uygular.

Diğerlerinin de belirttiği gibi, UDP medya, özellikle ses akışı için de kullanışlıdır. Gecikmeli paketleri düşürürseniz, konuşmalar ağ gecikmesi altında daha iyi ses verir. Bunu UDP ile yapabilirsiniz, ancak TCP ile gecikme sırasında elde ettiğiniz tek şey bir duraklamadır, ardından her zaman duraklatılmış olduğu kadar geciktirilecek ses gelir. İki yönlü telefon tarzı görüşmeler için bu kabul edilemez.


17

Farklardan biri kısadır

UDP : Mesaj gönderin ve hedefe ulaşırsa geriye bakmayın, Bağlantısız protokol
TCP : Hedefe ulaşmak için mesaj ve garanti gönderin, Bağlantı odaklı protokol


9

TCP, gerçek veri aktarımı gerçekleşmeden önce bir bağlantı kurar, UDP yapmaz. Bu şekilde UDP daha hızlı teslimat sağlayabilir. DNS, zaman sunucusu erişimi gibi uygulamalar UDP kullanır.

UDP'nin aksine, TCP tıkanıklık kontrolü kullanır. Ağ yüküne yanıt verir. UDP'den farklı olarak, ağ tıkanıklığı yaklaştığında yavaşlar. Dolayısıyla, sürekli verimi tercih eden multimedya gibi uygulamalar UDP için geçerli olabilir.

Ayrıca, UDP güvenilmezdir, paket kayıplarına tepki vermez. Bu yüzden multimedya aktarımı gibi kayba duyarlı uygulamalar UDP'yi tercih eder. Ancak, TCP güvenilir bir protokoldür, bu nedenle web aktarımı, e-posta, dosya indirme gibi güvenilirlik gerektiren uygulamalar TCP'yi tercih eder.

Ayrıca, günümüz internet UDP orta kutuları nedeniyle TCP kadar hoş değil. UDP bağlantısının engellendiği varsayıldığında skype gibi bazı uygulamalar TCP'ye düşer.



2

Tcp ve Udp protokolü arasındaki kısa ve basit farklar:

1) Tcp - İletim kontrol protokolü ve Udp - Kullanıcı datagram protokolü.

2) Tcp güvenilir bir protokoldür, Udp gibi güvenilir olmayan bir protokoldür.

3) Tcp akış yönelimli, Udp ise mesaj yönelimli bir protokoldür.

4) Tcp, Udp'den daha yavaştır.


1

Bu konuya girin ve bu şekilde ifade etmeye çalışayım.

TCP

3 yönlü el sıkışma

Bob: Hey Amy, sana bir sır söylemek istiyorum
Amy: Tamam, devam et, hazırım
Bob: Tamam

İletişim
Bob: 'Ben', bu ilk harf
Amy: İlk harf alındı, lütfen bana ikinci harf
Bob: '', bu ikinci harf
Amy: İkinci harf alındı, lütfen üçüncü harf
Bob'u gönder : 'L ', bu üçüncü harf
Bir süre sonra
Bob: ' L ', bu üçüncü harf
Amy: Üçüncü harf alındı, lütfen bana dördüncü
Bob'u gönderin : ' O ', bu dördüncü
Amy harfi : ...
... ...

4 yönlü tokalaşma
Bob: Sırrım açığa çıktı, şimdi kalbimi biliyorsun.
Amy: Tamam. Söyleyecek hiçbir şeyim yok.
Bob: Tamam.

UDP

Bob: I LOVE U
Amy aldı: OVI LE

TCP, UDP'den daha güvenilirdir ve hatta mesaj sırası garantilidir, bu yüzden UDP neden daha hafif ve verimlidir.


0

Analoji ile Basit Açıklama

TCP böyledir.

Mars'ta bir mektup arkadaşınız olduğunu düşünün (internetten önceki günlerde yazılı mektuplarla iletişim kurduk).

Kalem arkadaşınıza son derece etkili insanların yedi alışkanlığını göndermeniz gerekir. Böylece yedi ayrı harfle göndermeye karar verdiniz:

  1. Mektup 1 - Proaktif olun
  2. Mektup 2 - Sonunu akılda tutarak başlayın ...

vb.

Mektup 7 - Testereyi Keskinleştirin

Gereksinimler:

Kalem arkadaşınızın tüm harflerinizi sırayla aldığından ve mükemmel bir şekilde ulaştığından emin olmak istiyorsunuz . Kalem ödemeniz 1 harfinden önce 7 harfini alırsa - bu iyi değil. kalem arkadaşınız 3 harf hariç tüm harfleri alırsa - bu da iyi değildir.

Gereksinimlerimizin karşılanmasını nasıl sağladığımız aşağıda açıklanmıştır:

  • Onay Mektubu: Bu yüzden kalem arkadaşınız "1 harfi aldım" demek için bir onay mektubu gönderir. Bu şekilde kalem arkadaşınızın onu aldığını bilirsiniz. Bir mektup gelmezse veya arızalı gelirse, durmanız ve geri dönüp o harfi ve sonraki tüm harfleri yeniden göndermeniz gerekir.
  • Akış Kontrolü: Xmas zamanında, kalem arkadaşınızın çok fazla posta alacağını biliyorsunuz, bu yüzden yavaşlatıyorsunuz çünkü kalem arkadaşınızı boğmak istemiyorsunuz. (Kalem arkadaşınız size, penpal'ın posta kutusunda bulunan okunmamış mesaj sayısı hakkında sürekli güncellemeler gönderir. onları okuyamayacak.
  • Mükemmel varış. Bazen mektubunuzu postayla gönderirken yırtılabilir veya bir salyangoz yarısını yiyebilir. Tüm mektubunuzun mükemmel durumda olduğunu nereden biliyorsunuz? Kalem arkadaşınız size tam mektuba sahip olup olmadıklarını ve tam olarak gönderdiğiniz mektup olduğunu kontrol edebileceğiniz bir mekanizma verecektir. (örneğin bir kelime sayımı vb. yoluyla). temel bir benzetme.

0

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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.