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超时重传引入示例
基础快速重传

相关推荐
googleccsdn4 分钟前
ENSP Pro Lab笔记:配置BGP VXLAN双栈(3)
网络·笔记
百***78751 小时前
【实操】一步API对接GPT-5.2全流程(多语言示例+高并发优化+避坑指南)
网络·gpt
科技块儿1 小时前
【场景:识别C2通信】评估出站IP是否为已知恶意地址,方法:IP离线库+威胁情报融合
网络·网络协议·tcp/ip
小陈phd2 小时前
langGraph从入门到精通(六)——基于 LangGraph 实现结构化输出与智能 Router 路由代理
android·网络·数据库
Ares-Wang2 小时前
网络》》IP组播
网络·网络协议·tcp/ip
sunlifenger2 小时前
上海兆越人员定位系统,多元技术赋能,精准守护工业安全
网络·人工智能·安全
独行soc2 小时前
2026年渗透测试面试题总结-3(题目+回答)
网络·python·安全·web安全·渗透测试
以太浮标3 小时前
华为eNSP模拟器综合实验之- 路由表RIB和转发表FIB的关联解析
运维·网络·华为·信息与通信
三不原则4 小时前
网站慢、掉线?可能是TCP/IP在“闹情绪”
网络·网络协议·tcp/ip
2301_780789664 小时前
高防 IP 部署实战:DDoS 大流量攻击下的业务连续性保障策略
网络协议·tcp/ip·ddos