TCP重传机制详解——01概述

文章目录

TCP重传机制详解------01概述

什么是TCP重传?

重传,表示的重复传输。在生活中,就是书信的重复传输;在用户使用的网络世界里,就是数据和信息的重复传输;在TCP/IP协议中,就是报文的重复传输。
TCP重传就像寄信一样,如果你没收到回执,就说明信可能没送到,于是你就再寄一次,直到对方告诉你信收到了为止。在网络里,TCP就是帮你这样安全送"信"的,如果电脑A发给电脑B的信息没被确认收到,TCP就会重新发送这个信息,确保信息一定能到达B电脑。

TCP为什么要重传?

我们都知道TCP的三个特点,分别是面向连接、可靠、字节流式。

重传的目的就是尽可能的保证TCP的可靠。

TCP如何做到重传?

TCP重传的最基本的元素就是seq和ack字段,也就是在数据分段的前提下,如何知道哪一个数据丢失了,哪一个数据接收到了。所以seq和ack的值就是让我们可以知道我们需要重传哪些数据的依据。

  • 序号(Sequence Numbers): 每个TCP数据段都携带一个序号字段,表示数据段中数据的起始字节在整个数据流中的位置。发送端在发送数据时,会给每个数据段分配一个唯一的序列号,以便接收端可以按照正确的顺序重新组装数据流。
  • 确认应答(ACKnowledgments): 接收端在接收到数据段后,会通过ACK应答告诉发送端已成功接收的数据段的序列号。ACK字段中携带的值是期望接收的下一个数据段的序列号,即上次已成功接收数据段的序列号加上传送的数据字节数。

所以,需要知道这个前提,不用想的太复杂,之后的很多机制都是基于此。TCP重传的本质设计思路,便是基于序号(Sequence Numbers)和确认应答(ACKnowledgments)

TCP重传方式有哪些

超时重传(timeout or timer-based retransmission)

这种重传方式是发出去的数据在RTO超时后还没有收到对应的ACK就会进行超时重传。

  • RTO(Retransmission Time Out),传输超时时间
  • RTT(Round Trip Time),往返时间,数据发送至收到ACK的时间。
    RTO值是根据RTT进行公式计算的,而网咯是动态变化的,所以往返时间也并非确定,所以RTO也是动态变化的


RTO倍增,指数回避,RTT-2RTO-4RTO-8RTO-16RTO.......
如果得不到回应,超时重传会一直重传下去吗?

不会!会有次数限制吗?

内核参数 场景
/proc/sys/net/ipv4/tcp_syn_retries 初始SYN握手重试次数
/proc/sys/net/ipv4/tcp_syn_retries 第二次SYN+ACK握手重试次数
/proc/sys/net/ipv4/tcp_syn_retries 第二次SYN+ACK握手重试次数
/proc/sys/net/ipv4/tcp_retries1 在超时后第一次尝试多少次重传(针对数据段)
/proc/sys/net/ipv4/tcp_retries2 在超时后最多尝试多少次重传(针对数据段)

关于tcp_retries1和tcp_retries2的深入理解:tcp_retries1和tcp_retries2

快速重传(fast retransmission或者fast retransmit)

当TCP注意到累计ack(即TCP头中的ack number)不再推进或者接收端通过SACK信息指示发送端接收端存在洞(hole)时候就会触发发送端的重传,通常来说快速重传比超时重传更高效。

触发机制:

类型 触发条件
dup ACK dup ACK重复三次
SACK 三个SACK选项块
FACK 一次ACK+SACK(ACK-SACK之间有三个包未确认)
partial ACK 一个ACK连续丢包情况下只确认部分收到了
dup ACK thin stram下dup ACK重复一次
复制代码
注:
1. 当ACK报文中的ack值和SACK块之间存在空洞时,可以判定为partial ACK;
2. 在乱序接收数据包后只发送了一个重复的ACK,并且没有收到后续数据包,可以判定为thin stream

改进的重传机制,早期重传(ER,Early Retransmit)

谷歌还对快速重传提出了一种改进的重传机制,即早期重传(ER,Early Retransmit),主要解决某些特定场景下,没有足够的dupack出发的快速重传造成的问题。

REF

TCP重传概述
Linux超时重传引入示例
基础快速重传

相关推荐
DevSecOps选型指南5 小时前
2025软件供应链安全最佳实践︱证券DevSecOps下供应链与开源治理实践
网络·安全·web安全·开源·代码审计·软件供应链安全
国科安芯6 小时前
抗辐照MCU在卫星载荷电机控制器中的实践探索
网络·嵌入式硬件·硬件工程·智能硬件·空间计算
EasyDSS7 小时前
国标GB28181设备管理软件EasyGBS远程视频监控方案助力高效安全运营
网络·人工智能
玩转4G物联网7 小时前
零基础玩转物联网-串口转以太网模块如何快速实现与TCP服务器通信
服务器·网络·物联网·网络协议·tcp/ip·http·fs100p
派阿喵搞电子8 小时前
Ubuntu下有关UDP网络通信的指令
linux·服务器·网络
搬码临时工9 小时前
外网访问内网服务器常用的三种简单操作步骤方法,本地搭建网址轻松让公网连接
服务器·网络·智能路由器
Fortinet_CHINA9 小时前
引领AI安全新时代 Accelerate 2025北亚巡展·北京站成功举办
网络·安全
dustcell.10 小时前
Cisco Packer Tracer 综合实验
网络
量子-Alex11 小时前
【反无人机检测】C2FDrone:基于视觉Transformer网络的无人机间由粗到细检测
网络·transformer·无人机
Jeremy_Lee12313 小时前
grafana 批量视图备份及恢复(含数据源)
前端·网络·grafana