【问题标题】:How can I turn on IPCOMP for a socket?如何为套接字打开 IPCOMP?
【发布时间】: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 个有效负载字节。

标签: linux tcp


【解决方案1】:

我过去曾玩过 IP xfrm,但从未尝试过 comp 选项。如果您希望压缩所有传出流量,则可以使用类似的方法。

ip xfrm policy add dev eth0 dir out tmpl proto comp

【讨论】:

    猜你喜欢
    • 2013-10-25
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    相关资源
    最近更新 更多