net.core.rmem_max 和 net.ipv4.tcp_rmem 的区别

byd*_*sky 15 linux tcp linux-networking linux-kernel

net.core.rmem_max 和 net.ipv4.tcp_rmem 的第三个值有什么区别?哪个对 tcp 连接具有更高的优先级?

对于以下两个示例,tcp 连接的最大缓冲区是多少?

Case 1:
sysctl -w net.core.rmem_max=7388608
sysctl -w net.ipv4.tcp_rmem='4096 87380 8388608'

Case 2:
sysctl -w net.core.rmem_max=8388608
sysctl -w net.ipv4.tcp_rmem='4096 87380 7388608'
Run Code Online (Sandbox Code Playgroud)

Nil*_*ils 5

核心是整体最大接收缓冲区,而 tcp 仅与该协议有关。

至于优先级问题: tcp-setting 似乎会优先于 common max 设置,这有点令人困惑。设置 max 对当前的 tcp 设置没有影响(刚刚在 CentOS 5 上测试过)。

更正确的描述应该是:default_max - 但这可能太长了。

  • 您的解释是有道理的,但这与 `man tcp` 关于 `tcp_rmem` 最大值的说法相冲突:`每个 TCP 套接字使用的接收缓冲区的最大大小。此值不会覆盖全局 net.core.rmem_max` - 另请参阅http://stackoverflow.com/questions/31546835/tcp-receiving-window-size-higher-than-net-core-rmem-max。“man tcp”有错吗? (3认同)
  • @Nils,简单地读取值不会告诉您一个值是否覆盖了另一个值——您必须实际尝试获得一个超过 net.core.[wmem/rmem]_max 缓冲区的 TCP 缓冲区,以便测试这种覆盖。 (3认同)
  • 你具体是如何测试的? (2认同)