文档章节

TCP超时重传学习

就是爱喝敌敌畏
 就是爱喝敌敌畏
发布于 2017/05/10 00:42
字数 710
阅读 19
收藏 0

TCP数据传输过程

发送端和接受端经过三次握手建立一个TCP连接后,便开始进行数据传输,然后再经过四次挥手断开连接。

TCP重传机制

TCP号称传输过程数据是完整的,可靠的,这就需要对网络中各种丢数据的情况进行处理,其中包括网络延迟,阻塞等造成的数据包丢失等情况。

TCP超时重传机制

造成超时重传的原因:

  1. 我发送给你的数据,由于某种原因丢失了。
  2. 我发送给你的数据,你收到后,没有返回ACK。
  3. 我发送给你的数据,你收到后并返回了ACK,但是ACK丢了。

相关概念:

  1. RTT(Round Trip Time) : 往返时间,简单理解为:发生端发送TCP数据到接受端返回ACK之间用的时间。
  2. RTO(Retransmission Time Out) : 超时重传时间,指发送端发送数据后,重传数据前等待接收方收到该报文的ACK时间。其工作方式为:> 当TCP实体发送一个段时,他同时启动一个重传计时器,如果该计时器在超时之前该段被确认,则计时器被停止。另一方面,如果在确认到来之前计时器超时,则段被重传(并且该计时器被重新启动)。
  3. 指数退避:检查连续重传之间不同的时间差,它们取整后分别是1、3、6、12、24、48和多个64秒,其中第一次发送后设置的超时时间设置为1.5秒。(2的N次方*1.5秒)

RTO和RTT的关系:RTO大小由RTT计算得出,至于RTT和RTO具体计算方法比较复杂,这里给出简单计算公式,感兴趣可以参考<<TCP/IP详解>>。

  1. 平滑的RTT估计器:R=alpha*R+(1-alpha)*M,其中alpha=0.9, M是ACK测量到的RTT。
  2. 最初RTO=R*beta, beta=2,但该方法在RTT变化很大时会引起不必要的重传。

重传的多义性问题(Karn算法):

假如发送一个分组,当发生超时,RTO指数退避,重传该分组,然后收到ACK。此时但并不能确定这个ACK是针对第一个分组还是重传分组,这就是重传多义性问题。 当一个超时和重传发生时,在重传数据的最后确认到达之前,不能更新RTT估计器,因为我们并不知道ACK对应哪次传输。并且由于数据被重传,RTO得到一个指数退避,我们在下一次传输时,使用这个退避后的RTO。对于一个没有被重传的数据而言,除非收到一个确认,否则不要重新计算新的RTO。

© 著作权归作者所有

就是爱喝敌敌畏
粉丝 0
博文 1
码字总数 710
作品 0
蚌埠
私信 提问
【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计

本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: 曹少琨,微信移动客户端开发工程师,2014年加...

腾讯Bugly
2016/12/19
83
0
你可能没有细究过的TCP/IP

概述 作为互联网时代伟大发明的TCP/IP技术可以说对当今时代产生了深刻的影响。经过近一个月的学习摸索,基本清楚了TCP/IP的面貌。由于TCP/IP在OS中位于内核态,很多细节其实用户无法感知,所...

CodeSheep
2018/02/28
0
3
传输层协议UDP和TCP

UDP和TCP的比较: UDP TCP UDP是无连接的 UDP提供不可靠服务 UDP同时支持点到点和多点通信 UDP是面向报文的 UDP首部8个字节 TCP是面向连接的 TCP提供可靠服务 TCP只能进行点到点通信 TCP是面...

Superheros
2018/03/08
0
0
浅谈TCP(1):状态机与重传机制

TCP协议比较复杂,接下来分两篇文章浅要介绍TCP中的一些要点。 本文介绍TCP的状态机与重传机制,下文讲解流量控制与拥塞控制。 本文大部分内容基于TCP 的那些事儿(上)修改而来,部分观点与...

猴子007
2018/04/03
0
0
在复杂网络环境下断开重连(TCP)和丢包重传(UDP)处理

TCP断开重连 由于TCP的丢包重传机制,TCP不会出现丢包,但是当复杂网络环境下,当TCP超时,重传次数上限,socket异常等会导致TCP连接断开,但是TCP能保证发送的数据都成功接收了. 在游戏进行中,若出...

flyking
2014/04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟

近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙。我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名。 Xulu并不是第一个攻击...

阿里云官方博客
24分钟前
3
0
MD5 加密需要注意编码格式!!!

相信做过MD5加密的童鞋都遇到过字符编码的坑,一般加密出来的结果和其他人不一样都是字符编码不一致导致的,比如类文件的字符编码、浏览器的字符编码等和对方不一致,所以就需要转码统一字符...

jason_kiss
26分钟前
2
0
python中字符串的操作

https://www.jianshu.com/p/7fc851b6a7ee

writeademo
35分钟前
1
0
如何制定 Java 性能调优标准?

想让你的程序更快更稳,但是系统经常出各种 bug,无从下手?Java 性能调优全攻略来啦! 我有一个朋友,有一次他跟我说,他们公司的系统从来没有经过性能调优,功能测试完成后就上线了,线上也...

Java领航员
36分钟前
2
0
java博客项目

项目地址:https://github.com/otale/tale 项目演示地址:https://tale.biezhi.me/ 项目介绍:Tale使用轻量级mvc框架Blade进行开发,默认主题使用漂亮的pinghsu, 特征 设计简洁,界面美观 ...

编程资源库
37分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部