zoukankan      html  css  js  c++  java
  • 可靠数据传输基本原理(2)-解决数据丢失问题

    网络信道不可靠的点

    1. 数据在传输的过程中有可能会受损(上一篇文章说明了如何解决这个问题)

    2. 数据在传输的过程中有可能会丢失(本文说明如何解决这个问题)

    传输层的可靠性协议就是解决上面两个问题的。

    消除NAK,用ACK代替NAK

    在上一篇文章中如果接收方检测数据有失真,直接回复一个NAK给发送方,当发送方收到NAK之后对数据进行重新传递,从而实现可靠性传输,如下图所示。

    在上一篇文章的最后对每一次发送的数据引入了序列号,在序列号的基础上可以用ACK来代替NAK,彻底在数据传输过程中移除NAK。

    • 如果接收方检查数据没有损失,则直接ack当前数据的序列号
    • 如果接收方检查数据有损失,则直接ack上次成功接受的数据的序列号。
      •   发送方如果收到的ack序列号和期望的不一致,则说明数据有损,直接重传

    具体如下图所示。

    数据在传输过程中丢失怎么处理

    信道不稳定,或者路由器的缓存满了等都有可能导致传输的数据丢失。、

    具体到可靠性传输有两种类型的数据丢失:

    1. 数据本身丢失
    2. ACK丢失

    这两种丢失都可以交给发送方进行处理:重传。

    具体实现是在发送方设置一个定时器,当数据发送出去后,开启定时器,在给定的实际内(比如一个RTT)如果没有收到ACK,则认为超时,这个时候发送方启动重传。

    数据本身丢失

    数据再传输过程中丢失了,超时没有收到ack后发送方进行重新传递。

    ACK丢失

    ack丢失对于发送方来说和数据本身丢失是一样的,都是重新传送。

    但是对于接收方来说,因为已经收到了数据,需要做冗余检测,只需要简单返回ack即可。

    提前超时

    提前超时,对于接收方来说,需要做冗余检测 ,只需返回ack。对发送方,也会收到一个冗余的ack,直接忽略。

    作者:iBrake
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    百度之星资格赛1001——找规律——大搬家
    HDU1025——LIS——Constructing Roads In JGShining's Kingdom
    DP(递归打印路径) UVA 662 Fast Food
    递推DP UVA 607 Scheduling Lectures
    递推DP UVA 590 Always on the run
    递推DP UVA 473 Raucous Rockers
    博弈 HDOJ 4371 Alice and Bob
    DFS(深度) hihoCoder挑战赛14 B 赛车
    Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
    DP(DAG) UVA 437 The Tower of Babylon
  • 原文地址:https://www.cnblogs.com/Brake/p/13849806.html
Copyright © 2011-2022 走看看