TCP F-RTO浅析

2023-11-23 04:20
文章标签 tcp 浅析 rto

本文主要是介绍TCP F-RTO浅析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

F-RTO为了解决一个问题,RFC5682最开头有说:

It has been pointed out that the retransmission timer can expire spuriously and cause unnecessary retransmissions when no segments have been lost [LK00, GL02, LM03]. After a spurious retransmission timeout, the late acknowledgments of the original segments arrive at the sender, usually triggering unnecessary retransmissions of a whole window of segments during the RTO recovery. Furthermore, after a spurious retransmission timeout, a conventional TCP sender increases the congestion window on each late acknowledgment in slow start. This injects a large number of data segments into the network within one round-trip time, thus violating the packet conservation principle [Jac88].

F-RTO的目标是避免不必要重传,减少了网络上的数据包,这可有效减缓拥塞,是一个利他利己的效果,至于拥塞状态机的undo只是它的副作用。
造成虚假超时的原因大致两类:

  • 突发拥塞。这导致瞬时RTT升高,造成RTO重传。
  • 路由重收敛。这导致路径切换,新路径RTT偏高。

其中拥塞因素不再赘述,路由重收敛值得一提。

路由重收敛时间接近分钟级别,即使是小范围路由抖动也需秒级方可稳定,在TCP看来,RTO超时是必然的,RTO超时后即重传UNA,UNA将沿着新的路径到达对端并被ACK,接下来的做法,是理解F-RTO算法的核心。收到重传的UNA的ACK后,sender可以:

  • 重传UNA~RecoveryPoint。
  • 传输新报文。

如果重传UNA~RecoveryPoint,显然是没有必要的,徒增了网络负载,如果传输新报文,由于TCP是积累确认,接下来从返回的ACK就能判断RTO超时是真超时还是假超时了:

  • 若ACK包含SACK,则为真超时,迄今只发了UNA和新报文,SACK说明有空洞,实锤(大概率)丢包。
  • 若ACK确认了从未重传的报文,则必然为假超时,undo恢复。

F-RTO,顾名思义,其中的F就是Forward,即发送新报文的意思。
下图展示了标准RTO超时后的tcptrace图样例:
在这里插入图片描述
下面是启用F-RTO后的:
在这里插入图片描述
浙江温州皮鞋湿,下雨进水不会胖。

这篇关于TCP F-RTO浅析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/415300

相关文章

TCP 可靠传输的工作原理

转载地址:https://my.oschina.net/xinxingegeya/blog/485233 感谢原作者 TCP 可靠传输的工作原理 ARQ(Automatic Repeat-reQuest)(自动重传请求) 停止等待ARQ协议 连续ARQ协议   停止等待ARQ协议 全双工通信的双发既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接受数据

ESP32使用MQTT_TCP连接阿里云

ESP32-IDF中MQTT函数的介绍 esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) 函数功能:mqtt 客户端初始化 函数形参: mqtt 客户端的配置 函数返回值:正确则返回根据配置创建的 mqtt 客户端句柄;异常则返回 NULL。 其中函数形参 esp_mqtt

【LinuxC语言】第一个简单的tcp/ip客户端

文章目录 前言一、客户端连接服务器的示意图二、客户端涉及的相关函数socket函数connect函数struct sockaddr结构体相关的转换函数connect主体函数 发送数据函数接收数据函数关闭socket客户端示例代码 总结 前言 在计算机网络中,TCP/IP 是最常见的网络协议。它为我们提供了一种可靠的方式来发送和接收数据。在这篇文章中,我们将使用 Linux C

TCP与UDP_三次握手_四次挥手

TCP vs UDP TCP数据 具体可以通过Cisco Packet Tracer工具查看: UDP数据 三次握手、四次挥手 为什么是3/4次?这牵扯到单工、双工通信的问题 TCP建立连接:表白 TCP释放连接:分手 TCP—建立连接—三次握手 解释: 首先,启动服务器,让服务器进入监听状态(监听客户端的连接请求)。客户端向服务器发送同

【linuxC语言】第一个简单的TCP/IP服务器

文章目录 前言一、服务器开发结构图二、深度解析服务器三、服务器开发相关函数htonl函数bind函数listen函数accept函数INADDR_ANY 宏struct sockaddr_in的不同场景区别tcp/ip服务器示例代码 总结 前言 在计算机网络中,TCP/IP 是一种非常重要的通信协议。它是互联网的基础,也是许多网络应用的核心。在 Linux 环境下,我们可以使

浅析std::ref

目录 1 为什么需要std::ref 2 std::ref使用示例 2.1 std::thread调用 2.1.1 不使用std::ref,编译失败 2.1.2 使用std::ref修饰输入变量 2.2 stl库调用(以for_each 为例) 2.3 std::bind 2.3.1 使用std::ref 2.3.2 使用placeholders::_x同样可以达到同样效果 3

TCP、HTTP详解

TCP和HTTP   TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,采用三次握手建立连接,四次挥手终止连接。   TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去,服务器和客户端均可主动发起断开连接的请求。   HTTP(Hypertext Transfer Pr

Netty解决TCP粘包/拆包导致的半包读写问题

一.TCP粘包/拆包问题说明   TCP是个“流”协议,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包拆分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 二.利用LinedBasedFrameDecoder解决TCP粘包问题    为了

iOS 网络相关面试题(TCP、三次握手、四次挥手、代码实现)

一、TCP的特点和报文结构 1、面向连接、可靠传输、面向字节流、全双工服务 2、TCP的报文结构 TCP报文段由首部字段和一个数据字段组成。 数据字段包含一块应用数据。最大报文长度MSS(Maximum Segment Size)限制了报文段数据字段的最大长度。MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。 所以当TCP发送一个大文件(比如一张高清图

用户态协议栈06-TCP三次握手

最近由于准备软件工程师职称考试,然后考完之后不小心生病了,都没写过DPDK的博客了。今天开始在上次架构优化的基础上增加TCP的协议栈流程。 什么是TCP 百度百科:TCP即传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通讯协议。 这里最需要关注的就是基于字节流,在我们使用Linux的Posix API创建TCP的Sock