TCP滑动窗口和SO_RCVBUF之间的实际关系
2013-06-18 20:01
169 查看
上次转载了一篇文章http://blog.csdn.net/jwybobo2007/archive/2010/12/30/6107419.aspx, 上面提到了TCP窗口大小与SO_RCVBUF选项之间的关系.但其实这篇文章描述的是有问题的.
在以Unix为核心的一些操作系统中(不一定都是),SO_RCVBUF选项确实决定了TCP窗口的大小.你设置为多少窗口就为多少.但在Windows上确并非如此,通过一些抓包工具分析后,你会发现这两者并不是一一对应关系,MSDN的说明上确实也告知这一事实.
如使用Windows2003作服务器时,它的SO_RCVBUF在默认不设置的条件下为8192,但是握手时告知的窗口大小为16384,而后在正式的数据通信中又马上通知对方自己的窗口大小为65535.
上面谈的只是一个问题,还有关于设置SO_RCVBUF的时机描述也有问题.服务端在accept前设置了缓冲区后可以向下继承,同样客户端connect前设置缓冲区大小可以在握手时通告窗口(上面说的Windows下的窗口和该设置关系不大,但通过测试还是有一定关系的),但实际上是可以随时设置 的(主要指的是Windows下面,其它系统不一定可以),一但设置后,会随着下一个ACK包,或者普通数据包通告给对方最新的TCP窗口大小,需要注意的是此时窗口只能增大,不能减小,也就是说SO_RCVBUF设置的比上一次小的话,该值是不会作为新窗口大小通告给对方的。
在以Unix为核心的一些操作系统中(不一定都是),SO_RCVBUF选项确实决定了TCP窗口的大小.你设置为多少窗口就为多少.但在Windows上确并非如此,通过一些抓包工具分析后,你会发现这两者并不是一一对应关系,MSDN的说明上确实也告知这一事实.
如使用Windows2003作服务器时,它的SO_RCVBUF在默认不设置的条件下为8192,但是握手时告知的窗口大小为16384,而后在正式的数据通信中又马上通知对方自己的窗口大小为65535.
上面谈的只是一个问题,还有关于设置SO_RCVBUF的时机描述也有问题.服务端在accept前设置了缓冲区后可以向下继承,同样客户端connect前设置缓冲区大小可以在握手时通告窗口(上面说的Windows下的窗口和该设置关系不大,但通过测试还是有一定关系的),但实际上是可以随时设置 的(主要指的是Windows下面,其它系统不一定可以),一但设置后,会随着下一个ACK包,或者普通数据包通告给对方最新的TCP窗口大小,需要注意的是此时窗口只能增大,不能减小,也就是说SO_RCVBUF设置的比上一次小的话,该值是不会作为新窗口大小通告给对方的。
相关文章推荐
- TCP滑动窗口和SO_RCVBUF之间的实际关系
- [总结]TCP滑动窗口和SO_RCVBUF之间的关系
- TCP滑动窗口和SO_RCVBUF之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- 关于TCP超时重传、快速重传、慢启动、拥塞避免、拥塞发生、快速恢复、滑动窗口之间的关系概括
- TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- MTU、MSS 与 以太网帧、TCP、IP报文长度之间的关系
- linux网络编程--TCP分包 粘包 MTU 和MSS之间的关系分析
- 理清tcp/ip,tcp,udp,http,ip,socket等之间的关系和作用。
- 面试可能遇到这样的问题 TCP HTTP SOCKET之间的有什么关系
- Python中用encoding声明的文件编码和文件的实际编码之间的关系
- tcp socket发送缓冲区、接受缓冲区、滑动窗口协议之间的关系