关于这些东西: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)) 指定的两倍。