TCP超时/丢失重传

  Nagle算法要求一条TCP连接上最多只有一个未被确认的报文,发送方发送一个TCP报文,接收方确认该报文,发送方再发送下一个报文,若发送方在一定时间内未收到确认,则再重发报文。相对来说Nagle算法相对简单且不容易出错,但却降低了网络的吞吐量,也增加了网络流量。

  在实际的TCP实现中,接收方往往一次确认一批的TCP报文,且确认报文与接收方发往发送方的报文一同回复,以减少网络流量,从另一方面说也就允许发送方在前一报文未确认时,可以继续发送下一个报文,虽然这种实现提高了吞吐量,但却带来了另一个问题,即发送文如何确认报文被接收方正确接收?

  TCP有两种方式来保证报文被正确接收:

  1:发送端在一定时期内未收到报文确认,报文重发

  2:接收端检测到某一报文丢失,重复发送ACK报文(3个以上),以促使发送端重发丢失报文。这就是快速重传机制。


  通常,发送端会重传接收方未收到的报文,但不会重传已经被接收方收到但并未确认的包,然后接收方将收到的报文排序后进行一并确认,

  如上图,由于某种原因,发送端发给接收端的数据包序号1025,丢失了序号为1的包(250839)

  此时接收端对序号1进行了确认,发送端重发了序号1,此时接收端已经有了2484个字节,序号1中有1024个字节,序号1025中的1460个字节,接收端这时回复一个确认2485的AC包。

时间: 2024-11-01 22:42:35

TCP超时/丢失重传的相关文章

TCP之超时和重传

RTT:往返时间:  RTO:Retransmission Timeout即超时重传时间: 关键点在于:超时和重传间隔的策略,即怎样确定超时间隔和重传间隔: TCP中的四个定时器:2MSL定时器:重传定时器:坚持定时器:保活定时器: 首先是如何得到RTO值:(假设已经能测量到RTT值情况下) RTO值是依赖RTT值来确定的:而鉴于网络环境的不稳定性,RTT总是变化的, RTT = 0.1*M  + 0.9*R;  M:当前测试的RTT值,R:历史RTT的值: RTO=@RTT:    @:一般取

libjingle源码解析(6)-【PseudoTcp】建立UDP之上的TCP(4):超时与重传

超时与重传       TCP是面向连接的可靠的运输层.当数据丢失时,TCP需要重传包.TCP通过设置定时器解决这种问题.     对每个连接,TCP有4个不同的定时器:         1)重传定时器:用于当希望收到另一端的确认,而没有收到时.         2)坚持定时器:使窗口大小信息保持不断流动.         3)保活定时器:可检测空闲连接另一端何时崩溃或重启.         4)2MSL定时器:测量TIME_WAIT状态的时间.       PTCP本身是没有提供定时器的,而通

《Linux高性能服务器编程》——3.9 TCP超时重传

3.9 TCP超时重传 在3.6节-3.8节中,我们讲述了TCP在正常网络情况下的数据流.从本节开始,我们讨论异常网络状况下(开始出现超时或丢包),TCP如何控制数据传输以保证其承诺的可靠服务. TCP服务必须能够重传超时时间内未收到确认的TCP报文段.为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动.如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器.至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传

《UNIX网络编程 卷1:套接字联网API(第3版)》——2.7 TIME_WAIT状态

2.7 TIME_WAIT状态 毫无疑问,TCP中有关网络编程最不容易理解的是它的TIME_WAIT状态.在图2-4中我们看到执行主动关闭的那端经历了这个状态.该端点停留在这个状态的持续时间是最长分节生命期(maximum segment lifetime,MSL)的两倍,有时候称之为2MSL. 任何TCP实现都必须为MSL选择一个值.RFC 1122[Braden 1989]的建议值是2分钟,不过源自Berkeley的实现传统上改用30秒这个值.这意味着TIME_WAIT状态的持续时间在1分钟

网络通信之校验

这是一个可选的选项,并不是所有的系统都对UDP数据包加以检验和数据(相对TCP协议的必须来说),但是RFC中标准要求,发送端应该计算检验和. UDP检验和 覆盖UDP协议头和数据,这和IP的检验和是不同的,IP协议的检验和只是覆盖IP数据头,并不覆盖所有的数据. TCP校验:首部和数据的校验和: UDP校验:ipv4中首部和数据的校验和,但是是可选的:ipv6必选: IP校验:首部校验和: TCP是基于流的:什么是流呢? UDP是基于数据包: 校验方法:二进制求反码相加即得和: TCP半关闭:

如何在Data Mover上查看TCP重传

数据在网络上以数据包为单位传输,不管网络线路有多好.网络设备有多强悍,你的数据都不会是以线性(如打电话一样)传输,中间总会出现数据包的丢失.碰到这种情况,TCP/IP协议会自动通过重传功能来重传丢失包,如果网络线路质量好.速度快,对应的网络丢包率就会低,当然重传率也会低,因此通过查看Data Mover的重传包数量就能判断网络质量及拥塞情况. 本方法适用产品:VNX和Celerra 适用版本:NAS 5.6.6.0及7.0 检查方法:使用账户nasadmin登录control station,使

TCP socket option

  Author:http://lenky.info/   Last Modified Date: 2013-02-24 Last Modified Date: 2012-12-27 Created Date: 2012-10-21   TCP_NODELAY 在网络拥塞控制领域,我们知道有一个非常有名的算法叫做Nagle算法(Naglealgorithm),这是使用它的发明人JohnNagle的名字来命名的,JohnNagle在1984年首次用这个算法来尝试解决福特汽车公司的网络拥塞问题(RF

《分布式系统:概念与设计》一3.4.6 TCP和UDP

3.4.6 TCP和UDP TCP和UDP以一种对应用程序有用的形式提供了互联网的通信能力.应用开发者可能需要其他类型的传输服务,如提供实时保证或安全性,但这些服务需要比IPv4更多的网络层支持.TCP和UDP忠实地反映了IPv4提供的应用编程级的通信设施.IPv6必然会继续支持TCP和UDP,但它包含了通过TCP和UDP无法方便访问的功能.当IPv6的部署已足够广,从而证明了那些功能的开发是必要的,那么可引入其他类型的传输服务来挖掘这些功能. 第4章从分布式程序开发者的角度描述了TCP和UDP

TCP协议疑难杂症全景分析

说明: 1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面 2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的 3).针对对象:对TCP已经有了全面了解的人.因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义 4).除了<TCP/IP详解>(卷一,卷二)以及<Unix网络编程>以及Linux源代码之外,学习网络更好的资源是RFC 5).本文给出一个提纲,如果想了解细节,请直接查阅RFC 6).翻