[计算机网络笔记]第三部分——传输层之TCP 可靠传输实现

可靠数据传输需要用到的机制:

  1. 自动重传(ARQ):如果报文出错了,需要重传,这需要差错检测、接收方反馈(ack表示成功确认和nak表示失败确认)、重传三部分
  2. 有序到达:需要序号来标识数据包,确认是否是重传报文或者是否乱序到达报文
  3. 定时器:用于限制时延,超时则确认是丢包
  4. 流水线:为了加快传输速率,提高带宽利用率,在流水线中如果出现丢包或者乱序到达有两种应对方法

a)       GBN(回退N步):只要出现丢包或者乱序到达,以后的数据包都不接收,全部需要重传

b)       SR(选择重传):出现了丢包或者乱序到达,保留后接收到的数据包,同时提醒发送方重发丢失的数据包

 

TCP可靠传输的实现:

  1. 实现了自动重传,有ack应答报文,但是没有nak报文(nak时使用重复上一次ack代替,形成冗余ack报文)
  2. 实现了有序到达,用序列号标识一个报文,同时序号不是按“个”计算的,而是按字节计算的。举例来说,相邻的两个TCP报文,各100字节大小,它们的需要不会是0,1,而是0,100
  3. 实现了定时器:丢包的定时器时间设定在TCP当中是一个很有技巧的事情。TCP通过随机检测报文的送达情况获得若干个RTT(往返时间)样本,然后将其加权(新RTT样本的权重比旧RTT样本的更大),然后加上一个RTT偏差(不可能正好一个RTT就回得来,需要一个可容忍的浮动时间),得到超时重传的时间。公式是:

TimeoutRTT=EstimeedRTT(指数加权移动平均RTT)+4DevRTT(4倍的RTT偏差)

  1. 实现了流水线,当出现丢包或乱序时采取的策略既不是GBN也不是SR,看起来更像GBN一些。
  2. 超时时间计算:每一次确认丢包,TCP认为是网络拥塞,会将下一次的超时时间*2,避免加重拥塞
  3. 重复的ACK报文:即接收到对发送的同一报文的多次ACK报文,这是由于TCP没有否定确认,如果出现数据出错,或者报文乱序到达,只会重复应答最后一次正确接受的报文。TCP处理时认为这就是数据出错、发送数据乱序到达或者丢包的意思,但是网络的拥塞并不严重,此时TCP会启动快速重传机制
  4. 快速重传:即不用等丢包的计时器超时才重发报文,而是在3次冗余ACK之后立即发送冗余ACK确认的下一个序号的报文

你可能感兴趣的:(计算机网络)