TCP MSS trong Linux phải có ít nhất 88 (bao gồm / net / tcp.h):
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
Câu hỏi của tôi là: họ đã nghĩ ra "60 + 60 + 8" ở đâu và tại sao? Tôi nhận được rằng 20 + 20 đến từ tiêu đề IP + tiêu đề TCP.
EDIT: Sau khi xem xét kỹ hơn các tiêu đề, công thức tìm kiếm cho tôi như thế này:
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
Câu hỏi vẫn còn: tại sao ? Tại sao nhân Linux sử dụng công thức này, do đó cấm (một luồng bắt buộc) các phân đoạn TCP, ví dụ, 20 byte? Hãy suy nghĩ iperf ở đây.
EDIT2: Đây là trường hợp sử dụng của tôi. Bằng cách buộc MSS thấp trên ổ cắm / kết nối, tất cả các gói được gửi bởi ngăn xếp sẽ có kích thước nhỏ. Tôi muốn đặt MSS thấp khi làm việc với iperf để kiểm tra gói / giây. Tôi không thể nhận các gói IP nhỏ hơn 128 byte (khung Ethernet là 142 byte) vì giới hạn thấp hơn cho MSS! Tôi muốn có kích thước khung hình Ethernet gần 64 byte theo RFC 2544. Về mặt lý thuyết điều này có thể xảy ra: 18 + 20 + 20 <64.
TCP_MIN_MSS
.
TCP_MIN_MSS
. Tại sao nó không thể là 1? RFC sẽ phá vỡ cái gì? Những gì lý thuyết / vấn đề thực tế nó sẽ gây ra? Bạn có chắc chắn đó là "bên ngoài thông số kỹ thuật"? "Cực tiểu khác nhau"? Chỉ có một lợi ích tối thiểu ở đây: MSS nhỏ nhất được cho phép bởi kernel.