TCP滑动窗口和SO_RCVBUF之间的实际关系
2011-01-21 10:14
330 查看
上次转载了一篇文章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设置的比上一次小的话,该值是不会作为新窗口大小通告给对方的。
上面提到了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接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系
- 关于TCP超时重传、快速重传、慢启动、拥塞避免、拥塞发生、快速恢复、滑动窗口之间的关系概括
- TCP接收/发送滑动窗口与内核接收/发送缓冲区之间的关系
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- TCP滑动窗口和socket缓冲区之间的关系(记录)
- 网络编程--Socket、TCP/IP、UDP、Http之间的关系
- TCP的SO_RCVBUF与SO_SNDBUF的作用与意义
- TCP/IP详解--滑动窗口与内核缓冲区之间的关系
- 关于百度指数和实际搜索量之间关系的调查
- SOCKET,TCP/UDP,HTTP,FTP网络协议之间的关系
- 【转】TCP层的分段和IP层的分片之间的关系 MTU和MSS存在的关系