如何在Linux上设置最大TCP最大段大小?

Eri*_*ric 7 linux qos tcp

在Linux中,如何设置TCP连接上允许的最大段大小?我需要为我没写的应用程序设置它(所以我不能用setsockopt它来做).我需要将此设置为网络堆栈中的mtu.

我有两个流共享相同的网络连接.一个周期性地发送小数据包,这需要绝对最小延迟.另一个发送大量数据 - 我正在使用SCP来模拟该链接.

我已设置流量控制(tc)以使最小延迟流量具有高优先级.但是,我遇到的问题是,从SCP下来的TCP数据包最终会出现64K字节的大小.是的,这些基于mtu被分成更小的数据包,但遗憾的是,在tc对数据包进行优先级排序之后.因此,我的低延迟数据包被卡在高达64K字节的SCP流量后面.

本文指出在Windows上您可以设置此值.

我可以在Linux上设置一些东西吗?我尝试过ip route和iptables,但这些在网络堆栈中应用得太低了.我需要在tc之前限制TCP数据包大小,因此它可以适当地优先处理高优先级数据包.

Cit*_*enB 7

您是否正在使用tcp分段卸载到nic?(您可以使用"ethtool -k $ your_network_device"来查看卸载设置.)据我所知,这是唯一的方法,您可以看到设备MTU为1500的64k tcp数据包.不是这个回答了问题,但是它可能有助于避免误诊.


ras*_*hok 6

ip route带选项的命令advmss有助于设置MSS值。

ip route add 192.168.1.0/24 dev eth0 advmss 1500
Run Code Online (Sandbox Code Playgroud)


caf*_*caf 3

通告的 TCP MSS 的上限是第一跳路由的 MTU。如果您看到 64k 段,这往往表明第一跳路由 MTU 太大 - 您是否使用环回或其他东西进行测试?