2

我正在使用 IPERF 将一些数据包从一台 PC 发送到另一台 PC。在使用 IPERF 测试 MSS(最大段大小)时观察到以下情况。

发送 MSS = 20 字节的数据包:

iperf -c 192.168.1.98 -P 1 -i 5 -p 5001 -M 20 -m

我们预计上述命令将发送 MSS = 20 字节和
MTU = MSS + 40 字节 = 60 字节的数据包,但 IPERF 显示 MSS = 36 字节(MTU = 76 字节)。

我们看到 IPERF 总是发送大小比我们指定的少 12 字节的 MSS。

在这里我应该指出,我发送数据包的 PC 是一台 Linux 机器,而接收这些数据包的电脑是 Windows 机器。我们在 Linux 中使用 IPERF 命令生成数据包,而在 Windows 上,JPERF 正在运行,我们可以看到有关传入数据包的信息。

另一个重要的事情是,Windows 机器上的 JPERF 在收到我们发送的数据包后,显示如下: MSS 和 MTU 大小未知(操作系统不支持 TCP_MAXSEG?)

知道如何/为什么减少 MSS 吗?

4

1 回答 1

1

我不太了解这个 MSS 和 MTU 的东西,但是在尝试时,我从Microsoft 的 MSDN 站点上的Path MTU Discovery中发现了以下内容:

“过去,主机的 MSS 是链路层的 MTU 减去 Internet 协议 (IP) 和 TCP 标头的 40 个字节,其中没有使用 IP 或 TCP 选项。[...]

但是,Windows 2000、Windows XP 和 Windows Server 2003 对附加 TCP 选项(例如时间戳)的支持已将典型的 TCP/IP 标头增加到 52 个或更多八位字节。”

这表明您观察到的 12 字节差异可能是由于连接的 Windows 端使用的选项造成的。

于 2011-11-03T12:42:17.837 回答