网络信道不可靠的点

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

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

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

消除NAK,用ACK代替NAK

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

 

 

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

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

具体如下图所示。

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

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

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

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

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

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

数据本身丢失

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

ACK丢失

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

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

提前超时

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

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/Brake/p/13849806.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!