可靠数据传输原理

  • 可靠数据传输中为上层实体提供的服务抽象是:数据可以通过一条可靠的信道进行传输。借助于可靠信道,传输数据比特就不会受到损坏(由0变成1,或者相反)或丢失,而其额所有数据都是按照其发送顺序进行交付。这恰恰就是TCP向调用它的因特网应用所提供的服务模型。
  • 构造可靠数据传输协议
    • 我们现在一步步研究一系列协议,他们一个比一个更为复杂,最后得到一个无错、可靠的数据传输协议。
    • 经具有特比差错信道的可靠数据传输
      • 底层信道使分组中的比特可能受损。在分组的传输、传播或缓存的过程中,这种比特差错通常会穿线在网络的物理部件中。我们先假设所有发送的分组将按其发送顺序被接收。
      • 在研发可靠通信协议之前,首先考虑一下人们会如何处理这类情况。在通常情况下,接收者在听到、理解并记下每句话后可能会说"ok"。如果报文接受者听到一句含糊不清的话时,他可能要求你重复刚才那句话。这种口述报文协议使用了肯定确认否认确认。这些控制报文使得接收方可以让发送方知道哪些内容被正确接收,哪些内容接收有误并因此需要重复。在计算机网络环境中,基于这样重传机制的可靠数据传输协议称为自动重传请求协议
      • 处理存在比特差错的情况
        • 差错检测。需要一种机制以使接收方检测到何时出现了比特差错。
        • 接收方反馈。在口述报文情况下回答的“肯定确认“(ACK)和”否定去人“(NAK)就是这种反馈的例子。我们的协议将从接收方向发送方回送ACK与NAK分组。理论上,这些分组只需要一个比特长;如用0表示NAK,用1表示ACK。
        • 重传。接收方收到了有差错的分组时,发送方将重传该分组。
    • 发送端有两个状态。在最左边的状态中,发送端协议正等待来自上层传下来的数据。当产生rdt_send(data)事件时,发送方将产生一个包含待发送数据的分组,带有校验和,然后经由udt_send(sndpkt)操作发送该分组。在最右边的状态中,发送方协议等待来自接收方的ACK或NAK分组。如果收到一个ACK分组,则发送方知道最近发送的分组已被正确接收,因此协议返回到等待来自上层的数据的状态。如果收到一个NAK分组,该协议重传最后一个分组并等待接收方为响应重传分组而回送的ACK和NAK。注意到下列事实很重要:当发送方处于等待ACK或NAK的状态时,它不能从上层获得更多的数据;这就是说,rdt_send()事件不可能出现;仅当接收到ACK并离开该状态时才能发生这样的事件。因此,发送方将不会发送一块新数据,除非发送方确信接收方已正确接收当前分组。由于这种行为,这样的协议称为停等协议。
    • 以上方式存在一个致命的缺陷,没有考虑ACK或NAK分组受损的可能性。解决这个新问题的一个简单方法(几乎所有现有的数据传输协议中,包括TCP,都采用了这种方法)是在数据分组中添加一新字段,让发送方对其数据分组编号,即将发送数据分组的序号放在该字段。于是,接收方只需要检查序号即可确认接收到的分组是否一次重传。对于停等协议这种简单情况,1比特序号就足够了,因为它可让接收方知道发送方是否正在重传前一个发送分组(接收到的分组需要与最近收到的分组序号相同),或是一个新分组(序号变化了)。因为目前我们假设信道不丢失分组,ACK和NAK分组本身不需要指明他们要确认的分组序号,发送方知道锁接收的ACK和NAK分组(无论是否是含糊不清的)是为响应其最近发送的数据分组而生成的。
    • 现在假定除了特比受损外,底层信道还会丢包,这在今天的计算机网络中并不罕见。协议现在必须处理另外两个关注的问题:怎样检测丢包以及发生丢包后该做些什么。
      • 发送方需要等待多久才能确定已丢失了某些东西呢?等待一个最坏情况的时延可能意味着要等待一段很长的时间,知道启动差错恢复为止。因此实践中采取的方法是发送方明智地选择一个时间值,以判断可能发生了丢包(尽管不能确保)。如果在这个时间内没有收到ACK,则重传该分组。注意到如果一个分组经历了一个特别大的时延,发送方可能会重传该分组,即使该数据分组及其ACK都没有丢失。这就在发送方到接收方的信道中引入了冗余数据分组的可能性。前面已经通过序号来处理冗余分组情况。
      • 从发送方的观点来看,重传是一种万能灵药。发送方不知道是一个数据分组丢失,还是一个ACK丢失,或者只是改分组或ACK过度延时。在所有这些情况下,动作是同样的:重传。为了实现基于时间的重传机制,需要一个倒计时定时器,在一个给定的时间量过期后,可中断发送方。因此,发送方需要能做到:1每次发送一个分组(包括第一次分组和重传分组)时,便启动一个定时器。2响应定时器中断(采取适当的动作)3终止定时器。
    • 现在我们归纳一下数据传输协议的要点。在检验和、序号、定时器、肯定和否定确定分组这些技术中,每种机制都在协议的运行中起到了必不可少的作用。
  • 以上是一个功能正确的协议,但并非人人都对它的性能满意,特别是在今天的高速网络中更是如此。核心问题在于它是一个停等协议。~~~~~~~~~~下回分解
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UDP协议是一种无连接的传输协议,它不对数据传输进行可靠性保证,因此在进行数据传输时,可能会出现数据丢失、重复、乱序等问题。为了保证UDP数据传输可靠性,需要使用一些技术手段进行处理,其中最常用的是使用UDP Socket实现可靠数据传输。 UDP Socket是在UDP协议基础上进行实现的一个套接字。UDP Socket可以通过设置一些参数和使用一些技术手段,来实现UDP数据传输可靠性。下面就具体介绍UDP Socket实现可靠数据传输原理。 1.数据分片 UDP Socket将数据分片传输,每个数据分片都包含一个序号,接收端可以通过序号来判断数据分片是否存在丢失、重复或者乱序等问题。如果数据分片存在以上问题,则可以进行相应的处理,从而保证数据传输可靠性。 2.确认机制 UDP Socket采用确认机制来保证数据传输可靠性。发送端在发送每个数据分片后,会等待接收端返回确认信息,确认信息包含接收到的数据的序号。如果接收端返回的确认信息与发送端发送的序号不一致,则说明数据分片存在丢失或者乱序问题,发送端需要重新发送该数据分片。 3.超时重传机制 UDP Socket采用超时重传机制来保证数据传输可靠性。发送端在发送每个数据分片后,会设置一个超时时间,在超时时间内如果未收到接收端的确认信息,则发送端会重新发送该数据分片。通过这种方式,可以保证数据分片不会因为网络问题而丢失。 4.流量控制 UDP Socket采用流量控制来保证数据传输可靠性。在数据传输的过程中,发送端需要根据接收端的处理能力来控制数据的发送速度,防止数据发送过快导致接收端无法及时处理。通过流量控制,可以避免数据丢失或者传输延迟过大的问题。 综上所述,UDP Socket实现可靠数据传输原理主要包括数据分片、确认机制、超时重传机制和流量控制等方面。通过这些技术手段,可以保证UDP数据传输可靠性,从而满足各种网络应用的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值