Linux 在 IPv6 设备上设置 min_rto

Linux 在 IPv6 设备上设置 min_rto

我碰到https://unix.stackexchange.com/questions/210367/changing-the-tcp-rto-value-in-linux这基本上正是我想要的,但我需要使用 IPv6 隧道来实现。

$ sudo ip -6 route
aaaa::/64 dev tun0  proto kernel  metric 256
fe80::/64 dev eth0  proto kernel  metric 256
fe80::/64 dev wlan0  proto kernel  metric 256
fe80::/64 dev tun0  proto kernel  metric 256

然后,如果我查看我的活动连接,我们会看到:

$ ss -i
tcp   ESTAB      0      0                                                                                             aaaa::1:51692

         cubic rto:360 rtt:157.424/6.438 ato:40 mss:64 cwnd:10 send 32.5Kbps pacing_rate 65.0Kbps rcv_space:28800

目前的 rto 为 360。此设备仅处理超低带宽、高延迟、有损网络(即 6LoWPaN)所以我想将 min_rto 增加到至少几秒钟。

我已禁用 frto:

$ sudo cat /proc/sys/net/ipv4/tcp_frto
0

现在我想设置 min_rto,如链接问题所示。

$ sudo ip -6 route change aaaa:: dev tun0 rto_min 2000
RTNETLINK answers: No such file or directory

为什么我会收到此错误?如何修复它?

值得注意的是,如果我执行 2000ms(或 5ms,如链接的答案中所示),它会告诉我这是一个无效值,因此我删除了 ms 部分。如果这很重要,我的 Linux 信息如下:

Linux 4.4.13-v7+ #894 SMP Mon Jun 13 13:13:27 BST 2016 armv7l GNU/Linux

答案1

tcp_*根据 IPv4 下列出的设置也适用于IPv6文档

IPv6 has no global variables such as tcp_*.  tcp_* settings under ipv4/ also
apply to IPv6 [XXX?].

考虑到文档中的问题,在继续之前,最好先验证这是否适用于您的特定(较旧)内核。

相关内容