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存在重传相关推荐

  1. TCP/IP学习笔记(四)TCP超时重传及拥塞控制

    TCP是可靠的传输层协议,但这并不意味着一端发送的数据一定可以到达另一端,因为传输过程中遇到的情况是不可控的,很有可能就有某些数据发生丢失,所以"可靠"其实并不可靠. 不过毕竟现如 ...

  2. 图解TCP 的重传、滑动窗口、流量控制和拥塞控制机制

    每日一句英语学习,每天进步一点点: 前言 前一篇「硬不硬你说了算!近 40 张图解被问千百遍的 TCP 三次握手和四次挥手面试题」得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今 ...

  3. TCP/IP协议栈:TCP超时重传机制

    目录 基础概念 重传超时时间RTO RTO的设定 连接往返时间RTT RTT的计算 Karn算法 往返时间测量 重传 拥塞避免算法 快速重传和快速恢复算法 重新分组 网络数据包丢失,重传和重复确认 是 ...

  4. 基于Wireshark的TCP SACK重传介绍

    1 TCP SACK重传简介 基于TCP的通信是可靠通信,这种可靠通信是通过重传机制实现的.即如果接收端没有收到发送端发送的数据,则发送端会重新发送. 在<基于Wirshark的TCP三次握手介 ...

  5. 计算机网络超时重传时间,TCP超时重传机制

    超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止.[1] 中文名 ...

  6. TCP协议-TCP超时重传机制

    一.前言 在TCP通信中,既要保证在网络正常的情况下提供可靠的交付服务,又要保证在网络异常的情况下也提供可靠的交付服务.而TCP的超时重传机制就是解决在网络异常情况下的可靠传输问题的. 二.通过序列号 ...

  7. 关于TCP快速重传的细节-重传优先级与重传触发条件

    这篇文章写的有点过于细节,因此考虑到可读性和日后的可查阅性,我以两个问题作为引子.作为TCP相关项目的招聘,也可以作为面试题,不过,我敢肯定,大多数人都不能回答第一个问题,第二个问题可能会模棱两可. ...

  8. TCP 是一个可靠传输的协议,那我们来重点介绍 TCP 的重传机制、滑动窗口、流量控制、拥塞控制。

    TCP 巨复杂,它为了保证可靠性,用了巨多的机制来保证,真是个「伟大」的协议,写着写着发现这水太深了... 本文的全部图片都是小林绘画的,非常的辛苦且累,不废话了,直接进入正文,Go! 相信大家都知道 ...

  9. 通过packetdrill构造的包序列理解TCP快速重传机制

    TCP的逻辑是极其复杂的,其学习曲线虽然很平缓但其每一步都是异常艰难,好在这些都是体力活,只要肯花时间也就不在话下了.想彻底理解一个TCP的机制,有个四部曲: 1.读与其相关的RFC: 2.看Linu ...

最新文章

  1. 【C 语言】指针间接赋值 ( 直接修改 和 间接修改 指针变量 的值 | 在函数中 间接修改 指针变量 的值 | 在函数中 间接修改 外部变量 的原理 )
  2. mat opencv java_OpenCV Mat到JavaCV Mat转换
  3. Delphi读取文本内容
  4. Windows下安装部署DBeaver连接clickhouse
  5. pdflush内核线程池及其中隐含的竞争
  6. python elif可以单独使用_elif可以单独使用。( )_学小易找答案
  7. Udacity Self-Driving Car的训练
  8. 两台路由器的连接方法和无线路由桥接
  9. 实时视频通话超低延迟架构的思考与实践
  10. DDD-领域驱动设计包结构
  11. 微信小程序开发学习笔记一
  12. php ssl 465,帝国CMS邮件无法发送SSL465端口无法发送的解决办法
  13. 基于php和mysql实现的简易民航订票系统实验
  14. 电大计算机应用基础期末考试题,电大计算机应用基础模拟题答案.docx
  15. ntfs磁盘 0字节 0byte 文件目录损坏且无法读取 RAW chkdsk失败
  16. MySql数据库去除重复的数据
  17. ts给Number类型数据添加自定义方法报错:类型“Number”上不存在属性“divideStr”的解决方案
  18. 使用XGBoost在Python中进行特征重要性分析和特征选择
  19. windows7旗舰版正版已激活,但桌面右下角显示windows7 内部版本7601,此windows副本不是正版,求助如何解决??
  20. FORBS企业500强

热门文章

  1. python coding style why_python coding style guide 的快速落地实践——业内python 编码风格就pep8和谷歌可以认作标准...
  2. AI算法工程师笔试经验分享 | 【是你等的那一篇推文吗?】
  3. iOS 视图实现圆角效果的三种方法及比较
  4. 手把手教你在centos上配置Django项目(超详细步骤)
  5. 解决ubuntu安装后进入系统时黑屏,左上角闪动光标(ubuntu20亲测有效,应该是解释最详细的一篇了)
  6. 区块链储存类项目发展报告|链塔智库
  7. 他在自己的荣光中如此孤独,孤独地连一个敌人都没有剩下。
  8. 人脸识别会被留底吗_人脸识别时代,我们的隐私会被刷走吗
  9. ESP32-S2 SGM58031-热敏电阻电压转温度
  10. nvidia windows linux,不逊于Win7,英伟达Linux版显卡驱动稳定版下载