通过PROC信息调节TCP窗口

时间:2020-11-29 00:10:43

关于这些东西:http://man7.org/linux/man-pages/man7/tcp.7.html

 

1, /sys/kernel/ipv4/tcp_rmem_xxx

   这种方式验证过,把值得设置得很大的时候TCP速度有质的提升

2,

/proc/sys/net/core/rmem_default 定义默认的接收窗口大小
/proc/sys/net/core/rmem_max 定义接收窗口的最大大小
/proc/sys/net/core/wmem_default 定义默认的发送窗口大小
/proc/sys/net/core/wmem_max 定义发送窗口的最大大小
/proc/sys/net/ipv4/tcp_window_scaling 启用 RFC 1323 定义的 window scaling;要支持超过 64KB 的窗口,必须启用该值。

 

3, 这个还没弄明白

/proc/sys/net/ipv4/tcp_mem
/proc/sys/net/ipv4/tcp_wmem
/proc/sys/net/ipv4/tcp_rmem

4, 通过setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, sizeof(int)) 设置的recv buf 大小与窗口究竟有什么关系呢?

    recv buf使用默认大小80K时,通告窗口常为18K左右

    recv buf设置为10MB后,通告窗口变成了40K左右

    注:

     1> 通过配置/proc/sys/net/ipv4/tcp_rmem的大小将影响所有创建的socket的rcv buf大小,而

         通过setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, sizeof(int)) 只设置当前socket rcvbuf的大小。

     2> recv buf使用默认大小80K时,通告窗口常为18K左右, recv buf设置为10MB后,通告窗口变成了40K左右

         因为通过setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, sizeof(int)) 设置的buf大小不能超过/proc/sys/net/core/rmem_max指定的大小,

         TCP实际分配的buf大小将是通过setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &buflen, sizeof(int)) 指定的两倍。