一、介绍

当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下的重传的更多相关文章

  1. TCP系列46—拥塞控制—9、SACK下的快速恢复与Limited transmit

    一.概述 1.SACK下的特殊处理过程 SACK下的拥塞控制处理是linux中拥塞控制的实现依据,再次强调一遍RFC6675的重要性,linux中拥塞控制主体框架的实现是与RFC6675一致的,所以如 ...

  2. TCP系列17—重传—7、SACK下的重传

    我们之前介绍SACK选项的时候说过,SACK可以把接收端系列号空间的洞反映给发送端,因此发送端可以更充分的理解接收端的情况,而进行更好的重传恢复过程.这种过程有时候也叫做advanced loss r ...

  3. TCP系列47—拥塞控制—10、FACK下的快速恢复与PRR

    一.概述 FACK下的重传我们在之前的重传部分已经进行了介绍,这里简单介绍一下随着FACK提出的拥塞控制算法的改进及随后的进一步改进. 从我们之前介绍的RFC2582和RFC5681中可以看到,快速恢 ...

  4. TCP系列49—拥塞控制—12、DSACK下的拥塞撤销

    一.概述 DSACK下的虚假重传的检测我们之前重传部分的文章已经介绍过了,这里简单说一下拥塞控制部分的实现. linux内部会维护一个undo_retrans状态变量,其值为已经重传的次数减掉被DSA ...

  5. TCP系列18—重传—8、FACK及SACK reneging下的重传

    一.介绍 FACK的全称是forward acknowledgement,FACK通过记录SACK块中系列号最大(forward-most)的SACK块来推测丢包信息,在linux中使用fackets ...

  6. TCP系列45—拥塞控制—8、SACK关闭的拥塞撤销与虚假快速重传

    一.概述 这篇文章介绍一下TCP从Recovery状态恢复到Open状态的时候cwnd的更新.我们在tcp重传部分的文章中曾经介绍过虚假重传的概念,Linux在探测到虚假重传的时候就会执行拥塞撤销操作 ...

  7. TCP系列21—重传—11、TLP

    一.介绍 Tail Loss Probe (TLP)是同样是一个发送端算法,主要目的是使用快速重传取代RTO超时重传来处理尾包丢失场景.在一些WEB业务中,如果TCP尾包丢失,如果依靠RTO超时进行重 ...

  8. TCP系列20—重传—10、早期重传(ER)

    一.介绍 在前面介绍thin stream时候我们介绍过有两种场景下可能不会产生足够的dup ACK来触发快速重传,一种是游戏类响应交互式tcp传输,另外一种是传输受到拥塞控制的限制,只能发送少量TC ...

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

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

随机推荐

  1. java集合基础篇 简单总结

    昨天晚上看了编程思想4的持有对象,所以把学到看到的一些记记背背的方面给总结一下. java的容器主要分为两类,一个是实现了接口Collection的一类,还有一个是实现了Map接口的一类. 继承Col ...

  2. vowels_单元音

    vowels(美式): 单元音: [i]:需要用劲喊出类似于“yi”的四声,费力咧开嘴,单词eat.need.thief.meet. [?]:卷舌音,单词bird.her.worry.certain. ...

  3. rails中文本匹配相似度gem包对比

    测试数据 ["美科学家发现人体新器官","科学家发现新器官"],["曝高云翔悉尼被捕","高云翔涉性侵被捕"],[&qu ...

  4. 树莓派安装samba

    (1) sudo apt-get install samba samba-common (2)mkdir /home/lin/share #(文件路径自己添加) (3)sudo chmod 777 / ...

  5. mac+win10:UEFI分区方式下安装windows 10

    小编,最近通过在远景论坛上寻找教程--安装双系统(win10+mac os).经过一天努力,成功安装win10.为此,特地分享给各位正在需求教程的朋友,我在UEFI分区方式下安装windows 10的 ...

  6. 关于 VirtualBox6 下的 Win10 虚拟机 与 宿主机 共享文件

    1. 概述 需要在 宿主机 和 虚拟机 之间交换文件 复制粘贴 貌似不太好使 2. 问题 设置了共享文件夹之后, 找不到目录 3. 环境 宿主机 OS Win10 开启了 网络发现 略 虚拟机 OS ...

  7. P1199 三国游戏

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  8. 成都Uber优步司机奖励政策(1月9日)

    1月9日 奖励政策 滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblog ...

  9. CC3200-LAUNCHXL驱动不能正常识别的问题

    1. 本次使用利尔达的CC3200底板,完全兼容官方CC3200-LAUNCHXL,如果上电之后驱动识别为2路串口,是有问题的.原因是FT2232外接的EEPROM没有烧写固件. 2. 安装FT_Pr ...

  10. Jenkis 无法下载插件问题解决

    在新机器上安装jenkins后,安装插件报如下错误 sun.security.provider.certpath.SunCertPathBuilderException: unable to find ...