TCP系列19—重传—9、thin stream下的重传
一、介绍
当TCP连续大量的发送数据的时候,当出现丢包的时候可以有足够的dup ACK来触发快速重传。但是internet上还有大量的交互式服务,这类服务一般都是由小包组成,而且一次操作中需要传输的数据包一般比较少,比如在线游戏、股票交易等,这一类数据流我们就称呼为thin stream。在一次交互式操作触发一次TCP传输的时候,如果传输的这个数据包发生丢包,很可能后面没有足够的dup ACK来触发快速重传,最终只能依赖RTO超时来进行重传。还有一种受限传输的场景,如果发送窗口受到拥塞控制的限制只能发送出少量的TCP报文的时候,如果丢包也可能会因为收不到足够的dup ACK而不能触发快速重传。关于拥塞控制我们后续内容会介绍。这样会降低用户体验。同时如果RTO多次指数回退,可能会进一步进一步降低用户体验。之前我们介绍过RTO指数回退的目的是降低网络拥塞,而实际上交互式操作一般数据量很小,没有必要通过指数回退来降低网络拥塞。
综上介绍,为了改善thin stream的传输,linux针对引入了两个控制参数
/proc/sys/net/ipv4/tcp_thin_dupack:当该开关打开的时候,只需要一个dup ACK且缓存中没有待发送数据就可以触发快速重传
/proc/sys/net/ipv4/tcp_thin_linear_timeouts:当该参数打开的时候,前6次RTO超时触发的重传并不进行指数回退。
linux中会判断如果当前没有处于初始的慢启动过程(慢启动后续拥塞控制介绍)并且已经发出去的还没有收到ACK的数据包的个数小于4则会认定为thin stream。
二、wireshark示例
设置tcp_retries2=8,tcp_early_retrans=0,tcp_retrans_collapse=0,tcp_thin_dupack=1,tcp_thin_linear_timeouts=1,tcp_discard_on_port =9877;进行如下测试。
1、缓存中没有待发送数据,正常触发thin stream
- 其中No7-No8处的RTO超时重传时候,server端发出去的未收到ACK的包个数为1(No6包),当RTO超时的时候,TCP退出初始的慢启动过程,因此linux判定为thin stream,进而我们看到RTO超时时候没有触发指数回退(No6-No9之间每个数据包的发送间隔大约都是1.5s左右)。
- 接着重传成功后,连续发送两个数据包(No11和No12),此时server端发出的但尚未收到ACK确认包的数据包个数为2个。因为收到拥塞控制中慢启动的限制,此时server端最多只能发送这两个数据包。client模拟No11数据包传输丢失,响应No12数据包回复一个ACK确认包,注意这个确认包的ack number与No10确认包一样,同时包含一个SACK选项告诉server端已经收到了No12数据包
- server端认定这个数据包为dup ACK,同时数据流为thin stream,因此一个dup ACK就会触发快速重传,即No14数据包。对于No14数据包,wireshark显示为乱序包实际是一个快速重传包。另外对于No13报文,wireshark显示为No10的dup ACK,实际上linux的处理是因为No13携带有有效的SACK选项才被认定为dup ACK报文的,相关内容参考前面SACK重传的介绍。
- 快速重传没有收到ACK确认包的时候,接着触发RTO超时重传,可以看到前6次重传(No15-No20) 都没有触发指数会退,RTO一直是1.5s左右。直到第7次重传(No21)后,RTO开始进行指数回退。

2、缓存中有待发送数据不会触发thin stream重传
这个示例与之前类似,不同的是在第一次RTO超时重传成功后,server端应用层写入3个TCP报文,但是由于拥塞控制,server端TCP只能发出两个报文No11和No12。接着cilent模拟丢失No11报文,对No12乱序报文回复一个ACK确认包,同时包含一个SACK选项告诉server端已经收到了No12数据包。此时因为缓存中还有一个TCP报文待发送就不会触发thin stream的快速重传而是选则发送新数据来进一步触发dup ACK。

补充说明:
1、http://home.ifi.uio.no/paalh/students/AndreasPetlund-phd.pdf
TCP系列19—重传—9、thin stream下的重传的更多相关文章
- TCP系列46—拥塞控制—9、SACK下的快速恢复与Limited transmit
一.概述 1.SACK下的特殊处理过程 SACK下的拥塞控制处理是linux中拥塞控制的实现依据,再次强调一遍RFC6675的重要性,linux中拥塞控制主体框架的实现是与RFC6675一致的,所以如 ...
- TCP系列17—重传—7、SACK下的重传
我们之前介绍SACK选项的时候说过,SACK可以把接收端系列号空间的洞反映给发送端,因此发送端可以更充分的理解接收端的情况,而进行更好的重传恢复过程.这种过程有时候也叫做advanced loss r ...
- TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR
一.概述 FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进. 从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢 ...
- TCP系列49—拥塞控制—12、DSACK下的拥塞撤销
一.概述 DSACK下的虚假重传的检测我们之前重传部分的文章已经介绍过了,这里简单说一下拥塞控制部分的实现. linux内部会维护一个undo_retrans状态变量,其值为已经重传的次数减掉被DSA ...
- TCP系列18—重传—8、FACK及SACK reneging下的重传
一.介绍 FACK的全称是forward acknowledgement,FACK通过记录SACK块中系列号最大(forward-most)的SACK块来推测丢包信息,在linux中使用fackets ...
- TCP系列45—拥塞控制—8、SACK关闭的拥塞撤销与虚假快速重传
一.概述 这篇文章介绍一下TCP从Recovery状态恢复到Open状态的时候cwnd的更新.我们在tcp重传部分的文章中曾经介绍过虚假重传的概念,Linux在探测到虚假重传的时候就会执行拥塞撤销操作 ...
- TCP系列21—重传—11、TLP
一.介绍 Tail Loss Probe (TLP)是同样是一个发送端算法,主要目的是使用快速重传取代RTO超时重传来处理尾包丢失场景.在一些WEB业务中,如果TCP尾包丢失,如果依靠RTO超时进行重 ...
- TCP系列20—重传—10、早期重传(ER)
一.介绍 在前面介绍thin stream时候我们介绍过有两种场景下可能不会产生足够的dup ACK来触发快速重传,一种是游戏类响应交互式tcp传输,另外一种是传输受到拥塞控制的限制,只能发送少量TC ...
- TCP系列11—重传—1、TCP重传概述
在最开始介绍TCP的时候,我们就介绍了TCP的三个特点,分别是面向连接.可靠.字节流式.前面内容我们已经介绍过了TCP的连接管理,接下来的这部分内容将会介绍与TCP可靠性强关联的TCP重传. 很多网络 ...
随机推荐
- 转载:CSS的组成,三种样式(内联式,嵌入式,外部式),优先级
(仅供自己备份) 原文地址:http://blog.csdn.net/chq11106004389/article/details/50515717 CSS的组成 选择符/选择器+声明(属性+值) 选 ...
- Go中处理文本格式
首先是xml 解析xml package main import ( "encoding/xml" //xml标准库 "fmt" "io/ioutil ...
- ubuntu16.04 64位安装tftp服务器
1.安装tftpd-hpa和xinetd sudo apt-get install tftpd-hpa xined2.针对64位操作系统安装openbsd-inetd apt-get install ...
- Java8 Comparator 排序方法
Java8 中 Comparator 接口提供了一些静态方法,可以方便于我们进行排序操作,下面通过例子讲解下如何使用 对整数列表排序(升序) List<Integer> list = Ar ...
- 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式
本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...
- Multimodal Machine Learning:A Survey and Taxonomy 综述阅读笔记
该笔记基于:Multimodal Machine Learning:A Survey and Taxonomy 该论文是一篇对多模态机器学习领域的总结和分类,且发表于2017年,算是相当新的综述了.老 ...
- [Oracle]关于Oracle分页写法的性能分析及ROWNUM说明
关于分页写法的性能分析及ROWNUM的补充说明 分页写法 一.测试前数据准备 SQL> SELECT COUNT(*) FROM BPM_PROCVAR; COUNT(*) ---------- ...
- 北京Uber优步司机奖励政策(11月2日~11月8日)
用户组:优步北京人民优步A组(适用于11月2日-11月8日) 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不 ...
- 深圳Uber司机本周(7.13-7.19凌晨4:00)的奖励政策
本周(7.13-7.19凌晨4:00)的奖励政策为: 佣金返还: 车费的20%适用于所有产品(不包括Tesla)无获取条件 翻倍补贴: 每周一到周四07:00-10:00/17:00-22:00:车费 ...
- OpenCV 3.2 Tracking 物体跟踪
跟踪就是在连续视频帧中定位物体,通常的跟踪算法包括以下几类: 1. Dense Optical Flow 稠密光流 2. Sparse Optical Flow 稀疏光流 最典型的如KLT算法(Kan ...