TCP/IP协议簇学习笔记(11)TCP的成块数据流

TCP需要维护2方的流量控制
  • 发送方,叫做拥塞控制,采用机制叫做慢启动技术,目的是避免共享的网络环境下网络拥塞
  • 接收方,叫做流控制, 采用机制叫做滑动窗口技术,目的是为了同步发送方和接收方的速度
滑动窗口

TCP以一个段为单位发送数据,每发一个进行一次应答,这样效率很低。于是采用滑动窗口,表示发送方不需要等待接收方的确认应答而能一次性发送的最大数据,滑动窗口就是接收方接收缓存的大小。
TCP/IP协议簇学习笔记(11)TCP的成块数据流
如图,主机A通过TCP头得知接收方的此时的滑动窗口是4000,即4个MSS,

  • 1001左边表示已发送并已确认的数据,
  • 1001~5001表示即使没有收到ACK也可以继续发送的数据,
  • 5001右边表示未发送未确认的数据。

上图中,主机A收到了主机B的确认应答2001,则窗口左边向右移动到2001,(如果没有收到ACK,窗口不会滑动)此时如果主机B更新了滑动窗口值,最窗口右边沿则要移动到(主机B的确认应答+更新的滑动窗口值)

滑动窗口报文丢失

  • 接收方的ACK丢失
  • 发送方发送数据丢失

第一种情况即使前面的ACK丢失,只要最后一个ACK被发送方收到,发送方就知道接收方成功收到完整数据,不必重传,这里也体现了TCP的累计确认
TCP/IP协议簇学习笔记(11)TCP的成块数据流

第二种情况,接收方会反复确认针对当前为只收到数据返回的ACK,发送就就会再次重发这段数据
TCP/IP协议簇学习笔记(11)TCP的成块数据流
滑动窗口为0
当接收方由于某些原因处理不过来数据时,缓冲区填满,此时滑动窗口为0,过段时间后,当滑动窗口不为0时,接收方会发送一个串口更新通知给发送方告知对方可以发送数据流,但是如果这个更新通知丢失的话就无法继续发送数据了,为了避免这种情况,发送方会隔段时间发送窗口探测,用来探测接收方窗口是否有可用缓存。
TCP/IP协议簇学习笔记(11)TCP的成块数据流

慢启动

发送方们都处在一个共享的网络环境下,如果突然发大量的包会导致网络拥塞,所以要对发送数据量做控制

定义了一个调节要发送数据的量,叫拥塞窗口,开始时,拥塞窗口为1,表示一次能发送1个MSS,之后每收到一个ACK,拥塞窗口就加1。
TCP/IP协议簇学习笔记(11)TCP的成块数据流

发送方将拥塞窗口和滑动窗口作比较,取最小值来发送数据。当发生超时重传时拥塞窗口重新设置为1

慢启动阈值

慢启动其实一点不满,每收一个ACK就+1,即1,2,4,8的指数增涨,所以又定义了慢启动阈值,当发生重传时计算出慢启动阈值(此时拥塞窗口的一半),
下一次慢启动窗口值分为2种情况
1.如果是超时重传得到的慢启动阈值,则慢启动窗口直接设置为1
2.如果是收到重复确认应答的重传,则慢启动窗口设置为慢启动阈值+3个数据段大小(快速恢复)
到达慢启动阈值就按照线性增长,进入拥塞避免算法。
TCP/IP协议簇学习笔记(11)TCP的成块数据流