首页 > 其他分享 >了解RTT 和RTO 对于TCP 重传的影响

了解RTT 和RTO 对于TCP 重传的影响

时间:2022-08-29 18:28:19浏览次数:65  
标签:重传 RTO TCP SRTT RTT 数据包

前言

  我们已经在很多地方了解TCP 的功能和常用字段。但是TCP 传输发生的异常情况总是让我们很棘手,不知改如何处理。陷入迷茫之中。本文章只针对RTT 和RTO 做了解。

描述

 RTT (Round Trip Time)

对于 Ping 和 Traceroute,这测量了发送 Ping 数据包和取回 ICMP 数据包之间的往返时间。对于 TCP 连接,它非常相似;它测量发送数据包到从目标主机获得确认数据包的时间。

 在TCP 三次握手时:

1.计算机 A 向计算机 B 发送 TCP SYN 数据包(这是 RTT 计时器开始的地方)

2.计算机 B 向计算机 A 发送 TCP SYN-ACK 数据包(这是 RTT 计时器结束的地方)

3.然后计算机 A 向计算机 B 发送一个 TCP ACK 数据包(TCP 连接现已建立!

 

如果您使用wireshark 来捕获和分析数据包,您可以通过tcp.analysis.ack_rtt 过滤字段获取

 

 

 很容易理解,对吧?但是当数据包丢失时会发生什么? TCP 协议具有用于确保接收数据包的内置逻辑。因此,为了确保数据包被接收,发送方将重新发送数据包给对方。

我们大多数人都非常了解的重传的逻辑。在初始数据包序列上,有一个称为重传超时 (RTO  Retransmission TimeOut) 的计时器,其初始值为三秒。每次重传后,RTO 的值加倍,计算机最多重试 3 次。这意味着如果发送方在 3 秒(或 RTT > 3 秒)后没有收到确认,它将重新发送数据包。此时,发送者将等待六秒钟来获得确认。如果发送方仍然没有得到确认,它将第三次重新发送数据包并等待 12 秒,此时它将放弃。3>6>12

 

 虽然这是 RTO 已广为人知,但它并不是 TCP 中唯一重传处理逻辑。 TCP 协议的设计考虑到两台计算机之间的连接是不一样的——因此在两台计算机靠近的情况下,重传应该更快。这就是 RTT 开始影响 RTO 的地方。

 TCP 连接建立时,有一个 RTT 值,RTO 将根据 Smoothed RTT (SRTT) 计算进行调整。该计算将平滑因子应用于 RTT,从而创建有利于保证预测数据包往返时间。 SRTT 公式为:

SRTT(ALPHA * SRTT) + ((1-ALPHA) * RTT)

ALPHA = smoothing factor between .8 and .9    平滑因子在0.8 到0.9 之间

 RTT = Round Trip Time

 计算出 SRTT 后,它将用作主机在重新传输段之前等待多长时间的决定因素,其计算如下 RTO:

 

RTO = min[UBOUND, max[LBOUND(BETA * SRTT)]]

UBOUND = upper bound on the timeout (e.g. 1 minute)       超时上限值,例如1分钟

 LBOUND = lower bound on the timeout (e.g. 1 second)      超时下线值   例如1秒

BETA = delay variance factor (e.g. 1.3-2.0)  BETA = 延迟方差因子(例如 1.3-2.0)

如果在发送段后没有收到响应包,则每次重传后 RTO 加倍,在 RTT 计算中忽略前一次重传。这种策略被称为卡恩算法,被认为是非常有效的,尤其是在数据包延迟较高的区域。

 

 

 请记住,新的 RTO 是基于 SRTT 计算的,而 SRTT 是基于 RTT 的,这会导致在遇到网络延迟时非常有效的调整。最低 RTO 会因操作系统(或 TCP 实现)而异;在 Windows 中为 300 毫秒,在 Linux 中为 200 毫秒。

  在 Web 浏览器的情况下,计算机会打开到同一主机的多个连接。对于 Windows,每个连接都有自己的 SRTT 计算,因此一个连接不会影响另一个连接。对于 Linux,可能是相同的。

 

 那么RTO 很大程度取决于RTT 的大小来进行计算。对于RTT 比较高的场景,我们需要最相应的优化措施。

 

标签:重传,RTO,TCP,SRTT,RTT,数据包
From: https://www.cnblogs.com/zy09/p/16636881.html

相关文章

  • assert failed: tcpip_send_msg_wait_sem IDF/components/lwip/lwip/src/api/tcpip.c:
    assertfailed:tcpip_send_msg_wait_semIDF/components/lwip/lwip/src/api/tcpip.c:455(Invalidmbox)assertfailed:tcpip_send_msg_wait_semIDF/components/lwip/l......
  • 软件开发需要了解的计算机网络知识 - OSI参考模型和TCPIP模型
    OSI参考模型的产生背景:-各大IT设备厂商只支持自己的私有协议,跨厂商设备兼容性差-用户购买和维护成本高-不利于网络技术发展 OSI参考模型的概念:定义了网络中设备所遵......
  • C# 处理TCP数据的类(服务端)
    1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Net;4usingSystem.Net.Sockets;5usingSystem.Text;6usingSystem.Threading;......
  • 一台服务器​最大并发 tcp 连接数多少?65535?
    首先,问题中描述的65535个连接指的是客户端连接数的限制。在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三次握手后建立tcp连接。那么对单机,其最大并发t......
  • TCP协议原理
    TCP/IP协议原理_一个懂技术的项目经理的博客-CSDN博客_tcp/ip协议原理 https://blog.csdn.net/apanious/article/details/51014333TCP协议原理TCP每发送一个报文段,就启......
  • tcpip详解-读书笔记
    TCP/IP详解卷一第一版读书笔记第一章:应用层关心是应用程序的细节,而不是数据在网络中对的传输活动,下三层对应用程序一无所知,但他们要处理所有的通信细节。七层代理可......
  • 字节一面:说说TCP的三次握手
    上周有朋友去了字节面试,问到了TCP三次握手的问题,当时回答的不是很好,对于三次握手的发送的报文信息都不太熟,本文主要做一下总结和记录。TCP全称为TransmissionControlP......
  • 好好回答下 TCP 和 UDP 的区别
    写了这么多篇关于TCP和UDP的文章,还没有好好聊过这两个协议的区别,这篇文章我们就来开诚布公的谈一谈。关于TCP和UDP,想必大家都看过一张这样的图。有一个小姑娘在......
  • 【解决步骤】TortoiseGitPlink Fatal Error:No supported authentication methods avai
    解决步骤打开TortoiseGit的设置,点击网络,然后更改SSH客户端的路径为Git的:  默认情况下TortoiseGit的SSH客户端时TortoiseGitPlink,这个好像在很多情况下都无法正常工作......
  • 5 - Windows端Git可视化工具TortoiseGit(小乌龟)
     TortoiseGit是一个开放的Git版本控制系统的源客户端,只运行于Windows系统中,与操作系统紧密结合,使用起来非常方便 一、TortoiseGit的下载安装1、TortoiseGit软件链接:h......