UDP'nin genellikle yüksek veri kullanımına sahip gerçek zamanlı çok oyunculu oyunlar için önerildiğini biliyorum
UDP hala hız ve gecikme açısından üstün mü? Son TCP optimizasyonları TCP'nin UDP'den daha iyi performans göstermesini sağlayabilir mi?
Varsayımların yanlış. TCP ve UDP temel olarak temsil ettikleri modelde farklılık gösterir (sıralı güvenilir sanal akışa karşı güvenilmez datagramlar).
Hacim ("yüksek veri kullanımı") veya verim açısından farklılık göstermezler. TCP, UDP kadar çok veriyi zorlayacak, fiziksel kabloyu kolayca doyuracak.
Paket kaybının varlığında, ikisi gecikme açısından farklılık gösterir , ancak yalnızca bu durumda. Aksi takdirde, TCP UDP kadar düşük gecikme süresine sahiptir (ağ yığını yapmak için biraz daha fazla mantık içerdiği için belki birkaç düzine nanosaniye veriniz veya alınız, ancak bu oldukça ihmal edilebilir).
Başlık boyutunda küçük bir fark vardır, bu yüzden teknik olarak, daha fazla bayt, seri hatlarda kablo üzerinden yapılmalıdır, ancak bu da oldukça önemsizdir. Sadece toplu transferler için gerçekten önemli ve% 0.5'lik bir farkla ilgili. Evde DSL internet erişimine sahip çoğu kişi, tüm trafiklerini% 10'luk protokol ek yükü ekleyen (48 baytlık yük için 5 kontrol baytı, ayrıca kısmi çerçeveler) ve hatta hiç kimse farketmeden ATM üzerinden yönlendirmektedir.
Bazı insanlar UDP'nin güvenilirliğini arttırıyor. Güvenilirlik bazı düzeyi arzu edilmektedir, ancak sıkı in-order kurtuluş gerekli değilse, o olabilir küçük bir avantaj sağlar. Ancak, yaklaşımın çok anlamlı olup olmadığı hala tartışmalıdır ve bu küçük avantaj için ağır bir bedel ödersiniz.
Otel WiFis veya diğer "garip" yerlerden bağlantı sağlayan müşterileriniz varsa, genellikle TCP için genel desteğin UDP'den çok daha iyi olduğunu fark edeceksiniz.
Oyunlar genellikle UDP'yi kullanmaz, çünkü yukarıda belirtilen yöntemlerden biri üstündür - öyle değildir - ya da siparişi vermeden güvenilirlik uygulayarak jitteri yarım milisaniyeyi azaltabilirsin çünkü oyunlar (IP telefonu gibi) genellikle konum güncellemeleri gibi çok fazla değişken veri içerir.
Bu geçici veriler, hem zaman geçtikten sonra, hem de bir sonraki datagram tarafından düzenli olarak ve hızla kullanılmazlar. Bu,% 100 güvenilir (veya sıralı) olmaktan çok fazla umrumda değil, hiçbir şeyden başka bir şey ifade etmez.
Bir ağ paketinin sürekli bir hızda çalışan bir hizmete düştüğünü varsayarak (shooter oyunu, telefon, video sohbeti) sık sık yapılan güncellemelerle bir paketin düşürüldüğünü kabul etmek, zaman aşımına uğramak ve paketi yeniden göndermek için çok fazla anlam ifade etmiyor. yeniden gönderilen paketin gelmesini beklerken diğer ucundaki her şeyi dondurun. Bu çok rahatsız edici ve iyi değil.
Bunun yerine, sadece bir paketin kullanıcıdan kaybedildiğini gerçeğini gizleyerek, paketin kaybolduğunu ve devam ettiğini, verilerini bir sonraki paketten geçirip verdiğini ve kabiliyetinizin en iyi şekilde olduğunu düşünün. İnterpolasyon, ölü hesaplaşma, siz adlandırın.
Paket kaybının normal bir durum olduğuna dikkat edin. IP genellikle "oldukça güvenilir" olsa da, zaman zaman atılan paketler gerçekleşebilir ve gerçekleşecek . Paketlerin kaybedilmesi normalde ender tarafta olsa da (burada <% 1), sıra dışı veya teorik bir şey değil, bir şeyin kırıldığının bir göstergesi değildir. Tamamen normal.
Her TCP toplu aktarımı mutlaka kayıp paketler içerecektir, örneğin (tıkanıklık kontrolünün nasıl çalıştığı).