UDP vs TCP, ne kadar hızlı? [kapalı]


194

Bazı paket kaybını tolere edebilen genel protokol mesajı değişimi için. TCP üzerinden UDP ne kadar daha verimlidir?


Soru TCP ile ilgili olduğu için "tcp" etiketini de ekleyebilirsiniz.
Cristian Ciupitu

5
"Genel protokol mesajı değişimi" ne demektir? Soru, verimliliğin ne hakkında olduğunu açıklığa kavuşturmalıdır. Küçük bir mesaj için daha az gecikme mi istiyoruz? Veya sürekli bir veri akışı için daha yüksek bir verim mi istiyoruz?
Johan Boulé

Tcp, Hız dışında UDP'den daha iyi özelliklere sahiptir.
RAJKUMAR NAGARETHINAM

3
TCP ve UDP hızı sorunu tartışmalıdır. Başlığınızdaki soru aslında sorunun gövdesiyle eşleşmiyor. Hem TCP hem de UDP paketleri aynı ortam üzerinde tam olarak aynı hızda seyahat eder.
Ron Maupin

Yanıtlar:


86

UDP TCP'den daha hızlıdır ve bunun basit nedeni, TCP pencere boyutu ve gidiş-dönüş süresi kullanılarak hesaplanan bir paket kümesini onaylayan TCP yerine sürekli bir paket akışına izin veren var olmayan onay paketinin (ACK) olmasıdır. (RTT).

Daha fazla bilgi için basit ama çok anlaşılır Skullbox açıklamasını öneriyorum (TCP ve UDP)


19
Aslında TCP'nin UDP'den daha hızlı olduğu birçok durum vardır. Cevabımı aşağıda görebilirsiniz.
Robert S. Barnes

2
Daha hızlı olan, tamamen trafik özelliklerine bağlıdır.

4
Her ne kadar cevap doğru olsa da, soruya cevap vermez ve başka bir yerde bahsedilen bilgileri tekrar tekrar tekrarlar. ACK ile Güvenilir UDP yöntemlerinin TCP'den çok daha hızlı olabileceğinden de bahsetmez.
Elliot Woods

268

İnsanlar TCP'nin size verdiği en önemli şeyin güvenilirlik olduğunu söylüyor. Ama bu gerçekten doğru değil. TCP'nin size verdiği en önemli şey tıkanıklık kontrolüdür: bir DSL bağlantısı üzerinden tümü maksimum hızda giden 100 TCP bağlantısı çalıştırabilirsiniz ve 100 bağlantı da üretken olacaktır, çünkü bunların tümü kullanılabilir bant genişliğini "algılar". 100 farklı UDP uygulamasıyla, tüm paketleri olabildiğince hızlı iterek deneyin ve işlerin sizin için ne kadar iyi çalıştığını görün.

Daha büyük ölçekte, bu TCP davranışı, İnternet'in "tıkanıklık çöküşü" ne kilitlenmesini engelleyen şeydir.

Uygulamaları UDP'ye yönlendirme eğilimi gösteren şeyler:

  • Grup dağıtım semantiği: bir grup insana TCP'nin noktadan noktaya onayından çok daha verimli bir şekilde güvenilir teslimat yapmak mümkündür.

  • Sıra dışı teslimat: birçok uygulamada, tüm verileri aldığınız sürece hangi sırayla geldiğini umursamazsınız; sıra dışı bir bloğu kabul ederek uygulama düzeyinde gecikmeyi azaltabilirsiniz.

  • Düşmanlık: Bir LAN partisinde, ağınızdaki güncellemeleri olabildiğince hızlı bir şekilde karıştırdığınız sürece web tarayıcınızın iyi çalışıp çalışmadığını önemsemeyebilirsiniz.

Ancak performansı önemseseniz bile, muhtemelen UDP ile gitmek istemezsiniz:

  • Şu anda güvenilirlik için çalışıyorsunuz ve güvenilirliği uygulamak için yapabileceğiniz birçok şey TCP'nin zaten yaptığından daha yavaş olabilir.

  • Artık ağ dostu değilsiniz, bu da paylaşılan ortamlarda sorunlara neden olabilir.

  • En önemlisi, güvenlik duvarları sizi engelleyecektir.

Birden fazla TCP bağlantısını birlikte "kısaltarak" bazı TCP performansı ve gecikme sorunlarının üstesinden gelebilirsiniz; iSCSI bunu yerel alan ağlarında tıkanıklık kontrolü yapmak için yapar, ancak düşük gecikmeli "acil" bir mesaj kanalı oluşturmak için de yapabilirsiniz (TCP'nin "ACİL" davranışı tamamen bozulur).


18
İyi cevap, daha genel, "akış kontrolü" (akış kontrolünün bir alt kümesi olan tıkanıklık kontrolünün aksine) daha da ileri giderdim. Yalnızca birden çok TCP bağlantısı bir bağlantıyı paylaşamaz, aynı zamanda gönderenin gelen verileri herhangi bir nedenle işlemeyi duraklatırsa alıcının arabelleğini taşmasını da önler.
Alex B

1
@AaronLS: paket kaybı ve RTT (gidiş-dönüş süresi) artışları ( kuyruk gecikmesi için bir proxy olarak görülebilir ) olabilir / olabilir (örn: WiFi ağları, gerçek tıkanıklık olmadan paketleri kaybedebilir, bazı TCP tıkanıklığı kontrol algoritmalarını tıkanıklıktan kaçınmaya sürükleyebilir) tıkanıklık göstergeleri.
ninjalj

2
UDP uğraşmak için bir piç. Bu konuda zaten yanmıştım. Ne yaparsam yapayım performans, gecikme, verim, güvenilirlik dengesi bulamıyorum. Zamanlayıcılar gibi gerçek zamanlı şeyler için harika ... ama UDP ve İleri Hata Düzeltme kullanarak bir TCP değiştirme üzerinde çalışıyorum ve bu olacağını düşündüğümden çok daha zor. Tıkanıklık kontrolü. 1GB ağlarda ve Kablosuz ağlarda aynı şekilde çalışan evrensel bir sistem bir sanat eseridir. Bir av tüfeğine yüklenmiş paketleri yeniden birleştirmeye çalıştığımı hissediyorum.
Jason Nelson

1
TCP'nin lehine başka bir şey, uygulama istemcisi işleme mantığını büyük ölçüde basitleştiren doğal olarak bağlantı odaklı olmasıdır ( listen-> accept-> istemci durumu doğal olarak diğer istemcilerden bağımsızdır). Özellikle tek bir istemciden birden fazla bağlantıyı yönetmek UDP ile boğuk bir hal alır. Ve UDP'nin lehine bir nokta, UDP yığınlarının uygulanması gerçekten kolay. ve düşünmeyin).
Jason C

1
Tüm bunlar yalnızca büyük miktarda veri teslim etmekle ilgilendiğimizi varsayar (gecikme hakkında çok fazla umursamadan). Oldukça az sayıda uygulamada (oyunlar / VoIP), durum büyük ölçüde farklıdır: çok küçük miktarda veriye sahibiz , ancak A LOT gecikme sürelerine dikkat edin; UDP için yasal kullanımların% 99'unu oluşturan bu basit şeydir. Ve birkaç nitpicks: (a) grup teslimi internet üzerinden ÇALIŞMAZ (ve muhtemelen mümkün değildir), bu yüzden sadece İntranet alemidir; (b) Google'a göre, İnternet nüfusunun yalnızca% 8-9'unun UDP ile ilgili sorunları vardır; (c) "düşmanca ağ" sabit oranlı akış için geçerli değildir
Bugs Hare

93

Bazı uygulamalarda TCP, UDP'den daha hızlıdır (daha iyi verim).

Bu, MTU boyutuna göre çok sayıda küçük yazma yaparken geçerlidir. Örneğin, Ethernet (1500 bayt MTU) üzerinden 300 bayt paket akışının gönderildiği ve TCP'nin UDP'den % 50 daha hızlı olduğu bir deneyi okudum .

Bunun nedeni, TCP'nin veriyi arabelleğe alması ve tam bir ağ segmentini doldurması ve böylece mevcut bant genişliğini daha verimli kullanmasıdır.

Öte yandan UDP, paketi hemen kabloya koyar, böylece ağı çok sayıda küçük paketle tıkar.

Bunun için çok özel bir nedeniniz yoksa muhtemelen UDP kullanmamalısınız. Özellikle Nagle algoritmasını devre dışı bırakarak TCP'ye UDP ile aynı tür bir gecikme süresi verebildiğiniz için (örneğin, gerçek zamanlı sensör verilerini iletiyorsanız ve ağı çok sayıda küçük paketle doldurmaktan endişe etmiyorsanız).


3
Aslında bu etki için kriterler yaptım. İstisnalar atmadan UDP'nin destekleyeceği kadar büyük paketler gönderiyordum (Java'da) ve TCP çok daha hızlıydı. Sanırım bir çok işletim sistemi, sürücü ve donanım optimizasyonu da bunun bir parçası.
Charlie

14
@Myforwik: Birincisi, bu uygulama tanımlı değil, TCP protokolünün bir parçası. Buna Nagle algoritması denir. Genellikle Silly Window Sendromu olarak bilinen şeyin önlenmesine yardımcı olur. Her iki terimi de arayın. İkincisi, TCP'nin pov'sinden paket kavramı yoktur. Son olarak, "Etkili TCP / IP Programlama" kitabı, bu konunun tamamını ve TCP ile UDP'nin ne zaman kullanılacağını bilmekle ilgili konuyla ilgili diğer birçok bölümü ayırmaktadır. Bu durumu (aslında oldukça yaygın olan) gündeme getiriyorum çünkü OP genel bir soru sordu ve bu olası birçok cevaptan biri.
Robert S. Barnes

46
@Myforwik. Başkalarında moronizm önerirken, hepimizin bilgimizde boşluklar olduğunu fark etmeye çalışın - siz de dahil ettiniz. Sonuçta SO, bilgi paylaşımı için bir forum. Hemen hemen tüm birinci şahıs atıcılar UDP kullanıyor ve MTU'ya kadar büyük boyutlarda paketler göndermeleri nadir. John Carmack'e gidip bu yaklaşımla ne kadar salak olduğunu öne sürmek isterseniz, öncelikle bu konuda kendinizi iyice eğitmenizi öneririm. 15 yıl, ve bir endüstrinin yüksek performanslı ağ kodu değmez ve ölmez çünkü onun "moronic" olduğunu düşünüyorum.
Mühendis

2
" Ethernet (300 bayt MTU) üzerinden 300 bayt paket akışının gönderildiği ve TCP'nin UDP'den% 50 daha hızlı olduğu bir deneyi okudum. " - Bu deneyi bağlayabilir misiniz?
Leviathan

3
@Leviathan Etkili TCP / IP Programlama kitabında.
Robert S. Barnes

31

kayıp toleranslı

Şunu mu demek istediniz: "kayıp toleranslı"?

Temel olarak, UDP "zarara toleranslı" değildir. Birine 100 paket gönderebilirsiniz ve bu paketlerin yalnızca 95'ini alabilir ve bazıları yanlış sırada olabilir.

Bir videoyu kaçırmanın daha iyi olduğu video akışı ve çok oyunculu oyun gibi şeyler için arkasındaki diğer tüm paketleri ertelemekten daha iyidir, bu bariz bir seçimdir

Yine de diğer birçok şey için, eksik veya 'yeniden düzenlenmiş' bir paket kritiktir. Bir şeyler kaçırılırsa yeniden denemek ve doğru siparişi uygulamak için UDP'nin üstünde çalıştırmak için fazladan bir kod yazmanız gerekir. Bu, bazı yerlerde biraz ek yük getirecektir.

Neyse ki, bazı çok akıllı insanlar bunu yaptılar ve TCP olarak adlandırdılar.

Şöyle düşünün: Bir paket kaybolursa, bir sonraki paketi olabildiğince çabuk almayı ve devam etmeyi (UDP kullan) mı yoksa eksik verilere mi (TCP kullan) ihtiyacınız var mı? Gerçekten son derece senaryoda olmadığınız sürece ek yük önemli değil.


1
100 üzerinden 5 paket? Oldukça fazla. Sanırım bu sadece bir örnek. Soru: gerçek durumda kaç paket kaybedilebilir? Çünkü eğer 10000'den 2 ise (artı eksi 1), o zaman bu konuda endişelenmezdim.
Mart'ta ucube

1
@ freakish, evet bu sadece bir örnekti. Paket kaybının gerçek miktarı bağlantınıza, yukarı akış ağlarına vb. Bir arka plan indirmeyi başlatır başlatmaz, biraz almaya başladım (belki% 10-% 20). Bu yaklaşık 5 yıl önceydi ve daha hızlı internet bağlantıları yardımcı olabilir.
Orion Edwards

2
İnternet yönlendiricileri
tcp'den

19

Hangi protokolün daha iyi performans gösterdiğini (verim açısından) - UDP veya TCP - gerçekten ağ özelliklerine ve ağ trafiğine bağlıdır. Örneğin Robert S. Barnes, TCP'nin daha iyi performans gösterdiği bir senaryoya dikkat çekiyor (küçük boyutlu yazılar). Şimdi, ağın tıkalı ve hem TCP hem de UDP trafiğine sahip olduğu bir senaryo düşünün. Ağdaki TCP kullanan göndericiler 'tıkanıklığı' algılar ve gönderme hızlarını düşürür. Bununla birlikte, UDP'nin tıkanıklıktan kaçınma veya tıkanıklık kontrol mekanizmaları yoktur ve UDP kullanan gönderenler aynı oranda veri pompalamaya devam edecektir. Yavaş yavaş, TCP göndericileri gönderme hızlarını minimum seviyeye düşürür ve UDP gönderenlerinin ağ üzerinden gönderilmesi için yeterli veri varsa, kullanılabilir bant genişliğinin çoğunu kayarlar. Yani, böyle bir durumda, UDP gönderenleri, ağ bant genişliğinin büyük pastalarını aldıklarından daha fazla verime sahip olacaklar. Aslında, bu aktif bir araştırma konusudur - UDP trafiği varlığında TCP verimi nasıl geliştirilir. Biliyorum ki, hangi TCP uygulamalarının verimi artırabileceğini kullanmak, birden fazla TCP bağlantısı açmaktır. Bu şekilde, her TCP bağlantısının verimi sınırlı olsa da, tüm TCP bağlantılarının toplam verimi, UDP kullanan bir uygulamanın veriminden daha büyük olabilir.


2
Bu doğru değil yönlendiriciler TCP önce UDP düşecek. Paylaşılan bir telde UDP tarafından boğulursunuz, ancak aşırı arz durumunda olması muhtemel olan teknolojiye bağlıdır, ancak UDP'nin çok az çarpışma gönderilmesi noktasına kadar düşmesi oldukça kolaydır.
kullanıcı1496062

Açıklamanızı seviyorum ama bir puan alamıyorum. UDP bağlantıları tüm trafiği alabilirse (bant genişliği düşükse veya veri yüksekse), bu durumda TCP kullanıyorsanız, UDP kullananlara temelde rehin tutulursa uygulamanız. Tüm uygulamalar TCP kullanıyorsa, birbirleriyle "iyi oynarlar". Öyleyse neden ilk olarak yönlendirici üzerinde UDP'ye izin verelim?
Igor Čordaš

@PSIXO: TCP ve UDP farklı uygulama gereksinimleri sunar, bu nedenle her ikisi de uygulamalar tarafından kullanılır. Önerinizin sonucu, TCP ve UDP trafiği için farklı bir ağ altyapısına sahip olmamız gerektiğidir - pahalı bir tekliftir ve özellikle şu an yaptığımız tüm yatırımlarda kesinlikle yapabileceğimiz bir şey değil. Bu yüzden araştırmacılar 'yazılım''daki çatışmayı dengelemek için alternatif yollar bulmakla meşguller.
gjain

Aslında evet, iki altyapıya sahip olmak mükemmel bir çözüm olurdu ama maalesef mantıklı değil. Yorumumla söylemek istediğim, TCP'ye isabet eden UDP'yi abarttığınızdı, çünkü eğer bir faktör yüksek olsaydı, insanlar hızlı çalışmak için TCP'ye ihtiyaç duyuyorlarsa, yönlendiricideki UDP'yi (bazen şirketlerde yaptıkları gibi) devre dışı bırakacaklardı. Ayrıca, UDP paketlerinin TCP'den daha düşük olma şansına sahip olduğunu unutmayın. Cevabınızdaki diğer gerçekler hakkında tamamen katılıyorum ve oldukça yararlı buluyorum, ancak sadece belirli etkileri fazla tahmin ettiğinizi düşünüyorum.
Igor Čordaš

18

"Ne hızlı" dan bahsederken - en az iki çok farklı yönü vardır: iş hacmi ve gecikme.

Hakkında konuşuyorsanız throughput - TCP'nin akış kontrolü (diğer yanıtlar belirtildiği gibi), kesinlikle mümkün iken, bir Big Başağrısı (tm) olurdu, son derece önemli ve UDP üzerinden karşılaştırılabilir bir şey yapıyor olduğunu. Sonuç olarak - verime ihtiyacınız olduğunda UDP kullanmak nadiren iyi bir fikir olarak nitelendirilir (TCP'ye haksız avantaj elde etmek istemiyorsanız).

Ancak, gecikmeler hakkında konuşursanız - her şey tamamen farklıdır. Paket kaybının yokluğunda TCP ve UDP son derece benzer davranırlar (varsa, marjinal olmak üzere herhangi bir fark) - paket kaybolduktan sonra, tüm desen büyük ölçüde değişir.

Herhangi bir paket kaybından sonra, TCP en az 200 msn yeniden iletimi bekleyecektir (RFC6298'in 2.4 paragrafı başına 1 saniye, ancak pratik modern uygulamalar onu 200 ms'ye düşürme eğilimindedir). Dahası, TCP ile, hedef ana bilgisayara ulaşan paketler bile - eksik paket alınana kadar uygulamanıza teslim edilmeyecektir (yani, tüm iletişim ~ 200ms geciktirilir) - BTW, Head-of olarak bilinen bu etki -Line Engelleme, ister TCP ister güvenilir + düzenli UDP olsun, tüm güvenilir düzenli akışların doğasında vardır. İşleri daha da kötüleştirmek için - yeniden iletilen paket de kaybolursa, ~ 600ms gecikme hakkında konuşacağız (üstel geri çekilme nedeniyle, 1. yeniden iletim 200ms ve ikincisi 200 * 2 = 400ms). Kanalımızda% 1 paket kaybı varsa (bugünün standartlarına göre kötü değildir), ve saniyede 20 güncellemeli bir oyunumuz var - bu 600ms gecikme ortalama her 8 dakikada bir gerçekleşecek. Ve hızlı tempolu bir oyunda 600ms sizi öldürmek için fazlasıyla yeterli - oyun için oldukça kötü. Bu etkiler tam olarak neden gamedev'lerin TCP yerine UDP'yi tercih etmesidir.

Bununla birlikte, gecikmeleri azaltmak için UDP kullanırken - yalnızca "UDP'nin kullanılması" nın önemli gecikme süresi iyileştirmesi için yeterli olmadığını fark etmek önemlidir, bu tamamen UDP'yi NASIL kullandığınızla ilgilidir. Özellikle, RUDP kütüphaneleri genellikle bu "üstel geri çekilmeden" kaçınır ve daha kısa yeniden iletim süreleri kullanırlarsa - "güvenilir sıralı" akış olarak kullanılırlarsa, hala Hat Başına Engellemeden muzdarip olmaları gerekir (bir çift durumunda) paket kaybı, 600ms yerine yaklaşık 1.5 * 2 * RTT alacağız - veya oldukça iyi bir 80ms RTT için ~ 250ms'lik bir gecikmedir, bu bir gelişme, ancak daha iyisini yapmak hala mümkündür). Diğer yandan, http://gafferongames.com/networked-physics/snapshot-compression/ ve / veya http: // ithare. , Hat Başı engellemesini tamamen ortadan kaldırmak mümkündür (bu nedenle, 20 güncelleme / saniye olan bir oyun için çift paket kaybı için, RTT'den bağımsız olarak gecikme 100 ms olacaktır).

Yalnızca TCP ama hiçbir UDP erişimi için ne varsa (örneğin tarayıcıda olduğu gibi istemci UDP engelleme çirkin güvenlik duvarları 6-9% birinin arkasından ise, ya) - - Ve bir yan not olarak orada görünüyor bir yol olarak TCP üzerinden UDP'yi çok fazla gecikme yaşamadan uygulayın, buraya bakın: http://ithare.com/almost-zero-additional-latency-udp-over-tcp/ (yorumları da okuyun (!)).


13

Her TCP bağlantısı, veri iletilmeden önce bir ilk el sıkışma gerektirir. Ayrıca, TCP üstbilgisi farklı sinyaller ve mesaj teslimi algılama için tasarlanmış bir sürü ek yük içerir. Mesaj alışverişi için UDP muhtemelen küçük bir başarısızlık şansı kabul edilebilirse yeterli olacaktır. Makbuzun doğrulanması gerekiyorsa, TCP en iyi seçenektir.


Küçük hata olasılığı ve paket boyutunda bir sınır.

11

@Andrew , farklı olmaya yalvarıyorum. Performans gereksinimleri nedeniyle bazı uygulama türlerinde UDP tercih edilir. Klasik bir örnek video konferanstır. Bu tür uygulamalar TCP kontrolüne iyi yanıt vermez.

Dikkate alınması gereken diğer bir husus, çok noktaya yayın gereksiniminiz olup olmadığıdır. Öyleyse, UDP kullanın.


8
UDP de kullanılır, çünkü bir veya iki paketi kaçırırsanız, muhtemelen zaten çok geç ve muhtemelen atlamak ve devam etmek için en iyisidir. Bazı bırakılan paketler nedeniyle videoda küçük bir bip sesi, tıkanıklıktan çok daha iyidir.
Kibbee

1
Doğru - ağın çoklu dökümü çoğu yönlendiricinin engellemesi oldukça nadirdir.
user1496062

8

Henüz konuşmamış iki IP arasında ağ üzerinden hızlıca bir mesaj patlatmanız gerekiyorsa, bir UDP en az 3 kat, genellikle 5 kat daha hızlı ulaşacaktır.


1
Referans var mı?
Gerard

8

Sadece işleri netleştireceğim. TCP / UDP iki araba yolda sürülüyor. trafik işaretleri ve engellerin TCP olduğunu varsayalım. Trafik işaretlerini önemsiyor, her şeye saygı duyuyor. Yavaş sürüş çünkü arabada bir şey olabilir. İken UDP sadece çıkarır, tam hız sokak işaretlerine saygı. Hiçbir şey, deli bir sürücü. UDP'nin hata kurtarma özelliği yok, Bir engel varsa, onunla çarpışacak ve devam edecek. TCP , tüm paketlerin mükemmel bir şekilde gönderildiğinden ve alındığından emin olurken , Hata yok, bu yüzden araba çarpışmadan sadece engelleri geçiyor. Umarım bu sizin anlamanız için iyi bir örnektir, Neden Oyunlarda UDP tercih edilir. Oyun hızına ihtiyaç duyar. İndirme işlemlerinde TCP tercih ediliyor veya indirilen dosyalar bozulmuş olabilir.


7

UDP tecrübelerime göre biraz daha hızlı, ama çok fazla değil. Seçim performansta değil mesaj içeriği ve sıkıştırma tekniklerinde yapılmalıdır.

İleti alışverişi içeren bir protokolse , TCP ile aldığınız çok küçük performansın buna değdiğini öneriyorum. Size ihtiyacınız olan her şeyi verecek iki uç nokta arasında bir bağlantı verilir. Yaptığınız şeyden gerçekten, gerçekten emin değilseniz, UDP'nin üstünde kendi güvenilir iki yönlü protokolünüzü üretmeye çalışmayın.


5

TCP'nin genellikle birden çok iletiyi kabloda tuttuğunu unutmayın. Bunu UDP'de uygulamak istiyorsanız, güvenilir bir şekilde yapmak istiyorsanız çok fazla işiniz olacak. Çözümünüz ya daha az güvenilir, daha az hızlı ya da inanılmaz bir iş olacak. UDP'nin geçerli uygulamaları var, ancak bu soruyu soruyorsanız, muhtemelen sizin değil.


5

Programlayıcının her iki dünyanın da yararına olmasını sağlamak için bazı çalışmalar yapılmıştır.

SCTP

Bağımsız bir aktarım katmanı protokolüdür, ancak UDP üzerinden ek katman sağlayan bir kütüphane olarak kullanılabilir. Temel iletişim birimi bir mesajdır (bir veya daha fazla UDP paketine eşlenir). Dahili tıkanıklık kontrolü var. Protokolün açılması için topuzlar ve döndürücüler var

  • mesajların teslimi için
  • kullanıcı tanımlı parametrelerle kayıp mesajların otomatik olarak yeniden iletimi

kendi uygulamanız için bunlardan herhangi biri gerekiyorsa.

Bununla ilgili bir sorun, bağlantı kuruluşunun karmaşık (ve dolayısıyla yavaş bir süreç) olmasıdır

Diğer benzer şeyler

Bir tane daha benzer tescilli deneysel şey

Bu ayrıca TCP'nin üçlü yolunda el sıkışmasını iyileştirmeye ve hızlı hatlarla daha iyi başa çıkmak için tıkanıklık kontrolünü değiştirmeye çalışır.


3

Ağ durumunu dikkate almadan TCP veya UDP hakkında konuşmak anlamsızdır. İki nokta arasındaki ağın kalitesi çok yüksekse, UDP TCP'den kesinlikle daha hızlıdır, ancak GPRS ağı gibi başka bir durumda TCP, UDP'den daha hızlı ve daha güvenilir olabilir.


1

Ağ kurulumu herhangi bir ölçüm için çok önemlidir. Yerel makinenizdeki soketlerle veya dünyanın diğer ucuyla iletişim kuruyorsanız, büyük bir fark yaratır.

Tartışmaya eklemek istediğim üç şey:

  1. Burada bulabilirsiniz oyun geliştirme bağlamında TCP ve UDP hakkında çok iyi bir makale .
  2. Ayrıca, iperf ( jperf bir GUI ile Iperf geliştirmek) da ölçerek soruya cevap için çok güzel bir araçtır.
  3. Python'da bir kıyaslama yaptım ( bu SO sorusuna bakın ). Ortalama 10 ^ 6 tekrarlama 8 bayt gönderme farkı UDP için yaklaşık 1-2 mikrosaniyedir.

1
Karşılaştırmayı gerçek dünyadaki Internet ile alakalı hale getirmek için, netem gibi bir paket kaybı simülatörü ile yeniden çalıştırmanız gerekir. Doğru yapıyorsanız (ve 100ms'lik simüle edilmiş RTT ve% 1'lik simüle edilmiş paket kaybı ile), sonuçlar büyük ölçüde farklılık gösterecektir. Kısacası - TCP ve UDP gecikmeleri sıfır paket kaybı için gerçekten aynı olsa da, kaybedilen her paket için A LOT'u farklılaştırmaya başlarlar.
Hata Yok Tavşan
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.