OpenVPN的sndbuf和rcvbuf

我想知道OpenVPN和net.core.w / rmem_default或net.ipv4.tcp_r / wmem使用的sndbuf和rcvbuf缓冲区有什么区别。

当configuration中为这些参数提供了一些值时,OpenVPN会做什么? 我读过,如果你使用0,它使用操作系统的默认缓冲区大小,但从哪个缓冲区大小? 或者它是一个额外的图层,当你把它设置为0这个额外的布局消失?

我的问题是,当我将sndbuf和rcvbuf设置为0,并将net.core.w / rmem_default或net.ipv4.tcp_r / wmem设置为64k时,我期望与sndbuf和rcvbuf未设置相同的吞吐量,因为默认值为sndbuf和rvbuf是64k

不幸的是,使用OS缓冲区的情况并非如此,吞吐量较低。

这可能是因为我没有设置正确的OS缓冲区,或者使用sndbuf和rcvbuf时,OpenVPN做了一些特殊的事情。

如果有人能详细解释,我会很感激

谢谢

ALO

—————————————–

经过一番研究,我发现OpenVPN使用setsockopt在configuration文件中使用sndbuf和rcvbuf值来设置SO_SNDBUF和SO_RCVBUF的值。 这只会影响OpenVPN创build的套接字,而不会影响所有的TCP / UDP套接字。

SO_SNDBUF和SO_RCVBUF相当于以下设置:

  • 的/ proc / SYS /网/核心/ rmem_max
  • 的/ proc / SYS /网/核心/ wmem_max
  • /proc/sys/net/net.ipv4/tcp_rmem
  • 的/ proc / SYS /网/网/的IPv4 / tcp_wmem

对于openvpn(tcp或udp)使用的协议(可能是_default,而不是_max,我仍然不确定)。

使用setsockopt()手动调整套接字缓冲区大小会禁用TCP自动调整。 (可能不是真的)

关于TCP受r / wmem_default缓冲区大小的影响,我发现两个答案相反:

  • 您不需要调整rmem_default或wmem_default(至less不用于TCP调整)。 这些是非TCP套接字(例如unix域和UDP套接字)的默认缓冲区大小。

  • wmem_default和wmem_max这些设置是修复所有networkingstream量(UDP和TCP)的默认发送和接收窗口大小,

任何人有更多的知识,欢迎纠正我:)