Mam program czytający Java, który czyta z gniazda multicast na 64-bitowej platformie Linux (2.6.18). Rozmiar gniazda został ustawiony na 2 MB. Gdy czytnik nie może odczytać wystarczająco szybko, gniazdo "przepełnia się", to jest pakiety są usuwane z bufora.W jaki sposób przepełnienie bufora gniazda Linux?
Chciałbym wiedzieć, w jaki sposób jądro Linuksa usuwa pakiety z bufora gniazda. Zakładam, że sam bufor gniazda jest buforem FIFO. Jeśli jednak jest pełny, co się dzieje? Czy następny pakiet zostanie odrzucony (a zawartość bufora się nie zmieni)? Czy nowy pakiet zastąpi stary pakiet w buforze? Jeśli tak, który pakiet (najstarszy ?, najmłodszy ?, losowo wybrany pakiet?)?
Dzięki za wszelki wgląd.
Dziękuję. Czy masz link/źródło, które popiera to oświadczenie? – AtomicJake
@AtomicJake: jest to standardowa praktyka projektowania sieci. Lub: co jeszcze może zrobić OS? IIRC, gdy bufor gniazda jest pełny Stos TCP ustawia rozmiar okna na 0. Wszystkie przychodzące pakiety w tym stanie będą po prostu uważane za nieprawidłowe (nie pasujące do okna), a zatem odrzucane. Przeczytaj dokument RFC793 i znajdź "okno odbioru". – Dummy00001
Masz rację dla TCP, ale szczególnie prosiłem o gniazdo odczytu multiemisji UDP. O ile mi wiadomo, każdy przychodzący pakiet z sieci jest kopiowany w niezależnym buforze gniazd (jeden bufor na czytnik). Gniazdo jest zatem opróżniane przez każdego czytnika w innym tempie. W systemie Linux, gdy bufor jest pełny, czy nowy pakiet jest po prostu odrzucany - czy (jak w buforze pierścieniowym) zastępuje najstarszy wpis? Zakładam, że obie implementacje są legalne. – AtomicJake