2010-11-12 11 views
21

Podczas korzystania z domyślnego (blokującego) zachowania na gnieździe UDP, w takim przypadku wywołanie sendto() spowoduje blokowanie? Interesuje mnie zasadniczo zachowanie Linuksa.Kiedy wykonuje się blok UDP sendto()?

Dla TCP Rozumiem, że kontrola przeciążenia powoduje zablokowanie wywołania send(), jeśli okno wysyłania jest pełne, ale co z UDP? Czy czasem blokuje lub po prostu pozwala na odrzucanie pakietów na niższych warstwach?

Odpowiedz

14

Może się to zdarzyć, jeśli wypełniłeś swój bufor gniazda, ale jest to bardzo zależny od systemu operacyjnego system operacyjny . Ponieważ UDP nie zapewnia żadnej gwarancji, twój system operacyjny może zdecydować, aby zrobić cokolwiek zechce, gdy bufor gniazda jest pełny: zablokuj lub upuść. Możesz spróbować zwiększyć SO_SNDBUF dla tymczasowej ulgi.

Może to nawet zależeć od precyzyjnego dostrojenia systemu, na przykład może również zależeć od wielkości pierścienia TX w sterowniku interfejsu sieciowego. Jest kilka dyskusji na ten temat w iperf mailing list, ale naprawdę chcesz o tym porozmawiać z deweloperami Twojego systemu operacyjnego.

+1

OK, po twoim linku znalazłem objaśnienie specyficzne dla linuksa w [tym wątku] (http://www.mail-archive.com/[email protected]/msg00113.html).Tak krótka uproszczona odpowiedź: _Linux blokuje sendto na pełnym buforze wysyłającym_. –

+2

OK, ale teraz pytanie jest popychane o krok dalej: pod jakimi warunkami Linux pozwoli na wypełnienie bufora gniazda? (w przeciwieństwie do upuszczania pakietów z niego). Jest to niestety bardzo trudne pytanie. – MarcH

+0

@MarcH, a co powiesz na recv, wyślij, gdy gniazdo się blokuje? Myślę, że w takim przypadku send and recv i tak zablokuje? – Bionix1441

9

Może to być spowodowane tym, że twój system operacyjny próbuje wykonać żądanie ARP w celu uzyskania adresu sprzętowego zdalnego hosta.

Zasadniczo, gdy pakiet wychodzi, nagłówek wymaga adresu IP zdalnego hosta i adresu MAC zdalnego hosta. 192.168.1.34 i AB: 32: 24: 64: F3: 21.

Twoje zachowanie "blokujące" może oznaczać, że ARP działa.

Słyszałem w starszych wersjach systemu Windows (wydaje mi się, że 2k), że pierwszy pakiet zostanie czasami odrzucony, jeśli żądanie trwa zbyt długo i wysyłane są zbyt duże ilości danych. Pakiet serwisowy prawdopodobnie naprawił to od tego czasu.

+0

Ok, dobry element odpowiadający, interesujące; ale interesuję się głównie blokowaniem (lub brakiem blokowania) związanym z przeciążeniem/pełnym buforem. –

+0

Protokół ARP służy tylko do lokalizowania hostów w tej samej podsieci - zazwyczaj na routerze. Wyniki są buforowane dla kolejnych wysyłek. – selbie

+2

Gdy pakiet IP gaśnie, wymaga adresu IP zdalnego hosta, a adres MAC ** następnego skoku ** ... –

Powiązane problemy