如何为套接字打开IPCOMP?

16

由于某些原因,我们的系统使用非常小的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? - Mike Pennington
1
我相信你可以使用ip xfrm stateip xfrm policy来实现,但我还没有尝试过。OpenBSD使用sysctl标志,但在Linux中,我认为必须使用IPSec或直接使用xfrm。 - Appleman1234
2
TCP和IP协议的最小头大小均为20,因此您不需要具有超过40字节的开销。此外,您可以将较大的TCP/IP数据包_分段_,使得每个片段都有一个IP头(每个网络数据包仅有20字节的开销),只有第一个片段包含TCP开销。当然,这需要分段/重组逻辑(规范要求但有时被嵌入式系统省略)并且在面对数据包丢失时存在问题。使用此方法,您可以拥有第一和附加网络数据包分别为88和108有效载荷字节。 - Brian White
你使用的是什么操作系统?我认为这可能不是很有用。通常情况下,IPComp在IPSEC上下文中使用,并且其创建者建议不要使用它。IPComp头将向IP负载添加4个字节。此外,您应该考虑负载的性质(长度、可压缩性等)。如果您的系统支持IPComp,则可能也支持IP分段,并且在我看来这是更好的选择。 - Nikolai
你真的需要TCP吗?你的需求是什么?也许使用UDP或通过原始套接字使用自定义协议会更容易。 - flotto
显示剩余2条评论
1个回答

3

我以前尝试过使用IP xfrm,但从未尝试过comp选项。如果您想要压缩所有出站流量,可以使用以下方法:


ip xfrm policy add dev eth0 dir out tmpl proto comp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接