UDP soketi kızardı. Sınırlamalar nelerdir? Ne zaman engeller?


0

UDP (video akışı) üzerinden yüksek miktarda veri göndermeyi planlıyorum ve bir arabirimin maksimum yükleme bant genişliğine ulaştığını algılamayı gerektiren bir sistemde düşündüm.

Çıktı verilerini bir sokette yıkarken arabelleğin boşaltılmasını engellediğini biliyorum, ancak soket neden engelleniyor? Yükleme bandından daha fazlasını göndermek bu sınırlamalardan biri mi? Örneğin, bir soket üzerinden anında 100 Kb veri gönderiyorum; 10 Kb / s yükleme hızına sahip olmak, 10 saniye boyunca soket bloğunu yapacak mı? Yoksa başka bir arayüze mi geçecek (diyelim, yönlendirici) ve veriler İnternete gönderilmese bile geri dönecek mi?

UDP hakkında konuştuğumuzu unutmayın, ACK yok.


1
Soket bloke edilmiştir, böylece diğer dişler / işlemler soketle etkileşime giremez ve işlemin ortasındayken durumunu değiştiremez. bir yıkama eşzamansız bir işlem olduğundan, her zaman, floş gerçekleşirken o soketteki başka bir işlemin başlayabilmesi olasılığı vardır, bu da gönderilen verileri bozar. Mutex shoudl, yıkama tamamlandıktan hemen sonra serbest kalır.
Frank Thomas

Yanıtlar:


2

Sunucunuz bant genişliği ve yönlendirici bant genişliği var. Sunucunuz, arabiriminin kablosuna (olabildiğince hızlı veri gönderir) (UDP blokları, sunucudaki soket arabelleği dolduğunda).

Bildiğim kadarıyla, yönlendiriciler arabellekleri dolduğunda fazla paketleri (tam olarak nasıl seçileceğini yönlendiricinin işletim sistemine bağlı olarak) bırakacak. Uygulamanızın kayıp paketlerle doğru bir şekilde başa çıkması veya paket akışını kontrol etmek için bazı mantıklar kullanması gerekir (kayıp paketlerde geri bildirim yoktur - UDP güvenilir değildir ).

SCTP eğer kabul edilebilir bir seçenek ise daha iyi bir alternatif olabilir.


SCTP ile bana yeni bir dünya açtın. Çoklu ana geçişi okudum ve biraz etkilendim. Yani, SCTP kullanarak, cihaz destekleyemiyorsa, verileri her seferinde farklı bir cihazdan otomatik olarak gönderir mi? Yani bir manuel "cihaz seçici" programlamak zorunda değil miyim? Ben sadece send()TCP veya UDP ile yaptığım gibi verileri veriyorum ve gerisini ne yapacak? (Açıkçası bazı konfigürasyonlara ihtiyacı olacak, ama sanırım en az düzeyde).
Jorge Fuentes González

@ JorgeFuentesGonzález, mucizeler beklemem ama SCTP farklı işletim sistemlerinde bir miktar yer edindi, bu yüzden denemeye değer olabilir. Olası mağaraların farkında olamayacak kadar gerçek bir tecrübem var.
kestasx


Evet, bir süre önce bu adama Google + 'dan bir şey önce bir sakıncası yoksa bazı şeyler sormak için bir mesaj gönderdi. Herşey için teşekkürler! :-)
Jorge Fuentes González

0

Bant genişliği siz ve yönlendiriciniz arasında 10Kb / s ise, soket gerçekten bir süre engellenecektir, elektrik sinyallerini "sonraki atlama" cihazına gönderme zamanı. İnternet bağlantınız 10 Kb / s çıkışla sınırlıysa, soketiniz oldukça hızlı bir şekilde serbest bırakılır, ancak yönlendirici bir sonraki eşin kendisi ile ilgilenmek zorunda kalır, bu yüzden sizinki boşalırken soketi meşgul olacaktır.


Bu tamamen doğru değil. TCP için, işletim sistemi bir ACK alana kadar asla kabul edilenden daha fazla veri göndermez. UDP için ACK yok, akış kontrolü yok, gönderme penceresi yok; İşletim sistemi boruya sığabileceği kadar veya aslında CPU'nun işleyebileceği kadar (ekstra paket bırakarak) gönderir.
Aralık'ta

@grawity Yine de, UDP kullanılırken sınırlayıcı faktörlerden biri bant genişliğidir ve 10 Kb / s ile sınırlandırılmışsa soketi daha az, iyi kullanılabilir hale getirmelidir. TBH Ben esas olarak iş yerinde üzerinde çalıştığım belirli bir BSD dağıtımında bu davranışla karşılaştım, her şey için geçerli olmayabilir. "Tamamen doğru değil" kısmı hakkında, UDP'ye mi gönderme yaptınız? Hafızam beni yanıltmıyorsa, bir uzak ana OLABİLİR yapamıyor, ICMP ulaşılamaz bir UDP paket cevap?
NaeiKinDus

Evet, ancak bu bir hata durumu, gönderenin TCP ACK'ların aksine beklemesi beklenmiyor .
Gravity

Söylemek istediğim şeyin bu olmadığı konusunda hemfikirim. Cevabı daha iyi yansıtacak şekilde değiştireceğim.
NaeiKinDus
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.