数据链路层

来源:互联网 发布:漳州网络诈骗举报平台 编辑:程序博客网 时间:2024/06/07 14:30

1、所谓链路(link)就是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。在进行数据通信时,两个计算机之间的通路往往是由许多的链路串接而成的。可见一条链路只是一条通路的一个组成部分。
数据链路(data link)则是另一个概念。这是因为当需要在一条线路上传送数据时,除了必须有一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输(这将在后面几节讨论)。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。现在最常用的方法是使用适配器(在许多情况下适配器就是网卡)来实现这些协议的硬件和软件。一般的适配器都包括了数据链路层和物理层这两层的功能。

2、数据链路层的主要功能如下
(1) 链路管理
(2) 帧定界
(3) 流量控制
(4) 差错控制
(5) 将数据和控制信息区分开
(6) 透明传输
(7) 寻址

3、停止等待(stop-and-wait)协议
(1)完全理想化的数据传输
所谓完全理想化的数据传输就是基于以下两个假定:
假定1: 链路是理想的传输信道,所传送的任何数据既不会出差错也不会丢失。
假定2: 不管发方以多快的速率发送数据,收方总是来得及收下,并及时上交主机。

(2)具有最简单流量控制的数据链路层协议
假定: 链路是理想的传输信道,即所传送的任何数据既不会出差错也不会丢失。
在发送结点:
(1) 从主机取一个数据帧。
(2) 将数据帧送到数据链路层的发送缓存。
(3) 将发送缓存中的数据帧发送出去。
(4) 等待。
(5) 若收到由接收结点发过来的信息(此信息的格式与内容可由双方事先商定好),则从主机取一个新的数据帧,然后转到(2)。
在接收结点:
(1) 等待。
(2) 若收到由发送结点发过来的数据帧,则将其放入数据链路层的接收缓存。
(3) 将接收缓存中的数据帧上交主机。
(4) 向发送结点发一信息,表示数据帧已经上交给主机。
(5) 转到(1)。

4、实用的停止等待协议
收方在收到一个正确的数据帧后,即交付给主机B,同时向主机A发送一个确认帧ACK (ACKnowledgement)。当主机A收到确认帧ACK后才能发送一个新的数据帧。这样就实现了收方对发方的流量控制。
现在假定数据帧在传输过程中出现了差错。由于通常都在数据帧中加上了循环冗余检验CRC (Cyclic Redundancy Check),所以结点B很容易用硬件检验出收到的数据帧是否有差错。当发现差错时,结点B就向主机A发送一个否认帧NAK (Negative AcKnowlegement),以表示主机A应当重传出现差错的那个数据帧。
在结点A发送完一个数据帧时,就启动一个超时计时器(timeout timer)。计时器又称为定时器[MINGCI94]。若到了超时计时器所设置的重传时间tout而仍收不到结点B的任何确认帧,则结点A就重传前面所发送的这一数据帧。
一般可将重传时间选为略大于“从发完数据帧到收到确认帧所需的平均时间”。

要解决重复帧的问题,必须使每一个数据帧带上不同的发送序号。每发送一个新的数据帧就把它的发送序号加1。若结点B收到发送序号相同的数据帧,就表明出现了重复帧。这时应当丢弃这重复帧,因为已经收到过同样的数据帧并且也交给了主机B。但应注意,此时结点B还必须向结点A发送一个确认帧ACK,因为结点B已经知道结点A还没有收到上一次发过去的确认帧 ACK。

对于停止等待协议,由于每发送一个数据帧就停止等待,因此用一个比特来编号就够了。一个比特可以有0和1两种不同的序号。

虽然物理层在传输比特时会出现差错,但由于数据链路层的停止等待协议采用了有效的检错重传机制,数据链路层对上面的网络层就提供了可靠传输的服务。

5、停止等待协议的算法
在发送结点:
(1) 从主机取一个数据帧。
(2) V(S)←0。 {发送状态变量初始化}
(3) N(S)←V(S); {将发送状态变量的数值写入发送序号}
将数据帧送交发送缓存。
(4) 将发送缓存中的数据帧发送出去。
(5) 设置超时计时器。 {选择适当的超时重传时间tout }
(6) 等待。 {等待以下(7) ~ (9)这三个事件中最先出现的一个}
(7) 若收到确认帧ACK,则:
从主机取一个新的数据帧;
V(S)←[1  V(S)]; {更新发送状态变量,变为下一个序号}
转到 (3)。
(8) 若收到否认帧NAK,则转到(4)。 {重传数据帧}
(9) 若超时计时器时间到,则转到(4)。 {重传数据帧}

在接收结点:
(1) V(R)←0。 {接收状态变量初始化,其数值等于欲接收的数据帧的发送序号}
(2) 等待。
(3) 当收到一个数据帧,就检查有无产生传输差错(如用CRC)。
若检查结果正确无误,则执行后续算法;
否则转到(8)。
(4) 若 N(S) = V(R),则执行后续算法; {收到发送序号正确的数据帧}
否则丢弃此数据帧,然后转到(7)。
(5) 将收到的数据帧中的数据部分送交主机。
(6) V(R)←[1  V(R)]。 {更新接收状态变量,准备接收下一个数据帧}
(7) 发送确认帧 ACK,并转到(2)。
(8) 发送否认帧 NAK,并转到(2)。

由于发送端对出错的数据帧进行重传是自动进行的,所以这种差错控制体制常简称为ARQ (Automatic Repeat reQuest),直译是自动重传请求,但意思是自动请求重传

6、停止等待协议的定量分析

7、连续ARQ协议
ACKn表示对第(n – 1)号帧的确认。这表示对发送方说:“我已正确收到了第(n – 1)号帧,下一次我期望收到第n号帧”。
连续ARQ又称为Go-back-N ARQ,意思是当出现差错必须重传时,要向回走N个帧,然后再开始重传。
思考:在连续ARQ协议中,若WT = 7,则发送端在开始时可连续发送7个数据帧。因此,在每一帧发出后,都要置一个超时计时器。现在计算机里只有一个硬时钟。设这7个数据帧发出的时间分别为t0, t1, …, t6,且tout都一样大。试问如何实现这7个超时计时器(这叫软时钟法)?

8、滑动窗口的概念
发送窗口用来对发送端进行流量控制,而发送窗口的大小WT代表在还没有收到对方确认信息的情况下发送端最多可以发送多少个数据帧。
为了减少开销,连续ARQ协议还规定接收端不一定每收到一个正确的数据帧就必须立即发回一个确认帧,而是可以在连续收到好几个正确的数据帧以后,才对最后一个数据帧发确认信息,或者可以在当自己有数据要发送时才将对以前正确收到的帧加以捎带确认。
同理,在接收端设置接收窗口是为了控制可以接收哪些数据帧而不可以接收哪些帧。在接收端只有当收到的数据帧的发送序号落入接收窗口内才允许将该数据帧收下。在连续ARQ协议中,接收窗口的大小WR = 1。
这种协议又称为滑动窗口协议。当发送窗口和接收窗口的大小都等于1时,就是我们最初讨论的停止等待协议。

9、可以证明,当用n个比特进行编号时,若接收窗口的大小为1,则只有在发送窗口的大小WT2n1 时,连续ARQ协议才能正确运行

10、选择重传ARQ协议
为进一步提高信道的利用率,可设法只重传出现差错的数据帧或者是计时器超时的数据帧。但这时必须加大接收窗口,以便先收下发送序号不连续但仍处在接收窗口中的那些数据帧。等到所缺序号的数据帧收到后再一并送交主机。这就是选择重传ARQ协议

对于选择重传ARQ协议,接收窗口显然不应该大于发送窗口。若用n比特进行编号,则可以证明,接收窗口的最大值受下式的约束
WR2n/2
当接收窗口WR为最大值时,WT=WR=2n/2。例如在n = 3时,可以算出WT=WR=4

1 0
原创粉丝点击