- 浏览: 38150 次
- 性别:
- 来自: 安徽
最新评论
为什么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是一种可靠的协议,在网络交互的过程中,由于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重传直接告警,我们不需要在去深入分析这个过程了,为我们节省了大量的分析时间。
发表评论
-
PPPD拨号返回结果码
2015-09-18 11:12 73200: pppd已经断开,或者已经成功建立连接后请求方又中 断 ... -
3G相关定时器说明
2014-08-06 10:05 883计时器和计数器RNC 计 ... -
PDP激活被拒绝原因码表
2012-07-19 20:55 2831om: http://wireless.agilent.com ... -
PDP激活被拒绝原因码表
2012-07-19 20:15 0方便查询:这些值是真正的原因,但要注意分析问题时尤其对二次开发 ... -
MTK NVRAM
2012-06-28 19:50 1658nvram是程序用来搭建FAT文件系统的那一块,是fla ... -
TBF与PDP激活
2012-06-18 21:28 1196PDP先激活,CCCH上下行TBF建立流程如下:1、下行TBF ... -
C语言中的内存对齐问题
2012-05-29 10:31 788.C语言中的内存对齐 ... -
MTK内存管理
2012-04-20 00:36 4590MTK 内存管理 分类: MTK2011- ... -
MTK Timer
2012-04-18 14:33 41341. GPTI_StartItem 要精准很多,但是只能 ... -
WinSocket编程——原始套接字[转]
2012-03-26 09:23 4904WinSocket编程——原始套接字[转] ... -
TCP三次握手各种异常
2012-03-20 11:04 1405和TCP三次握手有关的面试题 分类: 网络 ... -
Windows API串口编程参考
2012-03-15 14:12 3448Windows API串口编程参 ... -
V.24 & V.35
2012-03-12 20:25 982V.24 & V.35 (2011-08 ... -
【C语言】while与for执行效率对比【转】
2012-03-12 19:00 1664【C语言】while与for执行效率对比【转】 C语言 ... -
[转]ASCII,Unicode,UTF-8,GB2312编码之间的关系
2012-03-12 18:59 942[转]ASCII,Unicode,UTF-8,GB231 ... -
NVRAM的简单添加 【转】
2012-02-29 10:14 852NVRAM的简单添加 MTK 在这里我只 ... -
MTK获取基站的cell_id 【转】
2012-02-29 10:07 1059MTK获取基站的cell_id 博客分类 ... -
MTK的HTTP连接方式
2012-02-29 10:08 892MTK的HTTP连接方式 博客分类: ... -
MTK中怎样创建和使用lib
2012-02-28 17:17 734MTK中怎样创建和使用lib 博客分类: MT ... -
MMI 和L4通信【转】
2012-02-28 17:16 1142MMI 和L4通信 博客分类: MTK ...
相关推荐
1. TCP重传计时器的本质和工作原理:TCP重传计时器是TCP协议中用于处理丢包重传的一种机制。当发送方发送数据包后,它会启动一个计时器,这个计时器会在指定的时间内等待对方的应答。如果在这个时间内没有收到应答,...
《11.1.1 TCP 重传 - Wireshark 数据包分析实战(第 3 版)》一文中详细探讨了TCP协议中至关重要的错误恢复机制——TCP重传。TCP重传是针对数据包丢失而设计的,丢失可能由于各种原因,如应用故障、网络拥堵或短暂的...
TCP重传、滑动窗口、流量控制、拥塞控制 TCP重传机制是保证数据传输的可靠性的重要机制。其中超时重传是TCP重传机制的一种方式,即在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对端的ACK确认应答...
"TCP 重传、滑动窗口、流量控制、拥塞控制" TCP 是一个可靠的传输协议,它为了保证可靠性,使用了许多机制来保证,如序列号、确认应答、重发控制、连接管理以及窗口控制等。今天,我们将重点介绍 TCP 的重传机制、...
为了解决数据的破坏、丢包、重复和分片顺序混乱等问题,TCP 实施了多种机制,包括序列号、确认应答、重传控制、连接管理和窗口控制。 1. **重传机制** - **超时重传**:TCP 在发送数据时启动一个定时器,如果在...
物联网应用的关键技术之一就是要实现嵌入式设备的网络化,其中一种思路就是在...以嵌入式Web服务为例,紧紧围绕嵌入式Web服务器应用的具体要求,详细分析了如何设计并实现TCP重传队列。测试结果表明,该设计思路可行。
### TCP-IP详解卷3:TCP事务协议 #### 第1章 T/TCP概述 ##### 1.1 概述 本章重点介绍了客户-服务器事务的概念,并通过对比使用不同协议的情况来阐述T/TCP(TCP事务协议)的优势。首先从使用UDP的客户-服务器应用...
2. **重试次数**:在接收到Keep-Alive probe之前,TCP允许的未响应的最大次数。如果达到这个次数仍无回应,TCP将认为连接已断开。 3. **超时时间**:每次发送Keep-Alive probe后等待响应的时间。如果在这个时间内...
* TCP 重传:在 TCP 的传输过程中,如果在重传超时时间内没有收到接收方主机对某数据包的确认回复,发送方主机就认为此数据包丢失,并再次发送这个数据包给接收方。 * TCP 延迟确认:TCP 并不总是在接收到数据后立即...
在Zynq SDK中,可以通过设置TCP重传超时(RTO)参数来实现。当超过这个时间未收到确认,客户端会重新发送数据。 3. **断线检测**:客户端需要监测TCP连接的状态,例如通过检测接收窗口的大小变化,或者监听TCP的FIN...
软件名字叫“TCPUDPDbg”,是一个TCP和UDP协议的网络连接测试工具,支持服务器模式和客户端模式,支持多连接,可同时对多路网络连接进行操作,支持发送汉字,支持十六进制发送和接收方式。非常好用,强烈推荐!
SACK 是前一版本 NewReno 的扩展,它保持了之前版本的慢启动,拥塞避免,快速重传的机制,但是 SACK 关注的是一个窗口内多个数据包丢失的情况,它避免了之前版本的 TCP重传一个窗口内所有数据包的情况,包括那些已经...
TCP 数据传输与重传过程 TCP(Transmission Control Protocol)是一种面向连接的传输控制协议,提供了可靠的数据传输服务。在数据传输过程中,TCP 协议通过三次握手建立连接,并通过确认机制保证数据的正确传输。...
7. **TCP重传示例**:有两种情况可能导致重传:一是主机A在超时后重传,此时可能是因为ACK丢失;二是累计确认情况下,主机A在收到乱序段后,只对已排序的最高序列号进行确认,导致其他段的重传。 8. **TCP ACK生成*...
4. **TCP重传与快速重传**:当TCP检测到数据丢失时,会自动进行重传。Wireshark可以揭示这一过程,包括重传的时机和次数。如果连续收到三个相同的确认号,TCP会执行快速重传,以加快恢复速度。 5. **TCP拥塞控制**...
4. **TCP透传实现**:TCP透传的实现主要是通过STM32F407的中断驱动或者轮询方式,实时接收来自应用层的数据,通过EC20的TCP通道进行发送,同时处理EC20返回的TCP接收数据,将其转发给应用层。这个过程中,STM32F407...
5. **理解TCP重传机制**:探究TCP如何在未收到确认的情况下重新发送数据。 #### 二、实验环境配置 实验环境的配置通常涉及软件工具的选择和网络设备的设置。虽然具体配置信息没有给出,但通常会使用如Wireshark等...
3. **TCP重传与超时**:介绍当TCP检测到数据包丢失时如何触发重传,以及重传超时算法的作用。 4. **TCP流量控制**:讲解滑动窗口的概念,以及如何通过调整窗口大小来控制数据发送速率,防止网络拥塞。 5. **TCP...
如果连接尚未建立,客户端将重新发送连接请求,这就是TCP重传(Retransmission)的概念。 "ConsoleApplication2"源码很可能包含了一个简单的C++客户端程序,它利用非阻塞模式尝试连接到指定的服务器,并在连接失败...