TCP进阶

可靠数据传输

  • 应用数据被分割为TCP认为最适合发送的数据块
  • 当TCP发出一个段后,启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到确认,那么将重发这个报文段
  • TCP收到另一端数据时,会发送一个确认
  • TCP保持它首部和数据的校验和
  • TCP将对收到的数据进行排序,将收到的数据以正确的顺序交给应用层
  • TCP接收端会丢弃重复的数据
  • TCP提供了流量控制,连接的每一方都有固定大小的缓冲区

流量控制

这里TCP双方都可以进行流量控制

  • 发送方使用拥塞窗口进行流量控制
  • 接收方使用滑动窗口进行流量控制

成块数据流

这里主要是说TCP使用滑动窗口协议时,接收方不必确认每一个收到的分组,可以累积确认

拥塞避免算法

拥塞避免算法的目的是为了当拥塞发生时,可以降低分组进入网络的传输速率,可以通过调用慢启动来做到,拥塞避免算法维护了两个变量,一个拥塞窗口cwnd,一个慢启动门限ssthresh,流程如下:

  • 给定的连接,初始化cwnd为1,ssthresh为65535个字节
  • 当拥塞发生时,也就是超时或者重复确认,ssthresh设置为当前窗口的一半(当前窗口指的是拥塞窗口和滑动窗口的最小值,但至少为两个报文段),如果是因为超时引起的拥塞,那么cwnd被设置为1个报文段
  • 当新的数据被确认,那么cwnd增加,如果cwnd小于或者等于ssthresh,那么正在进行慢启动,否则就是在进行拥塞避免,慢启动会一直持续到拥塞发生时所处位置的一半才会停止,慢启动停止后,后面会转为拥塞避免。
  • 拥塞避免在每次确认时将cwnd增加为1/cwnd,也就是说一个往返最多增加一个1报文段

慢启动算法

慢启动为发送方增加了一个拥塞窗口,记为cwnd,当与另一个主机建立tcp连接时,拥塞窗口被初始化为1个报文段,所以发送方刚开始时发送一个报文段,收到ACK后,拥塞窗口+1变为2,然后发送两个报文段,当收到两个报文段ACK后,拥塞窗口+2变为4,这是一种指数增加的关系,但是发送方还是会取拥塞窗口和滑动窗口中的最小值作为发送上限。

快速重传

当发送方连续收到3个及3个以上重复的ACK时,发送方会立即重传丢失的数据报文段,而不需要等待超时定时器的溢出

快速恢复

快速重传完成之后执行拥塞避免算法,也称为快速恢复算法

你可能感兴趣的:(TCP进阶)