精华内容
下载资源
问答
  • 2022-03-24 10:19:44

    超时重传:

            超时重传顾名思义就是当发送数据一定时间后没有收到回应,那么就会触发超时重传,那么超时重传的时间限制是多少呢。在计网基础学习中我们接触了时延RTT,RTT表示一次发送一次回应的总时间,RTT的时长是不确定的。而RTO是超时重传的时间,RTO的时间会略大于RTT的时间。有人会问RTT时间不是不确定的吗,怎么每次都确定RTO比RTT大一点呢?这个问题应该问学概率统计的哈哈哈。

            但是所有丢失的信息都进行超时重传效率会很低,因为要等待一段时间。

    快速重传:

            当发送的连续的数据包中有一个包丢失了,那么后续包的期望值Ack就会定位到那个包,例如一组包的序号分别为1,11,21,31,41,其中11丢失了,那么21,31,41的ack期望号Ack都会设置为11的期望接收号Ack。这样就可以快速重传信息。但是有个大问题,就是如果1包11包同时丢了,那么21,31,41都会提示1包的Ack,那么发送方就不知道是补上1包还是补上1包和11包。

    SACK:

            这种⽅式需要在 TCP 头部「选项」字段⾥加⼀个SACK的东⻄,它可以将缓存接收信息的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据。

    D-SACK:

            触发重发机制有两种情况,一个是发送的数据包丢失了,还有一种是接收到数据了,但是应答包丢失了。前面三种都是针对发送包丢失了,而D-SACK则是针对应答包丢失的情况。当应答包丢失后,发送方触发重传机制,此时接收方已有这部分数据,所以就会接祖SACK回复这部分我有了。还有一种情况是数据包发送延迟了,发送发触发快速重传,接收方接收后原先的超时数据包到达了,此时就可以用SACK表示我有数据包了。

    使用D-SACK的优点

    1.可以让发送方知道,是发送的包丢失了,还是回应的ACK丢失了

    2.可以知道是不是发送方的数据包被网络延迟了

    3.可以知道网络中是不是把发送方的数据包复制了

    更多相关内容
  • 提出了一种新型的基于反馈的网络编码(FNC)重传机制,利用seen机制中的隐含信息来获取接收方解码所需的重传分组个数,并改变了编码规则使部分分组可以提前解码。该机制不仅可以处理有固定误码率的随机分组丢失,还...
  • 无线Ad hoc网络中协作重传机制的改进
  • 一种简单的UDP网络重传机制

    千次阅读 2015-02-03 20:26:32
    功能要求是消息发送间隔1秒,需要有三次重传机制,当超过三次则改发送间隔为3秒。 1、建立消息处理结构:包括消息ID、消息状态(是否发送成功)、重传次数、重传超时时间。 2、建立接收消息线程,当受到消息...

    工作一年多,在技术层面上一直没有太大的成就。总感觉每天都在重复着一件事情,需求,改,需求,再改。在这种重复中,开始变得有些暴躁。很希望能也有所突破,今天刚刚开通了CSDN博客。决定在这个满是大牛的平台上,留下自己的每一点学习过程,也在大家面前呈现自己的编程错误和误区。希望各位大牛能不惜赐教,对文章中有的错误一定要指出来,这会是我最大的收获。

    前段时间,经手一个网络相关软件的开发。由于是新手,在接触到这个项目的时候一时没有太多的头绪。其中有一个关于UDP网络传输中的重传问题,思考了好久自己只能想到一个很耗费资源和调度的方法。最初的想法是这样的:

    功能要求是消息发送间隔1秒,需要有三次重传的机制,当超过三次则改发送间隔为3秒。

    1、建立消息处理结构:包括消息ID、消息状态(是否发送成功)、重传次数、重传超时时间。

    2、建立接收消息线程,当受到消息时,通过消息的ID将消息的状态设定为发送成功。

    3、建立发送消息方法,将消息加入发送队列,调用线程循环:判断消息状态(break)、发送消息、sleep、重传次数++、判断重传次数,修改sleep时间。


    如此一来,虽说实现了消息的发送,但是对于程序的执行起来,每一次发送都需要新起调用线程进行处理。一来程序的开销变得很大;二来,受Windows系统线程最大数量的限制,当连续收发一段时间之后软件最终崩溃了。查询得知可能是系统限制上的问题之后,居然考虑到了调用线程池的方式来处理这样的问题。在进行过一番尝试之后,发现这样的处理只是使这一块的调度变得很是复杂,且多线程之间的数据同步也出现了问题。后来在老大的建议和方案之下,进行了如下的改进。这里就用简单的代码进行说明下。

    class Message
    {
        public int Status { get; set; }	//记录消息的发送状态
        public DateTime SendTime { get; set; }	//记录消息发送的时间
        public int SendCounts { get; set; }	//记录消息发送的次数
        public int TimeOut { get; set; }		//超时时间
        ...					//其他与消息有关的项
    }

    在消息发送处理的同一事务中(注:事务在循环执行)。查询当前时间和消息发送时间的差值。

    if (msg.Status != SUCCESS)		//判断是否发送成功
    {
        TimeSpan span = DateTime.Now - msg.SendTime;
        int total = span.TotalSeconds;		//获取到当前距离发送时间的秒数。
        if (total >= msg.TimeOut)
        {
            send(msg);
            msg.SendTime = DateTime.Now;
            msg.SendCounts++;
            if (msg.SendCounts >= 3)
            {
                msg.TimeOut = 3;
            }
        }
    }

    这样当事务在循环体执行的时候会检测消息是否发送成功,也会根据发送时间来判断处理超时重发和超时将时间延长的处理了。

    上面的代码根据脑海中存留的思路进行书写的,可能在正式的使用中会出现很多问题。这里只是将这个处理过程写下来,希望能得到好的建议和改进优化的方法。

    展开全文
  • 计算机网络(5)TCP之重传机制

    千次阅读 2020-09-06 23:33:12
    这里写目录标题一级目录二级目录三级目录重传机制超时重传快速重传SACKD-SACK 一级目录 二级目录 三级目录 TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。 重传机制 TCP 实现...

    在这里插入图片描述

    TCP 是通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输的。

    TCP 实现可靠传输的方式之一,是通过序列号与确认应答。
    在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息。
    在这里插入图片描述
    但在错综复杂的网络,并不一定能如上图那么顺利能正常的数据传输,万一数据在传输过程中丢失了呢?
    所以 TCP 针对数据包丢失的情况,会用重传机制解决。
    接下来说说常见的重传机制:

    超时重传

    重传机制的其中一个方式,就是在发送数据时,设定一个定时器,当超过指定的时间后,没有收到对方的 ACK 确认应答报文,就会重发该数据,也就是我们常说的超时重传。
    TCP 会在以下两种情况发生超时重传:

    数据包丢失

    确认应答丢失

    在这里插入图片描述

    超时时间应该设置为多少呢?

    我们先来了解一下什么是 RTT(Round-Trip Time 往返时延),从下图我们就可以知道:
    RTT

    RTT 就是数据从网络一端传送到另一端所需的时间,也就是包的往返时间。
    超时重传时间是以 RTO (Retransmission Timeout 超时重传时间)表示。
    假设在重传的情况下,超时时间 RTO 「较长或较短」时,会发生什么事情呢?
    在这里插入图片描述

    上图中有两种超时时间不同的情况:

    1.当超时时间 RTO 较大时,重发就慢,丢了老半天才重发,没有效率,性能差;
    2.当超时时间 RTO 较小时,会导致可能并没有丢就重发,于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。
    精确的测量超时时间 RTO 的值是非常重要的,这可让我们的重传机制更高效。

    根据上述的两种情况,我们可以得知,超时重传时间 RTO 的值应该略大于报文往返 RTT 的值。

    在这里插入图片描述
    至此,可能大家觉得超时重传时间 RTO 的值计算,也不是很复杂嘛。
    好像就是在发送端发包时记下 t0 ,然后接收端再把这个 ack 回来时再记一个 t1,于是 RTT = t1 – t0。没那么简单,这只是一个采样,不能代表普遍情况。
    实际上「报文往返 RTT 的值」是经常变化的,因为我们的网络也是时常变化的。也就因为「报文往返 RTT 的值」 是经常波动变化的,所以「超时重传时间 RTO 的值」应该是一个动态变化的值。

    超时触发重传存在的问题是,超时周期可能相对较长。那是不是可以有更快的方式呢? 于是就可以用「快速重传」机制来解决超时重发的时间等待。

    快速重传

    TCP 还有另外一种快速重传(Fast Retransmit)机制,它不以时间为驱动,而是以数据驱动重传
    快速重传机制,是如何工作的呢?
    在这里插入图片描述
    在上图,发送方发出了 1,2,3,4,5 份数据:

    1.第一份 Seq1 先送到了,于是就 Ack 回 2;
    2.结果 Seq2 因为某些原因没收到,Seq3 到达了,于是还是 Ack 回 2;
    3.后面的 Seq4 和 Seq5 都到了,但还是 Ack 回 2,因为 Seq2 还是没有收到;
    4.发送端收到了三个 Ack = 2 的确认,知道了 Seq2 还没有收到,就会在定时器过期之前,重传丢失的 Seq2。
    5.最后,收到了 Seq2,此时因为 Seq3,Seq4,Seq5 都收到了,于是 Ack 回 6 。

    所以,快速重传的工作方式是当收到三个相同的 ACK 报文时,会在定时器过期之前,重传丢失的报文段

    快速重传机制只解决了一个问题,就是超时时间的问题,但是它依然面临着另外一个问题。就是重传的时候,是重传之前的一个,还是重传所有的问题。
    比如对于上面的例子,是重传 Seq2 呢?还是重传 Seq2、Seq3、Seq4、Seq5 呢?因为发送端并不清楚这连续的三个 Ack 2
    是谁传回来的。 根据 TCP 不同的实现,以上两种情况都是有可能的。可见,这是一把双刃剑。 为了解决不知道该重传哪些 TCP 报文,于是就有了SACK 方法

    SACK

    还有一种实现重传机制的方式叫:SACK( Selective Acknowledgment 选择性确认)。
    这种方式需要在 TCP 头部「选项」字段里加一个 SACK 的东西,它可以将缓存的地图发送给发送方,这样发送方就可以知道哪些数据收到了,哪些数据没收到,知道了这些信息,就可以只重传丢失的数据
    如下图,发送方收到了三次同样的 ACK 确认报文,于是就会触发快速重发机制,通过 SACK 信息发现只有 200~299 这段数据丢失,则重发时,就只选择了这个 TCP 段进行重复。
    在这里插入图片描述

    D-SACK

    Duplicate SACK 又称 D-SACK,其主要使用了 SACK 来告诉「发送方」有哪些数据被重复接收了。

    例一;ACK 丢包

    在这里插入图片描述
    「接收方」发给「发送方」的两个 ACK 确认应答都丢失了,所以发送方超时后,重传第一个数据包(3000 ~ 3499)

    于是「接收方」发现数据是重复收到的,于是回了一个 SACK = 3000~3500,告诉「发送方」 3000~3500 的数据早已被接收了,因为 ACK 都到了 4000 了,已经意味着 4000 之前的所有数据都已收到,所以这个 SACK 就代表着 D-SACK。

    这样「发送方」就知道了,数据没有丢,是「接收方」的 ACK 确认报文丢了

    例2:网络延时

    在这里插入图片描述
    1.数据包(1000~1499) 被网络延迟了,导致「发送方」没有收到 Ack 1500 的确认报文。
    2.而后面报文到达的三个相同的 ACK 确认报文,就触发了快速重传机制,但是在重传后,被延迟的数据包(1000~1499)又到了「接收方」;
    3.所以「接收方」回了一个 SACK=1000~1500,因为 ACK 已经到了 3000,所以这个 SACK 是 D-SACK,表示收到了重复的包。
    4.这样发送方就知道快速重传触发的原因不是发出去的包丢了,也不是因为回应的 ACK 包丢了,而是因为网络延迟了。

    可见,D-SACK 有这么几个好处: 1. 可以让「发送方」知道,是发出去的包丢了,还是接收方回应的 ACK 包丢了; 2. 可以知道是不是「发送方」的数据包被网络延迟了; 3. 可以知道网络中是不是把「发送方」的数据包给复制了;

    展开全文
  • TCP重传机制详解

    千次阅读 2022-04-11 09:38:57
    重传机制 TCP针对数据包丢失的情况,采用重传机制解决 常见的重传机制: 超时重传 快速重传 SACK D-SACK 超时重传 超时重传:当发送数据时,设立一个定时器,当超过指定时间后,发送端没有收到ACK应答报文,则触发...

    本文提纲

    在这里插入图片描述

    重传机制

    TCP针对数据包丢失的情况,采用重传机制解决
    常见的重传机制:

    1. 超时重传
    2. 快速重传
    3. SACK
    4. D-SACK

    超时重传

    超时重传:当发送数据时,设立一个定时器,当超过指定时间后,发送端没有收到ACK应答报文,则触发超时重传机制,重发该数据

    超时时间设置为多少呢?也就是超时重传时间RTO

    假设我们设置的超时重传时间过短的话,那么就很有可能造成我们数据包还没到接收端或者应答ACK没到发送方就会重传:
    在这里插入图片描述
    假设我们设置超时时间过长的话,那么就会导致数据包丢失了一段花时间,我们才重传,减低了我们网络传输效率:
    在这里插入图片描述
    所以超时时间就应该设置为一个适中的值,那拿什么作为标准呢?
    首先我们清楚一个RTT(往返时延) 的概念
    在这里插入图片描述
    所以我们的超时时间RTO的值应该略大于报文往返 RTT 的值
    因为我们的网络是经常变化的,所以我们RTT报文往返时延也会动态变化,RTO时间也会动态变化

    定时器过期很可能是由网络拥塞引起的,在拥塞的时候,如果发送端持续重传分组,会使得拥塞越来越严重。相反,TCP采用的是发送端每次的重传都是经过越来越长的时间进行的。每当遇到一次超时重传的时候,都会将下一次超时时间间隔设为先前值的两倍。两次超时,就说明网络环境差,不宜频繁反复发送。

    超时重传存在的问题之一就是超时周期过长,当我们多次丢失数据包时,这种长周期的机制就会使我们延迟发送,加大了端到端的时延

    快速重传

    为了解决这种长周期情况,TCP通常可在超时时间发生之前通过冗余的ACK来较好的检测丢包情况
    在这里插入图片描述
    因为发送方经常一个接一个地发送大量的报文段,如果一个报文段丢失,就很可能引起许多一个接一个的冗余ACK,如果TCP发送方接收到对相同数据的3个冗余ACK,它 把这当作一种指示,说明跟在这个已被确认过3次的报文段之后的报文段已经丢失.一旦收到3个冗余ACK, TCP就执行快速重传(fast retransmit) [RFC 5681 ],即 在该报文段的定时器过期之前重传丢失的报文段

    事件:收到ACK,具有ACK字段值y
    if (y > SendBase) {
    SendBase=y
    if (当前仍无任何应答报文段)启动定时器 } 
    else {/★对已经确认的报文段的一个冗余ACK */
    	对y收到的冗余ACK数加1
    	if (对y==3收到的冗余ACK数)
    		/* TCP快速重传*/
    		重新发送具有序号y的报文段
    }
    break;
    

    快速重传机制只解决了一个问题,就是超时时间的问题,但是它依然面临着另外一个问题。就是重传的时候,是重传之前的一个,还是重传所有的问题。

    SACK

    针对上述情况,改进的方法就是 SACK(Selective Acknowledgment),这种方式需要在 TCP 头部「选项」字段里加一个 SACK 的东西,简单来讲就是在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了。
    在这里插入图片描述
    如上图,发送方收到了三次同样的 ACK 确认报文,于是就会触发快速重发机制,通过 SACK 信息发现只有 200~299 这段数据丢失,则重发时,就只选择了这个 TCP 段进行重复。

    Duplicate SACK

    DSACK,即重复 SACK,这个机制是在 SACK 的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了。DSACK 的目的是帮助发送方判断,是否发生了包失序、ACK 丢失、包重复或伪重传。让 TCP 可以更好的做网络流控

    展开全文
  • TCP超时重传机制

    千次阅读 2021-06-23 10:33:39
    超时重传是TCP协议保证数据可靠性的另一个重要机制,其...[1]中文名TCP超时重传机制外文名TCP Timeout retransmission mechanism领域计算机网络所属协议TCP协议工作进程TCP数据传输功能保证TCP协议数据可靠性TCP超...
  • 移动通信网络中基于网络编码的高效组播重传机制
  • 分析了SACK机制的性能,根据TCP协议改进思想,通过模拟仿真展示了改进后无线网络中SACK机制的性能。
  • TCP协议-TCP超时重传机制

    千次阅读 2021-08-04 17:53:39
    而TCP的超时重传机制就是解决在网络异常情况下的可靠传输问题的。 二 通过序列号和确认应答提供可靠性 在TCP通信中,当发送端的数据到达接收端时,接收端会返回一个已收到消息的通知。这个通知消息叫做确认应答...
  • 05-TCP的重传机制

    2021-06-20 20:18:45
    详解 TCP 超时与重传机制 小林coding: 你还在为 TCP 重传、滑动窗口、流量控制、拥塞控制发愁吗?看完图解就不愁了 TCP的重传机制 TCP 针对数据包丢失的情况,会用重传机制解决。 常见的重传机制主要有: 超时重传 ...
  • TCP重传机制

    万次阅读 2018-09-18 21:47:57
    TCP使用两套独立的机制来完成重传,一是基于时间,二是基于确认信息的构成。  第一种基于时间的重传在其下的数据链路层、网络层乃至同层的UDP协议都有使用,即设置一个计时器来判断数据传输是否超时,当然它们...
  • TCP的四大机制一、重传机制超时重传TCP以下两种情况会发生超时重传超时时间的设置连续发生超时重传快速重传SACKDuplicate SACKD-SACK的好处二、滑动窗口三、流量控制四、拥塞控制 一、重传机制 TCP针对数据包丢失的...
  • TCP的快速重传机制

    万次阅读 多人点赞 2018-07-10 14:51:37
    一、快速重传机制 上一篇讲到了TCP 的超时重传,但是超时重传往往会带来许多微妙的问题,比如说: 当一个报文段丢失时,会等待一定的超时周期然后才重传分组,增加了端到端的时延。 当一个报文段丢失时,在其等待...
  • TCP超时与重传机制

    千次阅读 2019-07-12 16:16:11
    TCP协议是一种面向连接的可靠的传输层协议,它保证了数据的可靠传输,对于一些出错,超时丢包等问题TCP设计的超时与重传机制。其基本原理:在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送...
  • 为什么有些网络用纠错码而不用检错码和重传机制?请给出理由 解:原因一是实时服务质量的要求所致,即使发现错误,也没有时间重发一次。但是数据必须连续发送,这里可使用前置纠错。另一个原因是信道质量很差的情况下...
  • TCP 确认应答/超时重传机制

    千次阅读 2018-08-16 15:01:27
    确认应答机制(ACK) TCP将每个字节的数据都进行了编号,即为序列号: 每一个ACK都带有对应的确认序列号,意思是告诉发送者,我们已经收到了哪些数据,下一吃发送数据应该从哪里开始。 如上图,主机A给主机B...
  • 文章目录目录TCP 的重传机制(可靠性保障)超时重传快速重传SACK 方法Duplicate SACKACK 丢包场景网络延时场景 TCP 的重传机制(可靠性保障) 常见的重传机制有: 超时重传。 快速重传。 SACK(选择性确认)。 D-...
  • TCP 滑动窗口/快速重传机制

    千次阅读 2018-08-17 12:11:19
    我们知道TCP有确认应答机制,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送ACK中携带的序列号。这样保证了可靠传输。但是有时数据往返的时间比较长时,性能就比较差了。 既然这样一发一收的方式...
  • 定义了两中数据包DATA0和DATA1以支持数据切换同步和重传功能(重要), 其他类型的数据包此处不做详解。 数据必须始终以整数个字节发送, CRC仅在数据包中的数据域上计算,并且不包括PID,PID具有其自己的CRC检查...
  • TCP协议的确认重传机制

    千次阅读 2019-07-16 14:52:46
    TCP协议是面向连接的传输层协议,TCP的传输特点具有可靠性,它具有面向连接服务来确保可靠稳定传输,而确认重传机制是TCP协议保证可靠稳定传输最重要的机制,他包括累计确认、超时时间计算、快速重传等几个方面。...
  • 网络实验的回退n重传的实验代码,运行在c或c++的环境下。
  • 由于差错重传机制存在各种缺点,并不适合流媒体传输,若它的处理过程占用最小网络带宽和时间,将大大提高流媒体的质量。提出了一种基于DCCP的源端控制的选择重传机制(TBSR),其重传由决策算法决定,而发送速率和...
  • TCP/IP协议栈:TCP超时重传机制

    千次阅读 2020-10-10 08:32:45
    超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。 TCP可靠性中最重要...
  • TCP的确认应答(ACK)机制 在TCP中,当发送端的数据达到接收主机时,接收端主机会返回一个已收到消息的通知,这个消息叫做ACK(确认应答,PositiveAcknowlegementPositive AcknowlegementPositiveAcknowlegement) 通常...
  • 为了降低802.15.4网络数据帧的丢包率,分析了基于重传机制的丢包率问题,提出MAC层节点工作过程的数学模型,并分析推导了节点主要工作状态的稳态概率;然后对数据帧重传概率和丢包率进行数学分析;最后通过实验比较...
  • 针对RoF-DAS 架构下WLAN差错重传机制网络接入性能的定量关系进行分析,建立了具有内部数据的门限服务轮询(IAGP)排队模型,利用轮询系统中内部数据的到达和服务过程描述数据差错重传机制,然后基于马尔可夫链和...
  • TCP-IP详解:超时重传机制

    万次阅读 多人点赞 2016-09-11 00:52:22
    超时重传是TCP保证数据传输可靠性的又一大措施
  • 1. 确认应答机制 在TCP协议中,发送端将数据发送到接收端,接收端会自动返回一个ACK的应答,告诉发送端我已经接收到数据。TCP会给每个字节的数据赋予序列号,每一个ACK应答都会携带对应的确认序号,也就是字段中的32...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,628
精华内容 41,451
关键字:

网络重传机制