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

相关推荐
缘友一世1 小时前
无线和移动网络(7)复习
网络
广东大榕树信息科技有限公司1 小时前
如何利用机房动环监控系统提升运维效率与安全性?
运维·网络·物联网·国产动环监控系统·动环监控系统
寺中人2 小时前
飞猫M7随身WiFi去云控,解限速,改后台,改壁纸
网络·工具·随身wifi
缘友一世2 小时前
软件定义网络SDN(10)复习
网络
HappRobot2 小时前
OpenTelemetry和Jaeger、 SkyWalking的关系
linux·网络·skywalking
Tandy12356_2 小时前
手写TCP/IP协议栈——TCP结构定义与基本接口实现
c语言·网络·c++·网络协议·tcp/ip·计算机网络
少云清3 小时前
【接口测试】4_PyMySQL模块 _操作数据库
服务器·网络·数据库
海清河晏1113 小时前
Linux进阶篇:网络编程
linux·运维·网络
一颗青果3 小时前
Socket编程实例(UDP)
网络·网络协议·udp
真上帝的左手3 小时前
7. 网络安全-等保
网络·安全·web安全