我正在使用IPERF将一些数据包从一台PC发送到另一台PC。在使用IPERF测试MSS(最大片段大小)时观察到以下事项。
发送MSS = 20字节的数据包:
iperf -c 192.168.1.98 -P 1 -i 5 -p 5001 -M 20 -m
我们原以为上面的命令会发送MSS = 20 Bytes和
的数据包
MTU = MSS + 40Bytes = 60字节,但IPERF显示MSS = 36字节(MTU = 76字节)。
我们看到IPERF始终发送的MSS大小比我们指定的小12字节。
这里我应该指出,我发送数据包的PC是Linux机器,而接收这些数据包的PC是Windows机器。我们使用IPERF命令在Linux中生成数据包,而在Windows机器上运行JPERF时,我们会看到有关传入数据包的信息。
另一个重要的事情是,收到我们发送的数据包后,Windows机器上的JPERF说: MSS和MTU大小未知(OS不支持TCP_MAXSEG?)
知道MSS如何/为何减少?
答案 0 :(得分:1)
我不太了解这个MSS和MTU的东西,但在尝试时,我在微软的MSDN网站Path MTU Discovery上看到了以下内容:
“过去,主机的MSS一直是链路层的MTU 减去40个字节的Internet协议(IP)和TCP头,其中 没有使用IP或TCP选项。 [...]
但是,支持Windows 2000,Windows XP和Windows Server 2003 对于其他TCP选项,例如时间戳,增加了 典型的TCP / IP标头为52或更多个八位字节。“
这表明您观察到的12字节差异可能是由于连接的Windows端使用的选项。