我需要使用 TCP 通过具有固定非标准 MTU(例如 1560)的子网发送一些数据。
如果帧的长度小于 MTU,则通过该子网传输的所有以太网帧都应手动填充 0。
所以,数据大小应该是
(1560 - sizeof(IP 标头)- sizeof(TCP 标头))。
这就是我要做的方法:
我设置了 TCP_CORK 选项来减少数据碎片。它并不可靠,因为有 200 毫秒的上限,但它可以工作。
我知道 IP 标头的大小(20 字节),因此数据长度应等于(1540 - sizeof( TCP header ))。
那就是问题所在。我不知道 TCP 标头大小。它的“选项”字段的大小是浮动的。
那么,问题来了:如何获取TCP头的大小呢?或者也许有某种方法可以发送带有固定长度标头的 TCP 帧?
从用户应用程序使用 TCP 时尝试控制帧的大小是错误的。您正在错误的抽象级别上工作。这也是不可能的。
您应该做的是考虑用其他东西(UDP?)替换 TCP,或者,不太可能,但可能,重写您的以太网驱动程序以设置非标准 MTU 并进行您需要的填充。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)