TCP协议在进行流量控制时使用的窗口。
窗口的使用基于TCP传输中的字节编号和肯定应答。
TCP通过发送窗口(滑动窗口)让运输的效率提升。
发送方维护一个变量n和base组成了一个起点为base,终点为base+n的分组区域,发送方可以依次发送数量为n的分组到网络中,并等待来自接收方的肯定应答,当收到的肯定应答的编号等于base时,base才会相应的+1,在n不变的情况下,base增加类似窗口整体下移。n的取值则必须小于等于所有分组数量的1/2。
与单分组相比,发送窗口的存在保证发送方可以以较高的效率向网络推送字节,增加流量。
TCP通过让发送方维护一个称为“接收窗口”(receive Window)的变量提供流量控制,因为TCP是全双工通信,所以两边都是发送方和接收方,接收窗口的值由接收方计算得出,由发送方接收并控制流量。
接收方会定义两个变量用来计算发送窗口的值:
LastByteRead:这个表示接收方进程从缓存读出的数据流的最后一个字节的编号。
LastByteRecv:这个表示接收方从网络中存入缓存的最后一个字节的编号。
接收方的缓存大小为RecvBuffer
接收方的接收窗口rwnd = RecvBuffer - [LastByteRecv - LastByteRead],初始值为RecvBuffer.
发送方则对应的维护两个变量:
LastByteSent:最后一个发送到网络中的字节的序号。
LastByteAcked:最后一个从网络中接收到成功应答的字节的编号。
发送方使用接收窗口进行流量控制的方法:
保证:LastByteSent - LastByteAcked <= rwnd;
当rwnd为0时表示接收窗口满了,发送方继续发送只有一个字节的报文段,这些报文段会被接收方确认,并在接收方缓存清空后回复一个非0的rwnd值,提示发送方可以继续发送了。
接收窗口的存在使发送方不会发送大于接收方剩余缓存的报文段进入网络。
TCP使用拥塞窗口进行拥塞控制。
拥塞窗口(congestion window)是由发送方计算得出,用来限制发送方发送速率的变量,简称cwnd.
发送方的发送速率大概是cwnd/RTT 字节/秒。
在TCP传输字节流的过程中,TCP发送方会按照cwnd的数值对发送方向网络推入字节的速率进行实时控制,cwnd的值是动态改变的。