我想知道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相当于以下设置:
对于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)的默认发送和接收窗口大小,
任何人有更多的知识,欢迎纠正我:)