`
tyytzy
  • 浏览: 38150 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

TCP重传

 
阅读更多
为什么TCP存在重传
TCP是一种可靠的协议,在网络交互的过程中,由于TCP报文是封装在IP协议中的,IP协议的无连接特性导致其可能在交互的过程中丢失,在这种情况下,TCP协议如何保障其传输的可靠性呢?

T C P通过在发送数据报文时设置一个超时定时器来解决这种问题,如果在定时器溢出时还没有收到来自对端对发送报文的确认,它就重传该数据报文。

导致重传的常见状况
1 数据报传输中途丢失

发送端的数据报文在网络传输的过程中,被中间链路或中间设备丢弃,这个过程如下图所示:
http://www.vants.org/content/plugins/kl_album/upload/201204/5e981114fc891f777000c53d4289de7720120428235735832498302.png


2 接收端的ACK确认报文在传输中途丢失

发送端发送的数据报文到达了接受端,接受端也针对接收到的报文发送了相应的ACK确认报文,但是,这个ACK确认报文被中间链路或中间设备丢弃了,该过程如下图所示:
http://www.vants.org/content/plugins/kl_album/upload/201204/6664785ef961b21101098c8eff2687fa201204282357351936960557.png

3 接收端异常未响应ACK或被接收端丢弃

发送端发送的数据报文到达了接收端,但是,接收端由于种种原因,直接忽略该数据报文,或者接收到报文但并没有发送针对该报文的ACK确认报文,这个过程如下图所示:

http://www.vants.org/content/plugins/kl_album/upload/201204/a573654c1b0efba94e77278075e9781220120428235736785537663.png

TCP重传间隔时间和TCP重传次数
一般TCP报文的重传超时时间

TCP重传时间间隔有着多种不同的算法,最常见的就是《TCP/IP详解卷1》中关于超时重传的算法。具体算法不再赘述,请大家参考《TCP/IP详解卷1》第21章《TCP的超时与重传》。

SYN报文重传间隔时间

在实际情况下,由于SYN报文是TCP连接的第一个报文,如果该报文在传输的过程中丢弃了,那么发送方则无法测量RTT,也就无法根据RTT来计算RTO。因此,SYN重传的算法就要简单一些,SYN重传时间间隔一般根据系统实现的不同稍有差别,windows系统一般将第一次重传超时设为3秒,以后每次超时重传时间为上一次的2倍,如下图所示:
http://www.vants.org/content/plugins/kl_album/upload/201204/449365268df27cb49eede253c79d1a9f201204282357361466437206.png


报文重传的次数

TCP报文重传的次数也根据系统设置的不同而有区分,有些系统,一个报文只会被重传3次,如果重传三次后还未收到该报文的确认,那么就不再尝试重传,直接reset重置该TCP连接,但有些要求很高的业务应用系统,则会不断的重传被丢弃的报文,以尽最大可能保证业务数据的正常交互。

重传对业务应用的影响
1 保障了业务的可靠性

TCP的重传存在原因就是为了保障TCP的可靠性,正是由于TCP存在重传的机制,那些基于TCP的业务应用在网络交互的过程中,不再担心由于丢包、包损坏等导致的一系列应用问题了。

2  反映网络通讯的状况

由于IP协议的不可靠性和网络系统的复杂性,少量的报文丢失和TCP重传是正常的,但是如果业务交互过程中,存在大量的TCP重传,会严重影响业务系统交互的效率,导致业务系统出现缓慢甚至无响应的情况发生。

一般而言,出现大量TCP重传说明网络通讯的状况非常糟糕,需要站在网络层的角度分析丢包和重传的原因。

在实际的分析过程中,我们如何确认一个TCP报文是重传报文
在实际的数据交互过程中,重传报文一般具有以下两个特征:一是TCP交互序列号突然下降,二是其在TCP报头中的序列号、数据长度、应用数据等参数跟前面某TCP报文一致。

1 序列号突然下降(一般是TCP重传)

在TCP报文传输的过程中,因为其需要不断的交互应用数据,因此,TCP报文的序列号会不断的变大。正常情况下,TCP序列号不会出现下降的情况,出现序列号下降,一般都是TCP的重传报文导致的。如下图所示:
http://www.vants.org/content/plugins/kl_album/upload/201204/d137fb910b47bd09b0e2ade3bedab48720120428235735551345327.png


在上图中,服务器端交互的TCP报文序列号从24481开始一直处于不断上升的趋势,但是服务器的第六个TCP报文序列号却突然下降为20161,这个情形,基本上可以肯定这第六个TCP报文是前面某个报文的重传报文。

2 根据序列号、长度甚至应用数据等确认是哪一个报文的重传。

在数据交互过程中,一般情况下,TCP重传的报文跟传输中被丢弃的报文在序列号、数据长度、应用字段值上都是一样的,我们可以利用这个特征来确定某个具体的TCP报文是否是前面某个报文的重传。下图是一个客户端存在重传的数据流图:

http://www.vants.org/content/plugins/kl_album/upload/201204/41e06ec87c2390d2611758160cf544b7201204282357361572704656.png

在上图中,我们看到客户端第三个报文和第四个报文的序列号(Seq)、下一个序列号(Next Seq)以及载荷长度都是一样的,那么我们可以肯定客户端的第四个报文是客户端第三个报文的重传。

现在很多的网络分析工具的专家诊断系统基本上都可以针对TCP重传直接告警,我们不需要在去深入分析这个过程了,为我们节省了大量的分析时间。
分享到:
评论

相关推荐

    TCP重传计时器浅析

    1. TCP重传计时器的本质和工作原理:TCP重传计时器是TCP协议中用于处理丢包重传的一种机制。当发送方发送数据包后,它会启动一个计时器,这个计时器会在指定的时间内等待对方的应答。如果在这个时间内没有收到应答,...

    11.1.1 TCP 重传 - Wireshark 数据包分析实战(第 3 版) - 知乎书店1

    《11.1.1 TCP 重传 - Wireshark 数据包分析实战(第 3 版)》一文中详细探讨了TCP协议中至关重要的错误恢复机制——TCP重传。TCP重传是针对数据包丢失而设计的,丢失可能由于各种原因,如应用故障、网络拥堵或短暂的...

    p164 - p198 TCP重传 滑动窗口 流量控制 拥塞控制

    TCP重传、滑动窗口、流量控制、拥塞控制 TCP重传机制是保证数据传输的可靠性的重要机制。其中超时重传是TCP重传机制的一种方式,即在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对端的ACK确认应答...

    TCP重传 滑动窗口 流量控制 拥塞控制 330-371

    "TCP 重传、滑动窗口、流量控制、拥塞控制" TCP 是一个可靠的传输协议,它为了保证可靠性,使用了许多机制来保证,如序列号、确认应答、重发控制、连接管理以及窗口控制等。今天,我们将重点介绍 TCP 的重传机制、...

    六、TCP重传、滑动窗口、流量控制、拥塞控制1

    为了解决数据的破坏、丢包、重复和分片顺序混乱等问题,TCP 实施了多种机制,包括序列号、确认应答、重传控制、连接管理和窗口控制。 1. **重传机制** - **超时重传**:TCP 在发送数据时启动一个定时器,如果在...

    物联网应用中TCP重传队列的设计与实现 (2012年)

    物联网应用的关键技术之一就是要实现嵌入式设备的网络化,其中一种思路就是在...以嵌入式Web服务为例,紧紧围绕嵌入式Web服务器应用的具体要求,详细分析了如何设计并实现TCP重传队列。测试结果表明,该设计思路可行。

    TCP-IP详解卷3:TCP事务协议

    ### TCP-IP详解卷3:TCP事务协议 #### 第1章 T/TCP概述 ##### 1.1 概述 本章重点介绍了客户-服务器事务的概念,并通过对比使用不同协议的情况来阐述T/TCP(TCP事务协议)的优势。首先从使用UDP的客户-服务器应用...

    w5500TCP server解决有时连接断开问题

    2. **重试次数**:在接收到Keep-Alive probe之前,TCP允许的未响应的最大次数。如果达到这个次数仍无回应,TCP将认为连接已断开。 3. **超时时间**:每次发送Keep-Alive probe后等待响应的时间。如果在这个时间内...

    TCP协议解码详解

    * TCP 重传:在 TCP 的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。 * TCP 延迟确认:TCP 并不总是在接收到数据后立即...

    zynq tcp client 断线重连 sdk 工程源码

    在Zynq SDK中,可以通过设置TCP重传超时(RTO)参数来实现。当超过这个时间未收到确认,客户端会重新发送数据。 3. **断线检测**:客户端需要监测TCP连接的状态,例如通过检测接收窗口的大小变化,或者监听TCP的FIN...

    TCP连接测试工具_强烈推荐!

    软件名字叫“TCPUDPDbg”,是一个TCP和UDP协议的网络连接测试工具,支持服务器模式和客户端模式,支持多连接,可同时对多路网络连接进行操作,支持发送汉字,支持十六进制发送和接收方式。非常好用,强烈推荐!

    TCP各个版本的理解与比较

    SACK 是前一版本 NewReno 的扩展,它保持了之前版本的慢启动,拥塞避免,快速重传的机制,但是 SACK 关注的是一个窗口内多个数据包丢失的情况,它避免了之前版本的 TCP重传一个窗口内所有数据包的情况,包括那些已经...

    tcp数据传输与重传过程

    TCP 数据传输与重传过程 TCP(Transmission Control Protocol)是一种面向连接的传输控制协议,提供了可靠的数据传输服务。在数据传输过程中,TCP 协议通过三次握手建立连接,并通过确认机制保证数据的正确传输。...

    3.6.2TCP可靠数据传输1

    7. **TCP重传示例**:有两种情况可能导致重传:一是主机A在超时后重传,此时可能是因为ACK丢失;二是累计确认情况下,主机A在收到乱序段后,只对已排序的最高序列号进行确认,导致其他段的重传。 8. **TCP ACK生成*...

    Wireshark_TCP3.rar_Wireshark Lab_lab windows Tcp_wireshark_wires

    4. **TCP重传与快速重传**:当TCP检测到数据丢失时,会自动进行重传。Wireshark可以揭示这一过程,包括重传的时机和次数。如果连续收到三个相同的确认号,TCP会执行快速重传,以加快恢复速度。 5. **TCP拥塞控制**...

    EC20建立一路SOCKT发数据_TCP透传.zip

    4. **TCP透传实现**:TCP透传的实现主要是通过STM32F407的中断驱动或者轮询方式,实时接收来自应用层的数据,通过EC20的TCP通道进行发送,同时处理EC20返回的TCP接收数据,将其转发给应用层。这个过程中,STM32F407...

    传输控制协议TCP实验

    5. **理解TCP重传机制**:探究TCP如何在未收到确认的情况下重新发送数据。 #### 二、实验环境配置 实验环境的配置通常涉及软件工具的选择和网络设备的设置。虽然具体配置信息没有给出,但通常会使用如Wireshark等...

    Wireshark_TCP_Sept_15_2009.zip_wireshark

    3. **TCP重传与超时**:介绍当TCP检测到数据包丢失时如何触发重传,以及重传超时算法的作用。 4. **TCP流量控制**:讲解滑动窗口的概念,以及如何通过调整窗口大小来控制数据发送速率,防止网络拥塞。 5. **TCP...

    C++ TCP客户端非阻塞连接超时测试源码

    如果连接尚未建立,客户端将重新发送连接请求,这就是TCP重传(Retransmission)的概念。 "ConsoleApplication2"源码很可能包含了一个简单的C++客户端程序,它利用非阻塞模式尝试连接到指定的服务器,并在连接失败...

Global site tag (gtag.js) - Google Analytics