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。