镇江地区做网站的公司有哪些,已经有网站了 怎么做app,数字营销包括哪些方面,网络公司seo推广文章目录 TCP重传机制详解——01概述什么是TCP重传#xff1f;TCP为什么要重传#xff1f;TCP如何做到重传#xff1f;TCP重传方式有哪些超时重传(timeout or timer-based retransmission)快速重传(fast retransmission或者fast retransmit)改进的重传机制#xff0c;早期重… 文章目录 TCP重传机制详解——01概述什么是TCP重传TCP为什么要重传TCP如何做到重传TCP重传方式有哪些超时重传(timeout or timer-based retransmission)快速重传(fast retransmission或者fast retransmit)改进的重传机制早期重传(EREarly Retransmit) REF 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第二次SYNACK握手重试次数/proc/sys/net/ipv4/tcp_syn_retries第二次SYNACK握手重试次数/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 ACKdup ACK重复三次SACK三个SACK选项块FACK一次ACKSACK(ACK-SACK之间有三个包未确认)partial ACK一个ACK连续丢包情况下只确认部分收到了dup ACKthin stram下dup ACK重复一次
注
1. 当ACK报文中的ack值和SACK块之间存在空洞时可以判定为partial ACK
2. 在乱序接收数据包后只发送了一个重复的ACK并且没有收到后续数据包可以判定为thin stream改进的重传机制早期重传(EREarly Retransmit)
谷歌还对快速重传提出了一种改进的重传机制即早期重传(EREarly Retransmit)主要解决某些特定场景下没有足够的dupack出发的快速重传造成的问题。
REF
TCP重传概述 Linux超时重传引入示例 基础快速重传