Linux의 TCP MSS는 88 이상이어야합니다 (include / net / tcp.h).
/* Minimal accepted MSS. It is (60+60+8) - (20+20). */
#define TCP_MIN_MSS 88U
내 질문은 : "60 + 60 + 8"은 어디에서 나타 났으며 왜 그런가? 20 + 20은 IP 헤더 + TCP 헤더에서 나옵니다.
편집 : 헤더를 자세히 살펴보면 수식이 다음과 같이 보입니다.
(MAX_IP_HDR + MAX_TCP_HDR + MIN_IP_FRAG) - (MIN_IP_HDR + MIN_TCP_HDR)
문제는 여전히 서 있습니다. 왜 ? Linux 커널이 왜이 공식을 사용하여 20 바이트의 TCP 세그먼트 (강제 흐름)를 금지합니까? 여기 iperf를 생각하십시오.
EDIT2 : 여기 내 유스 케이스가 있습니다. 소켓 / 연결에서 낮은 MSS를 강제 실행 하면 스택에서 전송 된 모든 패킷의 크기가 작아집니다. 패킷 / 초 테스트를 위해 iperf를 사용할 때 낮은 MSS를 설정하고 싶습니다. MSS에 대한이 하한 때문에 와이어에서 128 바이트 (이더넷 프레임 142 바이트)보다 작은 IP 패킷을 얻을 수 없습니다! RFC 2544에 따라 64 바이트의 이더넷 프레임 크기에 가까워지고 싶습니다. 이론적으로 이것은 18 + 20 + 20 <64입니다.
TCP_MIN_MSS
.
TCP_MIN_MSS
. 왜 1이 될 수 없습니까? 어떤 RFC가 중단됩니까? 어떤 이론적 / 실제적인 문제가 발생합니까? "스펙 외부"인지 확실합니까? "다른 최소"? 여기에는 최소한 한 가지 관심이 있습니다 : 커널이 허용하는 가장 작은 MSS.