Tôi có một ứng dụng đọc Java đọc từ một ổ cắm đa hướng trên nền tảng Linux 64 bit (2.6.18). Kích thước ổ cắm đã được đặt thành 2 MB. Khi người đọc không thể đọc đủ nhanh ổ cắm "tràn", tức là các gói tin bị loại bỏ khỏi bộ đệm.Làm thế nào để tràn bộ đệm ổ cắm Linux?
Điều tôi muốn biết là hạt nhân Linux sẽ loại bỏ các gói dữ liệu ra khỏi bộ đệm socket như thế nào. Tôi giả định rằng bộ đệm ổ cắm chính nó là một bộ đệm FIFO. Tuy nhiên, nếu nó đầy những gì sẽ xảy ra? Gói tiếp theo có bị loại bỏ (và nội dung bộ đệm không thay đổi) không? Hay gói tin mới sẽ thay thế một gói cũ trong bộ đệm? Nếu có, gói nào (cũ nhất ?, trẻ nhất ?, một gói được chọn ngẫu nhiên?)?
Cảm ơn mọi thông tin chi tiết.
Cảm ơn bạn. Bạn có một liên kết/nguồn mà sao lại tuyên bố này? – AtomicJake
@AtomicJake: đây là một thực hành tiêu chuẩn về thiết kế mạng. Hoặc: hệ điều hành khác có thể làm gì? IIRC khi bộ đệm ổ cắm đầy đủ TCP stack đặt kích thước cửa sổ thành 0. Tất cả các gói dữ liệu đến trong tiểu bang sẽ được coi là không hợp lệ (không vừa với cửa sổ) và do đó bị loại bỏ. Đọc RFC793, tìm "cửa sổ nhận". – Dummy00001
Bạn phù hợp với TCP, nhưng tôi đã yêu cầu cụ thể cho một ổ cắm đọc Multicast UDP. Theo như tôi biết mỗi gói tin gửi đến từ mạng được sao chép trong một bộ đệm ổ cắm độc lập (một bộ đệm cho mỗi đầu đọc). Các ổ cắm do đó làm trống bởi mỗi người đọc ở một tốc độ khác nhau. Trên Linux, khi một bộ đệm đầy, một gói mới đơn giản là bị loại bỏ - hoặc (như trong bộ đệm vòng) sẽ ghi đè mục nhập cũ nhất? Tôi cho rằng cả hai triển khai đều hợp pháp. – AtomicJake