gpt4 book ai didi

linux - 在每个套接字的基础上调整 MTU?

转载 作者:可可西里 更新时间:2023-11-01 02:41:52 25 4
gpt4 key购买 nike

我想知道是否有任何方法可以调整(在 Linux 系统上)给定套接字的 MTU。 (使 IP 层分段成比实际设备 MTU 更小的 block )。

当我说对于给定的套接字时,我并不是指在拥有套接字的应用程序代码中以编程方式,而是在外部,例如通过 sysfs 条目。

如果目前没有办法做到这一点,您是否知道在 linux 内核中的何处 Hook /打补丁以实现这种可能性?

谢谢。

编辑:我到底为什么要这么做?

我正在做一些 Layer3-in-Layer4(例如:通过 TCP 隧道隧道 IP 及以上)隧道。与类似 VPN 的解决方案不同,我没有使用虚拟接口(interface)来实现这一点。我正在使用 iptables 捕获数据包,以正常方式丢弃它们并将它们写入隧道套接字。

考虑一个大文件传输的情况,所有数据包都被填充到 MTU 大小。当我对它们进行隧道传输时,我会添加一些开销,导致每个原始数据包都产生两个隧道数据包,这是欠佳的。

最佳答案

如果创建套接字后在传出数据包上设置了 DF,您可能会幸运地欺骗(注入(inject))ICMP 分段需要的消息返回给自己,直到您最终获得所需的 MTU。相当丑陋,但取决于你有多绝望,它可能是合适的。

例如,您可以使用 iptables 规则生成这些数据包,因此匹配和发送很简单并且在您的应用程序外部。看起来 iptables 的 REJECT 目标没有 reject-with of fragmentation 需要,但添加一个可能不会太棘手。

另一种方法,如果它只是您关心的 TCP 数据包,您可能会幸运地使用套接字选项 TCP_MAXSEG 或 TCPMSS 目标(如果这适合您的问题)。

对于 UDP 或原始数据包,您可以自由地send() 数据包,只要您喜欢!

更新:

基于“我为什么要那样做?”回答,如果未设置 DF 或提高 ICMP“需要分段”并丢弃实际上是正确的解决方案,则似乎分段数据包。

这是一个更“正常”的路由器会做的事情,如果防火墙不吃掉 ICMP 数据包,那么它在所有情况下都会表现正常,而回顾性地改变事情是奇怪行为的秘诀。

iptables clamp mss不过,对于通过此“VPN”的 TCP 来说,这是一个很好的解决方案,尤其是当您似乎已经广泛使用 iptables 时。

关于linux - 在每个套接字的基础上调整 MTU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4165403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com