在TCP首部的格式中,有一个窗口值,它包括发送窗口和接收窗口。发送窗口即发送方一次所能发送的数据大小。若一次发送的数据太小,则效率太低;反之接收方如果不能接受所有数据,就会将其丢弃。因此收发双方在进行数据传输前要协商好所传输的数据大小,可以通过SYN报文来调节。
此外发送方处还有滑动窗口的概念,它的作用如下:原本发送方发送一个数据后要等待接收方的确认后才能发送下一个数据,但这样效率太低,滑动窗口允许发送方在接收到确认之前发送多个数据报文,然后接收方用一个报文来对之前收到的所有报文进行确认。这种确认方法叫捎带确认,即piggyback。这样可以减少网络的流量。
窗口大小为16位,因此一次最多能传输的数据量为65535字节。决定滑动窗口的大小的因素包括网络带宽、可靠性及需要传输的数据量。若窗口大小变为0,则表示发送方不能再发送数据。除了滑动窗口之外,还有一个拥塞窗口,用于进行拥塞控制。拥塞控制的作用是防止过多的数据流入网络。拥塞窗口的工作原理如下:
1.当建立连接时,发送方将拥塞窗口大小初始化微该连接所用的最大的数据包长度值,并随后发送一个最大长度的数据包。
2.若数据报在定时器超时前得到确认,那么发送方将拥塞窗口的大小再增加一个数据包的长度,然后发送两个数据包。
3.若数据报在定时器超时前得到确认,那么发送方将拥塞窗口的大小再增加一个数据包的长度,然后发送三个数据包。
4.重复上述步骤,直到所有N个数据包都得到响应。