【发布时间】:2011-10-21 08:35:45
【问题描述】:
由于我无法详述的原因,我们的系统使用了非常小的 MTU(128 字节)。这些嵌入式设备位于完全独立的网络上,因此无法访问互联网或与其他设备交互。
显然,TCP 占用每个数据包 66 个字节,留给有效负载的空间并不多。
经过一番谷歌搜索,我发现了 IPCOMP,它看起来可能有助于减少网络上的流量。
我的问题是如何启用它?是否有setsockopt,或者我需要一个特殊的驱动程序?
我见过的唯一例子是:
socket(PF_INET, SOCK_RAW, IPPROTO_COMP)
但这意味着我需要手动创建 IP/TCP/payload。
任何人都有这方面的经验。
编辑:也许更好的方法是在此连接上启用 cslip 或 ppp。我可以找到有关在串行端口(用于拨号调制解调器)上启用 PPP 的教程,但没有在以太网上启用 PPP 的教程。
我看过有关 PPPoE 的文章,但这似乎增加了负载而不是减少了负载。
有人可以帮忙吗?
【问题讨论】:
-
我很好奇,是 IP MTU 128,还是以太网 MTU?
-
以太网 MTU 为 128。
-
我相信你可以使用
ip xfrm state和ip xfrm policy做到这一点,但我还没有尝试过。 OpenBSD 使用 sysctl 标志,但在 Linux 中我认为必须使用 IPSec 或必须直接使用 xfrm。 -
还有更多细节吗?所有设备都在运行linux?而TCP对于设备之间的互连真的有必要吗?
-
TCP 和 IP 的最小标头大小均为 20,因此您不需要超过 40 字节的开销。此外,您可以分段 较大的 TCP/IP 数据包,以便每个片段都有一个 IP 标头(意味着每个网络数据包只有 20 个字节的开销),只有第一个包含 TCP 开销。当然,这需要片段/重组逻辑(规范要求,但有时嵌入式系统会省略),并且在丢包方面存在问题。有了这个,第一个和附加的网络数据包分别有 88 和 108 个有效负载字节。