概念
TCP协议中的window,用于向对端发送自己的TCP接收消息的缓冲区大小。其作用为引导对方在必要的时候调整数据发送的速度,以便本地可以的处理缓冲区的消息,防止缓冲区被填满,从而产生无效的消息传输。
例子
在TCP两端进行数据传输的过程中,会不断更新自己的window,从而实现流量控制的目的。一个形象的例子为TCP两端通过一根水管(TCP 连接)连接,两端各有一个水桶(接收缓冲区)用来接收对端流过来的水(发送的数据)。而window就用来表示当前水桶剩余的空闲容量(剩余的接收缓冲区大小)。如果window过小,对端就会减少发送水流(数据)速度,留更多的时间以便水桶中的水被使用(数据被应用使用)。在桶中的水(数据)被消耗后,window变大,再提高水流(发送数据)的速度。
Window scale
window的大小最初被定义为2个byte,最大可以表示65535Byte。随着网络带宽的提高,不能满足大数据量的应用需求。为了提高window大小,并且尽可能的减少对已有应用的影响,TCP协议并没有直接增加window的位数,而是通过Window scale对window进行扩充。在支持Window scale的情况下,实际的window大小(由Calculated window size代表)为windowWindow size scaling factor。最大为655352^14,稍微小于1GB,远高于以前的65535B。
在TCP3次握手的时候,双方会协商是否支持Window scale,如果支持Window scale则在第一个消息(SYN或者SYN,ACK)中携带Window scale Option。只有双方都支持Window scale时,后续双方才会使用Window scale。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。