为什么TCP存在重传
TCP是一种可靠的协议,在网络交互的过程中,由于TCP报文是封装在IP协议中的,IP协议的无连接特性导致其可能在交互的过程中丢失,在这种情况下,TCP协议如何保障其传输的可靠性呢?
T C P通过在发送数据报文时设置一个超时定时器来解决这种问题,如果在定时器溢出时还没有收到来自对端对发送报文的确认,它就重传该数据报文。
导致重传的常见状况
1 数据报传输中途丢失
发送端的数据报文在网络传输的过程中,被中间链路或中间设备丢弃,这个过程如下图所示:
2 接收端的ACK确认报文在传输中途丢失
发送端发送的数据报文到达了接受端,接受端也针对接收到的报文发送了相应的ACK确认报文,但是,这个ACK确认报文被中间链路或中间设备丢弃了,该过程如下图所示:
3 接收端异常未响应ACK或被接收端丢弃
发送端发送的数据报文到达了接收端,但是,接收端由于种种原因,直接忽略该数据报文,或者接收到报文但并没有发送针对该报文的ACK确认报文,这个过程如下图所示:
TCP重传间隔时间和TCP重传次数
一般TCP报文的重传超时时间
TCP重传时间间隔有着多种不同的算法,最常见的就是《TCP/IP详解卷1》中关于超时重传的算法。具体算法不再赘述,请大家参考《TCP/IP详解卷1》第21章《TCP的超时与重传》。
SYN报文重传间隔时间
在实际情况下,由于SYN报文是TCP连接的第一个报文,如果该报文在传输的过程中丢弃了,那么发送方则无法测量RTT,也就无法根据RTT来计算RTO。因此,SYN重传的算法就要简单一些,SYN重传时间间隔一般根据系统实现的不同稍有差别,windows系统一般将第一次重传超时设为3秒,以后每次超时重传时间为上一次的2倍,如下图所示:
报文重传的次数
TCP报文重传的次数也根据系统设置的不同而有区分,有些系统,一个报文只会被重传3次,如果重传三次后还未收到该报文的确认,那么就不再尝试重传,直接reset重置该TCP连接,但有些要求很高的业务应用系统,则会不断的重传被丢弃的报文,以尽最大可能保证业务数据的正常交互。
重传对业务应用的影响
1 保障了业务的可靠性
TCP的重传存在原因就是为了保障TCP的可靠性,正是由于TCP存在重传的机制,那些基于TCP的业务应用在网络交互的过程中,不再担心由于丢包、包损坏等导致的一系列应用问题了。
2 反映网络通讯的状况
由于IP协议的不可靠性和网络系统的复杂性,少量的报文丢失和TCP重传是正常的,但是如果业务交互过程中,存在大量的TCP重传,会严重影响业务系统交互的效率,导致业务系统出现缓慢甚至无响应的情况发生。
一般而言,出现大量TCP重传说明网络通讯的状况非常糟糕,需要站在网络层的角度分析丢包和重传的原因。
在实际的分析过程中,我们如何确认一个TCP报文是重传报文
在实际的数据交互过程中,重传报文一般具有以下两个特征:一是TCP交互序列号突然下降,二是其在TCP报头中的序列号、数据长度、应用数据等参数跟前面某TCP报文一致。
1 序列号突然下降(一般是TCP重传)
在TCP报文传输的过程中,因为其需要不断的交互应用数据,因此,TCP报文的序列号会不断的变大。正常情况下,TCP序列号不会出现下降的情况,出现序列号下降,一般都是TCP的重传报文导致的。如下图所示:
在上图中,服务器端交互的TCP报文序列号从24481开始一直处于不断上升的趋势,但是服务器的第六个TCP报文序列号却突然下降为20161,这个情形,基本上可以肯定这第六个TCP报文是前面某个报文的重传报文。
2 根据序列号、长度甚至应用数据等确认是哪一个报文的重传。
在数据交互过程中,一般情况下,TCP重传的报文跟传输中被丢弃的报文在序列号、数据长度、应用字段值上都是一样的,我们可以利用这个特征来确定某个具体的TCP报文是否是前面某个报文的重传。下图是一个客户端存在重传的数据流图:
在上图中,我们看到客户端第三个报文和第四个报文的序列号(Seq)、下一个序列号(Next Seq)以及载荷长度都是一样的,那么我们可以肯定客户端的第四个报文是客户端第三个报文的重传。
现在很多的网络分析工具的专家诊断系统基本上都可以针对TCP重传直接告警,我们不需要在去深入分析这个过程了,为我们节省了大量的分析时间。
为什么TCP存在重传相关推荐
- TCP/IP学习笔记(四)TCP超时重传及拥塞控制
TCP是可靠的传输层协议,但这并不意味着一端发送的数据一定可以到达另一端,因为传输过程中遇到的情况是不可控的,很有可能就有某些数据发生丢失,所以"可靠"其实并不可靠. 不过毕竟现如 ...
- 图解TCP 的重传、滑动窗口、流量控制和拥塞控制机制
每日一句英语学习,每天进步一点点: 前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今 ...
- TCP/IP协议栈:TCP超时重传机制
目录 基础概念 重传超时时间RTO RTO的设定 连接往返时间RTT RTT的计算 Karn算法 往返时间测量 重传 拥塞避免算法 快速重传和快速恢复算法 重新分组 网络数据包丢失,重传和重复确认 是 ...
- 基于Wireshark的TCP SACK重传介绍
1 TCP SACK重传简介 基于TCP的通信是可靠通信,这种可靠通信是通过重传机制实现的.即如果接收端没有收到发送端发送的数据,则发送端会重新发送. 在<基于Wirshark的TCP三次握手介 ...
- 计算机网络超时重传时间,TCP超时重传机制
超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止.[1] 中文名 ...
- TCP协议-TCP超时重传机制
一.前言 在TCP通信中,既要保证在网络正常的情况下提供可靠的交付服务,又要保证在网络异常的情况下也提供可靠的交付服务.而TCP的超时重传机制就是解决在网络异常情况下的可靠传输问题的. 二.通过序列号 ...
- 关于TCP快速重传的细节-重传优先级与重传触发条件
这篇文章写的有点过于细节,因此考虑到可读性和日后的可查阅性,我以两个问题作为引子.作为TCP相关项目的招聘,也可以作为面试题,不过,我敢肯定,大多数人都不能回答第一个问题,第二个问题可能会模棱两可. ...
- TCP 是一个可靠传输的协议,那我们来重点介绍 TCP 的重传机制、滑动窗口、流量控制、拥塞控制。
TCP 巨复杂,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了... 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 相信大家都知道 ...
- 通过packetdrill构造的包序列理解TCP快速重传机制
TCP的逻辑是极其复杂的,其学习曲线虽然很平缓但其每一步都是异常艰难,好在这些都是体力活,只要肯花时间也就不在话下了.想彻底理解一个TCP的机制,有个四部曲: 1.读与其相关的RFC: 2.看Linu ...
最新文章
- 【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
- mat opencv java_OpenCV Mat到JavaCV Mat转换
- Delphi读取文本内容
- Windows下安装部署DBeaver连接clickhouse
- pdflush内核线程池及其中隐含的竞争
- python elif可以单独使用_elif可以单独使用。( )_学小易找答案
- Udacity Self-Driving Car的训练
- 两台路由器的连接方法和无线路由桥接
- 实时视频通话超低延迟架构的思考与实践
- DDD-领域驱动设计包结构
- 微信小程序开发学习笔记一
- php ssl 465,帝国CMS邮件无法发送SSL465端口无法发送的解决办法
- 基于php和mysql实现的简易民航订票系统实验
- 电大计算机应用基础期末考试题,电大计算机应用基础模拟题答案.docx
- ntfs磁盘 0字节 0byte 文件目录损坏且无法读取 RAW chkdsk失败
- MySql数据库去除重复的数据
- ts给Number类型数据添加自定义方法报错:类型“Number”上不存在属性“divideStr”的解决方案
- 使用XGBoost在Python中进行特征重要性分析和特征选择
- windows7旗舰版正版已激活,但桌面右下角显示windows7 内部版本7601,此windows副本不是正版,求助如何解决??
- FORBS企业500强
热门文章
- python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
- AI算法工程师笔试经验分享 | 【是你等的那一篇推文吗?】
- iOS 视图实现圆角效果的三种方法及比较
- 手把手教你在centos上配置Django项目(超详细步骤)
- 解决ubuntu安装后进入系统时黑屏,左上角闪动光标(ubuntu20亲测有效,应该是解释最详细的一篇了)
- 区块链储存类项目发展报告|链塔智库
- 他在自己的荣光中如此孤独,孤独地连一个敌人都没有剩下。
- 人脸识别会被留底吗_人脸识别时代,我们的隐私会被刷走吗
- ESP32-S2 SGM58031-热敏电阻电压转温度
- nvidia windows linux,不逊于Win7,英伟达Linux版显卡驱动稳定版下载