TCP 重传
TCP重传是当发送的报文发生丢失的时候,重新发送丢失报文的一种机制,它是保证TCP协议可靠性的一种机制。
TCP重传有超时重传和快速重传两种机制。
超时重传
超时重传是当报文发送出去的时候,设一个定时器,当定时器到期的时候也没有收到确认应答报文的时候,就重新发送丢失的报文。
比如发送的请求报文丢失:
或者是返回的确认应答报文丢失:
这个定时器的超时时间是有具体公式的,它必须保证超时时长不会太长也不会太短。太短的话可能存在并没有丢包但是却触发重传的情况;太长的话就会等待多余的时间。
快速重传
快速重传则是当连续收到3个相同ack num的报文的时候,就可以确定对端有报文没有接收到,于是未等超时重传的定时器到期,就发送对端缺失的报文。
上面的这个例子,当对端收到了缺失的报文之后,对端返回的ack是4001,代表4000以前的数据都已经接收到,不需要2001、3001等ack都发送一遍,这个叫做累计确认机制。
滑动窗口
TCP的报文头有一个窗口大小的字段,是接收端告诉发送端自己缓冲区还有多少空间可以接收发送端发送的报文。在窗口大小还足够