gpt4 book ai didi

linux - TCP 接收窗口大小高于 net.core.rmem_max

转载 作者:IT王子 更新时间:2023-10-29 00:19:31 28 4
gpt4 key购买 nike

我正在通过 10Gbit 链路连接的两台服务器之间运行 iperf 测量。我正在尝试将我观察到的最大窗口大小与系统配置参数相关联。

特别是,我观察到最大窗口大小为 3 MiB。但是,我在系统文件中找不到相应的值。

通过运行 sysctl -a 我得到以下值:

net.ipv4.tcp_rmem = 4096        87380   6291456
net.core.rmem_max = 212992

第一个值告诉我们最大接收器窗口大小为 6 MiB。但是,TCP 倾向于分配请求大小的两倍,因此最大接收窗口大小应为 3 MiB,正如我测量的那样。来自 man tcp:

Note that TCP actually allocates twice the size of the buffer requested in the setsockopt(2) call, and so a succeeding getsockopt(2) call will not return the same size of buffer as requested in the setsockopt(2) call. TCP uses the extra space for administrative purposes and internal kernel structures, and the /proc file values reflect the larger sizes compared to the actual TCP windows.

但是,第二个值 net.core.rmem_max 声明最大接收器窗口大小不能超过 208 KiB。根据 man tcp,这应该是硬限制:

tcp_rmem max: the maximum size of the receive buffer used by each TCP socket. This value does not override the global net.core.rmem_max. This is not used to limit the size of the receive buffer declared using SO_RCVBUF on a socket.

那么,为什么我观察到最大窗口大小大于 net.core.rmem_max 中指定的大小?

注意:我还计算了带宽延迟乘积:window_size = Bandwidth x RTT 大约为 3 MiB(10 Gbps @ 2 毫秒 RTT),从而验证了我的流量捕获。

最佳答案

出现了一个快速搜索:

https://github.com/torvalds/linux/blob/4e5448a31d73d0e944b7adb9049438a09bc332cb/net/ipv4/tcp_output.c

void tcp_select_initial_window()

if (wscale_ok) {
/* Set window scaling on max possible window
* See RFC1323 for an explanation of the limit to 14
*/
space = max_t(u32, sysctl_tcp_rmem[2], sysctl_rmem_max);
space = min_t(u32, space, *window_clamp);
while (space > 65535 && (*rcv_wscale) < 14) {
space >>= 1;
(*rcv_wscale)++;
}
}

max_t 取参数的较高值。因此,此处较大的值优先。

另一个对 sysctl_rmem_max 的引用是在它用于将参数限制为 SO_RCVBUF 的地方(在 net/core/sock.c 中)。

所有其他 tcp 代码仅引用 sysctl_tcp_rmem

因此,无需深入研究代码,您就可以得出结论,更大的 net.ipv4.tcp_rmem 在所有情况下都会覆盖 net.core.rmem_max,除非设置 SO_RCVBUF(可以使用 SO_RCVBUFFORCE 绕过其检查)

关于linux - TCP 接收窗口大小高于 net.core.rmem_max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31546835/

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