计算机网络攻略(5)TCP 重传

TCP 重传

TCP 实现可靠传输的⽅式之⼀,是通过序列号与确认应答。

在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回⼀个确认应答消息,表示已收到消息。

常⻅的重传机制:
超时重传
快速重传
SACK
D-SACK

超时重传

重传机制的其中⼀个⽅式,就是在发送数据时,设定⼀个定时器,当超过指定的时间后,没有收到对⽅的 ACK确认应答报⽂,就会重发该数据,也就是我们常说的超时重传。

TCP 会在以下两种情况发⽣超时重传:
数据包丢失
确认应答丢失

超时时间应该设置为多少呢?

RTT 就是数据从⽹络⼀端传送到另⼀端所需的时间,也就是包的往返时间。
超时重传时间是以 RTO (Retransmission Timeout 超时重传时间)表示。
假设在重传的情况下,超时时间 RTO 「较⻓或较短」时,会发⽣什么事情呢?

当超时时间 RTO 较⼤时,重发就慢,丢了⽼半天才重发,没有效率,性能差;
当超时时间 RTO 较⼩时,会导致可能并没有丢就重发,于是重发的就快,会增加⽹络拥塞,导致更多的超时,更多的超时导致更多的重发。

精确的测量超时时间 RTO 的值是⾮常重要的,这可让我们的重传机制更⾼效。
根据上述的两种情况,我们可以得知,超时重传时间 RTO 的值应该略⼤于报⽂往返 RTT 的值。

快速重传

TCP 还有另外⼀种快速重传(Fast Retransmit)机制,它不以时间为驱动,⽽是以数据驱动重传。

快速重传的⼯作⽅式是当收到三个相同的 ACK 报⽂时,会在定时器过期之前,重传丢失的报⽂段。

快速重传机制只解决了⼀个问题,就是超时时间的问题,但是它依然⾯临着另外⼀个问题。就是重传的时候,是重传之前的⼀个,还是重传所有的问题。

为了解决不知道该重传哪些 TCP 报⽂,于是就有 SACK ⽅法。

SACK ⽅法

还有⼀种实现重传机制的⽅式叫: SACK ( Selective Acknowledgment 选择性确认)。

这种⽅式需要在 TCP 头部「选项」字段⾥加⼀个 SACK 的东⻄,它可以将缓存的地图发送给发送⽅,这样发送⽅就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。

Duplicate SACK

Duplicate SACK ⼜称 D-SACK ,其主要使⽤了 SACK 来告诉「发送⽅」有哪些数据被重复接收了。

D-SACK 有这么⼏个好处:

  1. 可以让「发送⽅」知道,是发出去的包丢了,还是接收⽅回应的 ACK 包丢了;
  2. 可以知道是不是「发送⽅」的数据包被⽹络延迟了;
  3. 可以知道⽹络中是不是把「发送⽅」的数据包给复制了;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海岸星的清风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值