为了完成流量控制,TCP使用滑动窗口协议,使用这种方法的时候,发送方和接收方向外通信各使用一个窗口。这个窗口覆盖了缓存的一部分,在缓存中的字节是从应用进程传送来的,在这个窗口中的字节就是可以发送而不必考虑确认的。这个想象的窗口有两个边沿:一个在左,一个在右。这个窗口叫做滑动窗口,因为左沿和右沿都可以滑动。
SWS(发送窗口大小):Send Window Size
LAR(最近接收到的确认帧):Last Acknowledegement Received
LFS(最近发送的帧):Last Frame Sent
LFS-LAR≤SWS
窗口大小取决于下面两个数中的较小值:接收窗口(rwnd)和拥塞窗口(cwnd)。接收窗口是由对方发送的包含确认的报文段中所给出的值,这是另一端在缓存溢出和数据被丢失之前所能接受的字节数。拥塞窗口是由网络为避免拥塞而确定的值。
右沿窗口向右移动表示展开窗口,说明允许从缓存中发送更多新的字节;
左沿窗口向右移动表示合拢窗口,说明某些字节已经被确认了,发送端不必再担心它们。
1. TCP协议的两端分别为发送者A和接收者B,由于是全双工协议,因此A和B应该分别维护着一个独立的发送缓冲区和接收缓冲区,由于对等性(A发B收和B发A收),我们以A发送B接收的情况作为例子;
2. 发送窗口是发送缓存中的一部分,是可以被TCP协议发送的那部分,其实应用层需要发送的所有数据都被放进了发送者的发送缓冲区;
3. 发送窗口中相关的有四个概念:已发送并收到确认的数据(不再发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之中)、允许发送但尚未发送的数据以及发送窗口外发送缓冲区内暂时不允许发送的数据;
4. 每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送。