一、起因

近日在用物理损伤仪对公司无线网络相机进行测试时抓到一个数据包,包含有如下的tcp交互过程:

抓包命令为tcpdump -i any -vv -w p.pcap

因为抓的是所有网卡,未做任何过滤,且tcpdump也没有dropped packet。因此上面的抓包是完整的。

从图中可以看到,交互双方是192.168.139.50和1.2.3.4(用以指代对端ip)。在192.168.139.50未发送sack,也没有达到默认的超时重传超时时间,但是1.2.3.4却发送了一个重传包。而且发生这种重传的实际也不固定,没有规律可循。

于是在网上搜索了一番,发现了一个叫做TLP的算法。简单介绍一下。

下面内容的原文在http://perthcharles.github.io/2015/10/31/wiki-network-tcp-tlp/ 对原作者表示感谢。

关于TLP的RFC文档可在https://tools.ietf.org/html/draft-dukkipati-tcpm-tcp-loss-probe-01 下载到。该算法有两个版本,这个连接是较新的版本。

二、TLP算法

TLP全称是TCP Tail Loss Probe。

Early Retransmit机制解决了dupack较少,无法触发快速重传的问题。但是如果发生了尾丢包,由于尾包后面没有更多的数据包,也就没有办法触发任何的dupack。为解决这种尾丢包的问题,Google的几位大神提出了TLP算法。通过TLP算法,发送一个loss probe包,来产生足够的SACK/FACK的信息来触发RF。根据Google的测试,TLP能够有效的避免较长的RTO超时,进而提高TCP性能。

TLP基本策略

TLP算法会在TCP还是Open状态的时候,设置一个Probe TimeOut (PTO)。
当链路中有未被确认的数据包,同时在PTO时间内未收到任何ACK,则会触发PTO超时处理机制。
TLP会选择传输序号最大的一个数据包作为tail loss probe包,这个序号最大的包可能是一个可以发送的新的数据包,也可能是一个重传包。
TLP通过这样一个tail loss probe包,如果能够收到相应的ACK,则会触发FR机制,而不是RTO机制。

触发超时机制的常见场景
这些case还是用大神们的原文描述比较准确:)

a. Drop tail at the end of transactions.
b. Mid-transaction loss of an entire window of data or ACKs.
c. Insufficient number of duplicate ACKs to trigger fast recovery at sender.-- 基本被Eearly Retransmit机制解决了
d. An unexpectedly long round-trip time(RTT), such that the ACKs arrive afterthe RTO timer expires.-- F-RTO机制通过检测spurious retransmission,能够尽量的undo RTO造成的影响

Google Web servers上面,将近70%的重传是RTO超时重传,只有30%是Fast Recovery重传。
同时还有数据表明,96%的RTO超时重传是在没有收到任何dupack的情况下发生的。
没有到任何dupack就意味着FR和ER机制都是无法生效的。

(笔者注:换句话说,TLP算法最初的构想来自于统计数据!)

RTO与RTT的比值分布

Googler们还收集RTO/RTT的分布,来了解RTO值到底比RTT值大多少。下面是统计结果

Percentile      RTO/RTT
50%             4.3
75%             11.3
90%             28.9
95%             53.9
99%             214

根据这个数据,显然这是一个CDF的统计。也就是说,50%的流,RTO/RTT小于4.3,75%的流,RTO/RTT小于11.3
不过反过来看,有50%的流RTO/RTT超过4.3,25%的流RTO/RTT超过11.3。
不过这个数据Googler并没有进一步的解释,有很多疑问在里面。
RTO的min值默认是200ms,这数据里面的是多少?这个数据里面是否同时包含了internet-face流和local-face流。
比如说,local-face流的rtt一般很小,常见值就是1.875ms,而min RTO值200ms的话,显然RTO/RTT很容易超过100
不过话说回来,数据来看,local-face的流应该没有包括,但是min RTO就不清楚了。

Googler认为”Such large RTOs make a huge contribution to the long tail on the latency statistics of short flows.”
这点如果结合TLP考虑的情景,推断确实合理。

那将RTO的计算值设置的较小一点如何?可能会造成两个问题:
a. spurious retransmission
b. 更多的RTO => cwnd=1

TLP试图解决的方式是将”尾丢包+RTO”这种case转换为”尾丢包+尾探测+FR”。

tcp协议系列文章(3):TLP算法相关推荐

  1. tcp协议系列文章(2):从man 7 tcp开始

    本文从tcp的man手册内容开始.以下是man 7 tcp的翻译.翻译参考了一些网络上同道中人的翻译成果,对此表示感谢.下文中的错误之处请读者指出. 文末有文中所有/proc选项的列表,文中所有soc ...

  2. TCP协议、算法和原理

    TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面.所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获. 关于TCP这个协议的细节,我还是推荐你 ...

  3. FPGA经验谈系列文章——FPGA开发方向以及算法开发模型

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 FPGA经验谈系列文章--FPGA开发方向以及算法开发模型 前言 接口方向 算法方向 总结 前言 FPGA开发笼统的说可以分为两个方向 ...

  4. Java学习系列(十六)Java面向对象之基于TCP协议的网络通信

    TCP/IP的网络分层模型:应用层(HTTP/FTP/SMTP/POPS...),传输层(TCP协议),网络层(IP协议,负责为网络上节点分配唯一标识),物理层+数据链路层). IP地址用于标识网络中 ...

  5. 【数据结构与算法】专栏系列文章目录

    本系列文章是对绝大部分[数据结构与算法]的超详细讲解以及封装 本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳 ...

  6. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf...

    M4系列串口服务器与力控组态软件MODBUS TCP 协议通信--有人物联网.pdf M4 系列串口服务器与力控组态软件MODBUS TCP 协议通信 M4系列串口服务器与力控组态软件MODBUS T ...

  7. 数学建模-MATLAB算法精讲系列文章目录介绍(持续补充ing)

    前言 结合实际案例,从算法背景开始一步步到最终代码实现,本系列文章主要以matlab代码为主,为照顾学习其他编程语言的小伙伴,大部分算法会附带python.Java.C++.R语言等市面上主流代码,满 ...

  8. 【数论】数论算法系列文章汇总目录(持续更新中)

    本文属于「数论」系列文章的汇总目录.这一系列着重于数论算法的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏本文以作备忘.此外,在本系列学习文章中,为了透彻理解数论知识,本人参考了诸多博客.教 ...

  9. 《跟我学算法系列文章——一文学会数据结构套路》

    <一文学会数据结构套路> 关键词:数据结构 LRU Tree 文章目录 <一文学会数据结构套路> 前言 3.1 手写 LRU 算法 一.LRU 算法描述 二.LRU 算法设计 ...

最新文章

  1. 程序员的抱枕也太高大上了吧! | 每日趣闻
  2. java spring context_java将对象注册到spring context中 | 学步园
  3. 银保监局招聘计算机岗位备考,2019年中国银保监会招聘计算机类如何备考?
  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)typeid
  5. “chaos“的算法--之双向链表
  6. 同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...
  7. linux内核开源不能仿照_Linux内核开发,开源生产力工具,使用Google应用程序创建自动日历等
  8. JavaScript面向对象--继承 (超简单易懂,小白专属)...
  9. 华为P50保护壳曝光:双环形后置相机模组实锤
  10. Farthest Point Sampling on 2d image
  11. Unity WIndows语音识别(一)关键字识别
  12. 我要考华为认证,需不需要培训呢?
  13. 电脑开机蓝屏时要怎么解决修复?哪种方便比较好?
  14. golang switch使用
  15. HCIP-DATACOM H12-831(101-120)
  16. docker部署开发环境
  17. react的props效验规则
  18. EntityFrameWork Core从零开始,(九)继承影射的补充
  19. imx6ul 16 之DDR
  20. 中国数据治理现状调研报告(2021)

热门文章

  1. 网络并发知识第一天网络通信基本原理
  2. 华中师范大学CCNU校园网(有线/无线)自动登录程序
  3. 为什么没有参数的函数(与实际函数定义相比)会编译?
  4. 关于网页制作的一些动态效果
  5. Dobot的一些理解
  6. php配置邮件服务器,xmail的安装及配置_邮件服务器
  7. Postfix 故障解决一例
  8. Unity新手适合的简单AI
  9. 转载 actor-critic的收敛性问题
  10. an integer is required (got type tuple) 报错解决