计算机网络——自顶向下方法

1.计算机网络与因特网

2.应用层

3.运输层

3.1 概述

3.2 多路复用与多路分解

3.3 无连接传输

3.4 可靠数据传输原理

3.4.1 可靠数据传输协议

由于信道的不可靠,所以需要一个协议解决在下层信道(如IP)不可靠的情况下如何保证我们的数据依然能够正确且顺利的传输到目标手中。对于解决不同的问题产生了不同rdt(reliable data transfer protocol)协议,为了描述在每一个阶段数据发送方和接收方的状态,我们可以采用有限状态机(Finite-state machine)STM的形式来描述.

以下的过程描述了应用层,传输层之间的数据交互,其中的unreliable channel可以理解为网络层等层面。

发送方应用通过rdt_send()的方法将数据交给传输层,传输层通过udt_send()的方式将数据交给不可靠的信道,接收方以rdt_rcv()的形式将数据接收,之后交互给上层应用使用

计算机网络——自顶向下方法

a. rdt 1.0——完全可靠的数据传输

该协议假设我们的传输过程的信道是完全可靠的,不存在bit出错,丢包等情况的发生。

FSM如下:

计算机网络——自顶向下方法

  • 发送方:接收上层数据并发送
  • 接收方:接收数据并发送给上层使用

b. rdt 2.0——具有bit差错的信道

该协议假设了在传输过程中出现bit差错的情况,并且对于该情况进行了处理,处理的基本思路为接收方通过发送的校验码验证数据的可靠性,并且向发送方发送ACK(Acknowledge)或者NAK的包,从而发送发决定是否需要重新发送。

计算机网络——自顶向下方法

如图

  • 发送方:

    1. 发送上层给出的数据
    2. 等待接收方的ACK/NAK数据包
    3. 若为NAK重新发送数据包
  • 接收方:

    1. 接收发送方发送的数据包,并且验证数据包的完整性
    2. 若数据包可靠发送ACK给发送端并交互给上层调用
    3. 否则发送NAK给发送端

c. rdt 2.1——具有ACK/NAK受损处理机制

上述的情况,没有考虑到在传输的过程中ACK或者NAK受损的情况,在rdt 2.1中对于ACK以及NAK受损的情况作出了一定的处理,主要思路为采用序号的形式对每一个数据包进行编号。

计算机网络——自顶向下方法

当ACK/NAK不受损时,处理过程同2.0

发送方FSM:(最坏结果)

  1. 得到上层的数据分组,并且对其编号发送,等待接收方的ACK/NAK
  2. 接收到错误分组或者NAK,重新发送0号数据包
  3. 收到ACk,发送1号数据包

计算机网络——自顶向下方法

接收方FSM:

  1. 0号数据包无错误,发送ACK,有错误发送NAK
  2. 0号数据包无错误但是失序,发送ACK 0

由该协议可能引出下面两个问题:

  1. 接收方在等待1号数据包状态下,为什么会收到0号数据包(has_seq0(rcvpkt))?
  2. 收到失序的0号数据包,为什么发送ACK而不是NAK?

由于0号数据包的ACK受损,导致发送方以为接收方并没有收到,所以重新发送了0号数据包

在本该收到1号数据,但是收到了失序的0号数据,这个时候接收方需要1号数据,那么只需要舍弃0号数据发送ACK告诉发送方已经收到0号数据就可以让发送方发送1号数据

d. rdt 2.2——无NAK

在2.1的基础上,2.2取消了NAK,对于没有收到或者出错的数据包,我们只需要发送前一个需要的ACK就可以让发送方重新发送上一个数据包(该协议较为简单不做解释)

计算机网络——自顶向下方法

计算机网络——自顶向下方法

e. rdt 3.0——有比特差错的丢包信道

上述的所有协议都没有解决发送方在发送数据包后丢失数据包的情况,在3.0中采用了计时器的方式解决了丢包的情况(注意该协议中已经没有了NAK

计算机网络——自顶向下方法

发送方FSM:

  1. 发送#0,并且启动一个计时器
  2. 接收到ACK,停止计时器
  3. 计时器时间到达但是未收到ACK,停止计时器

接收方的FSM同2.2

上述协议都为停止等待协议(SW),其链路利用率都较低,所以需要流水线协议对链路利用率进行提高。

3.4.2 流水线可靠传输协议(pipeline)

在SW协议中,数据都为发送#0——接收#0——发送#1——接收#1的形式,为了提高链路的使用效率,允许在对方未确认的情况下发送多个分组

下面介绍两种Pipeline协议:

  • GBN协议
  • SR协议

对于接受方与发送方的接受发送关系我们可以有以下三种

发送方一次发送的分组接收方一次接受的分组协议名称
$=1$=1SW协议
$\geq1$=1GBN协议
$\geq1$$\geq1$SR协议

滑动窗口:

计算机网络——自顶向下方法

对于上层发送的数据可以组成一个缓冲区,发送窗口为已经发送的数据组成的一个区域(有最大值),当某些数据被确认,发送窗口移动。(当0-1未被确认,2-3得到确认发送窗口无法移动

3.4.3 GBN协议(GO-Back-N)

计算机网络——自顶向下方法

发送方:

  • 上层调用:当上层发送一个数据

    • 首先检查发送窗口是否已满,如果未满,将数据发送并且移动发送窗口

      • 如果没有已发送未确认的分组,启动定时器
    • 如果已满,拒绝上层的数据(或者放于缓冲区等待发送)
  • 收到一个ACK:发送窗口后沿移动,如果没有未确认分组,那么计时器停止
  • 超时事件:重发这n个分组,重新启动定时器

由于在接受方只有在按序的分组才会发送ACK,所以不存在[0,1,2,3,4,5]这样的发送窗口收到1的ACK但是没有收到0的ACK的情况

计算机网络——自顶向下方法

接收方FSM:

  1. 如果接受到#n的分组并且按序,发送ACK,否则发送最近按序分组ACK并且丢弃失序分组

3.4.4 SR协议(Selective-Repeat)


标签:暂无标签
版权属于:Jtripper 所有,转载请注明文章来源。

本文链接: https://www.jtripperbacaf.com/index.php/archives/54/

赞 (0)

评论区

发表评论

34+18=?

暂无评论,要不来一发?

回到顶部