如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?

Posted

技术标签:

【中文标题】如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?【英文标题】:How to get maximum TCP Receive/Send window in MAC OS X? 【发布时间】:2011-05-29 08:54:38 【问题描述】:

如何在 MAC OS X 中获取最大 TCP 接收/发送窗口?

Linux 中有两个 ctl。 /proc/sys/net/core/rmem_max - 最大 TCP 接收窗口 (NET_CORE_RMEM_MAX) /proc/sys/net/core/wmem_max - 最大 TCP 发送窗口 (NET_CORE_WMEM_MAX)

但我找不到如何在 mac os 中获取这些参数。

有人知道吗?

我在 MAC OS X 中找到了以下 ctls: net.inet.tcp.recvspace、net.inet.tcp.sendspace、kern.ipc.maxsockbuf

好像recvspace+sendspace 不能大于maxsockbuf。 我在这里读过它: http://www.macgeekery.com/tips/configuration/mac_os_x_network_tuning_guide_revisited

【问题讨论】:

【参考方案1】:

我不能 100% 确定这些是否正确,但请尝试 sysctl -n net.inet.tcp.recvspacesysctl -n net.inet.tcp.sendspace。您可以使用sysctl -w 设置它们(请参阅man sysctl)。

【讨论】:

这些 ctls (net.inet.tcp.recvspace, net.inet.tcp.sendspace) 为我提供了当前用于发送和接收的 tcp 缓冲区大小。我需要知道 recvspace 和 sendspace 的最大值。唯一的想法是:kern.ipc.maxsockbuf IPC 是 InterProcessCommunication 的简写,所以我怀疑是这个。 其实socket api是ipc工具之一。我不确定kern.ipc.maxsockbuf。我在上面提到的文章中读过它。我应该进行一些测试。【参考方案2】:

正如 OP 所说:recvspace+sendspace < maxsockbuf

maxsockbuf 受限于kern.ipc.nmbclustersnmbclusters*2KB/16=maxsockbuf

sysctl -a | egrep nmbcl\|maxsockb
kern.ipc.maxsockbuf: 8388608
kern.ipc.nmbclusters: 65536

要增加maxsockbuf,告诉系统使用超过 默认mbufclusters 通过 ncl 引导参数:(您需要在编辑引导参数之前禁用 SIP)

nvram boot-args="ncl=131072"
shutdown -r now

引用here

【讨论】:

以上是关于如何在 MAC OS X 中获得最大 TCP 接收/发送窗口?的主要内容,如果未能解决你的问题,请参考以下文章

谁在 Mac OS X 上的给定 TCP 端口上监听?

谁在 Mac OS X 上的给定 TCP 端口上监听?

MAC OS X下如何配置TCP_KEEPALIVE

Mac OS X 游戏如何接收低级键盘输入事件?

如何在 C++ 中获得 Mac OS X 中主显示器的分辨率?

我在哪里可以获得 Mac OS X 旧的 SDK?