前言

  我们已经在很多地方了解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 比较高的场景,我们需要最相应的优化措施。

了解RTT 和RTO 对于TCP 重传的影响的更多相关文章

  1. TCP错误恢复特性之一TCP重传

    TCP的错误恢复特性是我们用来定位.诊断并最终修复网络高延迟的最好工具. 常见的TCP错误恢复特性有:TCP重传.TCP重复确认和快速重传 1. TCP重传: 重传数据包是TCP最基本的错误恢复特性之 ...

  2. 对TCP重传的进一步认识

    http://blog.sina.com.cn/s/blog_4d276ac901011ee7.html ——TCM项目所得 一.看图说话 1.基于套接字的TCP服务器/客户端程序流程 2.TCP三次 ...

  3. TCP系列11—重传—1、TCP重传概述

    在最开始介绍TCP的时候,我们就介绍了TCP的三个特点,分别是面向连接.可靠.字节流式.前面内容我们已经介绍过了TCP的连接管理,接下来的这部分内容将会介绍与TCP可靠性强关联的TCP重传. 很多网络 ...

  4. 一站式学习Wireshark(四):网络性能排查之TCP重传与重复ACK

    作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端.但用户感到网络运行缓慢并不意味着就是网络问题. 解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重复ACK)和流控功能说起.之后阐 ...

  5. Wireshark(四):网络性能排查之TCP重传与重复ACK

    原文出处: EMC中文支持论坛 作为网络管理员,很多时间必然会耗费在修复慢速服务器和其他终端.但用户感到网络运行缓慢并不意味着就是网络问题. 解决网络性能问题,首先从TCP错误恢复功能(TCP重传与重 ...

  6. TCP 重传、滑动窗⼝、流量控制、拥塞控制

    重传机制 TCP 会在以下两种情况发⽣超时重传: 数据包丢失 确认应答丢失 重传超时 重传超时是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果 ...

  7. TCP重传率高的监控

    TCP重传率是对网络质量的一个体现,简单包装netstat -s的输出可以计算出TCP重传率.现成的脚本如下: #!/bin/bash export PATH='/bin:/sbin:/usr/bin ...

  8. TCP重传问题解决思路

    处理线上问题经常会碰到网络抖动的情况, 网络抖动有可能就是TCP重传导致,下面简单说下TCP重传的排查思路,不一定能完全解决问题 1. 找运维同事确定是否是网线问题, 如果是网线问题请更换网线 2. ...

  9. TCP重传机制的学习应用

    1. TCP重传机制 TCP协议是一个可靠的协议.发送方每次发送一个数据包,需要等到ACK确认包再继续发送. 发出去的请求包在规定时间内没有收到ACK,不管是请求包丢失,还是ACK包丢失,还是网络延迟 ...

  10. 【图解】你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了

    每日一句英语学习,每天进步一点点: 前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今 ...

随机推荐

  1. 记录坑:Chrome谷歌浏览器最小化和页面遮挡后JS代码不稳定

    问题:用定时器 setInterval()做个滚动通知的动画,浏览器最小化时,定时器 setInterval()失效了,导致滚动条重叠了 可能原因: js代码不稳定 Chrome谷歌浏览器最小化和页面 ...

  2. HttpClientFactory的一些参考资料

    依赖关系注入指南  https://docs.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection-guidelines#di ...

  3. 用深度学习模型Word2Vec探索《红楼梦》人物关系

    先来看一看结果,发现: 1.贾宝玉和袭人的关系最近. 2.薛宝钗和自己的妈妈关系最近. 3.贾宝玉和林黛玉逼格比较统一,薛宝钗属于独树一帜的逼格调性. 4.大观园中可以看到邢岫烟经常出没... 还有更 ...

  4. openstack 下云主机所在目录

    1.先查看云主机运行在哪个节点 2. [root@compute01 ~]# cd /var/lib/nova/instances/ 注: 云主机是一台链接克隆的虚拟机,_base 是母盘, fa56 ...

  5. React如何修改props && 子组件调用父组件方法

    /** * 子组件如何更改父组件的state呢? * 父组件传递下来的props不满足要求,往往需要修改 * * * Author: shujun * Date: 2020-10-25 */ impo ...

  6. 2022-3-21内部群每日三题-清辉PMP

    1.Sprint的速度低于预期,敏捷团队成员应该怎么做? A.限制团队成员和客户之间的沟通,以防止不必要的焦虑. B.管理沟通,以重置相应团队成员和干系人的期望. C.管理几名团队成员和客户之间的沟通 ...

  7. Text文件颜色渐变

    using UnityEngine;using System.Collections;using System.Collections.Generic;using UnityEngine.UI;usi ...

  8. macOS 10.14安装win10教程 bootcamp篇

    由于工作以及系统使用习惯上的原因,拥有Mac电脑的用户常常需要用到windows系统,这个时候我们就需要在Mac上安装双系统来满足这一需求,一起来看看macOS 10.14安装win10教程吧. ma ...

  9. js - console

    js - console 参考资料 JavaScript Console 对象 Node.js console.debug()用法及代码示例 nodejs.org console.log输出字体颜色 ...

  10. git版本回退:git reset --hard 版本号

    开发项目中会遇到各种奇葩的事情: 奇葩系列之在项目更新迭代开发正带劲的时候突然更新项目之前的项目出问题了要修复.在开发功能一半又要修复之前的问题着急上线的情况下.此时此刻git的版本回退是那么的迷人, ...