linux滑动窗口协商,透彻理解LINUX下TCP的发送缓冲区接收缓冲区与滑动窗口

1.查看内核手册介绍(man 7 socket):

SO_RCVBUF

Sets  or  gets  the maximum socket receive buffer in bytes.  The kernel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and

this doubled value is returned by getsockopt(2).

The default value is set by the /proc/sys/net/core/rmem_default file,  and  the  maximum  allowed  value  is  set  by  the

/proc/sys/net/core/rmem_max file.  The minimum (doubled) value for this option is 256.

SO_SNDBUF

Sets or gets the maximum socket send buffer in bytes.  The kernel doubles this value (to allow space for bookkeeping overhead) when it is set using setsockopt(2), and  this

doubled  value  is  returned  by  getsockopt(2).  The  default  value  is  set  by  the  /proc/sys/net/core/wmem_default  fileand the maximum allowed value is set by the

/proc/sys/net/core/wmem_max file.  The minimum (doubled) value for this option is 2048.

可以看出创建socket时的SO_RECVBUF由/proc/sys/net/core/rmem_default确定,setsockopt设置的是接收缓冲区最大值,并且受  /proc/sys/net/core/wmem_max的限制;

要点:setsockopt是针对socket而言的,设置都会受到/proc/sys/net/core/的限制;

2.对于TCP而言:

net.ipv4.tcp_rmem = 4096 87380 6291456  的 default 值会覆盖net.core.rmem_default,但是其max值(第三项)不会覆盖net.core.rmem_max(同样可以通过man手册查看);即新创建的socket 的默认RCVBUF为83780,使用setsockopt可设置的最大值为net.core.rmem_max;

注意:如果未手动设置RCVBUF,那么再ACCEPT之后会协商调整RCVBUF的大小(在内核中该选项是:

net.ipv4.tcp_moderate_rcvbuf  默认开启,最大值受到到tcp_rmem[2]的限制(eg: net.ipv4.tcp_rmem = 4096 87380 6291456,对这个配置来说就是 6291456) ;当手动使用setsockopt设置后,就不会自动调整;

对于accept接收的套接字,如果在accept之前手动设置过RCVBUF,那么接收到的套接字的RCVBUF大小会继承监听socket RCVBUF的大小;

接收缓冲区与滑动窗口的关系:

接收缓冲区的大小就声明了应用层未读取数据的最大值,是自身滑动窗口可扩展的最大值(虽说不是第一次就告知对方这个值,但在小于这个值时都会告知对方滑动窗口仍有空间存在,直到接收缓冲区满了就会出现Zero Window)。

参考博客:

http://blog.csdn.net/zhangskd/article/details/8200048

http://www.cnblogs.com/tolimit/p/5065761.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值