第十四章 TCP超时重传

14.1 引言

TCP提供可靠的数据传输服务,为了保证数据传出的正确性,TCP重传其认为已丢失的数据包(或是SACK确认的丢失数据包),TCP根据接收端返回值发送端的一些列ACK来确认是否出现丢包。
当出现丢包,再适合的时候,TCP启动重传,重传肠胃确认的数据。
TCP有两套独立的机制来完成重传:基于时间基于信息构成,第二种更加高效。

TCP发送数据是,会设置一个计时器,若计时器超时未收到数据包的ACK,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时RTO
另一中重传方式称为快速重传,通常发生在没有延时的视情况,若ACK累计无法确认返回新的ACK(返回的可能是重复ACK),或是包含选择确认信息SACK,快速重传会推断出现丢包。

14.2 简单的超时与重传

每次重传间隔时间加倍称为二进制指数退避
TCP拥有两个阈值来决定如何重传一个报文段,R1表示TCP在想IP层传递消极建议前(例如重新评估当前IP路径),愿意重传的次数(或等待的时间)。R2(大于R1)指示TCP应放弃当前连接的时机。
R1通常为3次,R2冲肠胃3分钟。

14.3 设置重传超时

TCP超时和重传的基础是怎么根据连接的RTT里设置RTO。
TCP在收到ACK时,根据数据报中携带的数据来测量该确认信息所需的时间。每个这样的测量结果称为RTT样本

14.3.1 经典方法

指数加权移动平均
SRTT=a(SRTT) + (1-a)RTT
也就是,每次的SRTT根据得到的RTT更新,a是一个平滑因子,一般为0.8~0.9.

经典方法
RTO=min(max_value,max(min_value,(SRTT)*b))
其中max_value和min_value是超时等待的上限和下限。b是一个时延离散因子去1.2~1.3

缺点:无法适应大规模的变动,因为新旧RTT的比重不同,因此变化会有延迟。

14.3.2 标准方法

在测量的时候同时测量均值和方差,
再看

14.3.2.1 时钟粒度与RTO

14.3.3 Linux采用的方法

14.4 基于计时器的重传

14.5 快速重传

基于ACK

ACK分组的ACK值,永远是已收到连续数据的最后一个字节的偏移量+1。也就是出现第一个空洞的位置。

当失序数据到达时,ACK立即返回,不能延时发送。因此发送端会连续收到ACK值相同的ACk分组。当发送端收到相同ACK分组的次数达到重传的重复ACK阈值(dupthresh),就会重传对应的分组。

快速重传算法概括为:TCP发送端在观测到至少dupthresh个重复ACK后,即重传可能丢失的数据分组,而不必等待计时器超时。当然也同时发送新的数据。不采用SACK时,在接收到有效ACK(ACK值不在是重复的)之前只能重传一个报文段。

NewReno算法

统计|流图

小竖杠是发送端发送的数据报的Seq值。下面的连续梯形是发送端接收到的数据报的ACK值。

如果连续观测到超过dupthresh个重复ACK,开吃重传,当前已发送数据报的Seq最大值成为恢复点。发送丢失数据,同时还继续发送新的数据。以后,当收到新的ACK,如果ACK值小于恢复点,那么立即重传新的丢失的数据,直到ACK超过恢复点,重传结束。

14.6 带选择确认的重传

TCP选择确认选项

TCP接收端提供SACK功能,通过头部累计ACK号字段来描述收到的数据。
ACK号与接收端缓存中其他数据之间的间隔成为空缺。Seq高于空缺数据成为失序数据。
每个SACK信息包括4字节开始位置,4字节结束为止(表示收到数据的起始值最后一个序列号+1),2字节填充。因此一个SACK为10个字节。SACK还会与TSOPT一起使用,又用掉10字节。
所以每个ACK中只能包含3个SACK块。(选项一共40字节)。
第一个SACK块为最新收到的数据,也就是最后的那段,其余两端为从头开始收到的两端连续数据。因此这就有两个空洞了。

tcptrace

发送端在收到SACK以后,不能因为SACK块标记的已接收到数据而清空字节的重传缓存中的数据,必须等待ACK才清除。
这是因为接收端变更:食言。不过很少发生。

14.7 伪超时与重传

14.8 包失序与包重复

每个包可以选择各自的传送路径。某些高级路由器的采用多个并行数据链路,不同的处理演示也会导致包的离开顺序和到达顺序不匹配

包的失序会造成重传,很近单嘛,前面一个小号的Seq没到达,后面的先到达,那么ACK就会 重复

14.9 目的度量

14.10 重新组包

当TCP超时重发是,循序执行重新租宝,发送送一个更大的报文段提高性能,不超过MSS和MTU。
出现在每次传送的包较小,又丢包的情况

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容