TCP重传机制

TCP的重传机制主要包括超时重传、快速重传和选择确认(SACK)。超时重传依赖RTO时间,当发送端在设定时间内未收到ACK则重传;快速重传则通过接收端连续重复ACK来触发,减少重传延迟;SACK允许接收端告诉发送端哪些数据已收到,提高重传效率。D-SACK则进一步提供包失序等信息,帮助优化网络流控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TCP重传机制


常见的TCP重传

  • 超时重传
  • 快速重传
  • SACK
  • D-Sack

超时重传


  • 机制基础: 在TCP中,当发送端数据到达接收端时,接收端会返回一个确认应答的消息(表示已经收到)。

  • 超时重传:为了保证所有的数据包都可以按时到达,当发送端在一个规定时间(RTO超时重传时间)未收到来自接收端的ACK,那么发送端就认为数据丢失了,进行重传。

  • RTO超时重传时间设定:略大于RTT(往返时延),而往返时延可以采用加权平均的方式,使得RTO能够动态变化,并且避免RTT有一个较大的波动。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍

  • 超时重传的范围:发送端发送过程丢包;接收端发送ACK过程丢包

快速重传


  • 机制基础:不以时间驱动,而以数据驱动重传。
  • 快速重传:超时触发重传存在的问题是,超时周期可能相对较长,因此为了还是重传机制,由于若接收端如果没有收到期望的数据,却收到后续乱序的包,也回给客户端回复 ACK,只不过是重复的 ACk,,回复相同的ACK三次以后触发快速重传。

SACK


  • 机制基础:由于快速重发机制未确定重传的数量,其在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了。如果要支持 SACK,必须双方都要支持。在 Linux 下,可以通过 net.ipv4.tcp_sack 参数打开这个功能(Linux 2.4 后默认打开)

img

Duplicate SACK


机制基础:重复 SACK,其在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了。
目的:其主要是帮助发送方判断,是否发生了包失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控。


参考博客: https://www.cnblogs.com/-wenli/p/13080675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值