0%

数据链路控制

数据链路层的两个主要功能是数据链路控制和介质访问控制。数据链路控制的功能是处理两个临近节点之间通信。这个功能的主要职能是流量控制和差错控制。介质访问控制是控制如何共享链路。
数据链路控制的功能包括成帧、流量控制和差错控制,以及能提供帧在节点之间流畅且可靠传输的软件实现协议。

一、成帧

1、固定长度成帧
2、可变长度成帧(以下讨论内容均是对此分类而言)
3、面向字符协议
(1)在面向字符协议中,数据用来自ASCII编码系统的八位字符传输。头部通常携带源端地址和目的端地址以及其他控制信息,而尾部携带检错或纠错冗余位,也是8位的倍数。为了将一个帧与下一个分离开来,在帧的开始和结束增加了8位(1字节)的标记。
(2)标记的选择使用字节填充策略,字节填充(或字符填充)是指如果存在与标记相同模式的字符的话,便在帧的数据部分填入一个特殊的字节。数据段被填入一个额外的字节,这个字节通常称为转义字符,它有预定义的位模式。当接收方遇到转义字符时,便会将它从数据段移走,并仍将下一字符作为数据处理,而不是当作分界的标记。同时,作为文本一部分的转义字符必须能被另一个转义字符标注。换言之,如果转义字符时文本的一部分,那么要增加额外的转义字符来表明第二个转义字符时文本的一部分。
(3)和如今广泛应用的编码系统,例如Unicode有16位和32位字符,就会与8位字符的面向字符协议产生冲突。所以面向位协议将是大势所趋。
4、面向位协议
(1)在面向位协议中,帧的数据段是一个可变长的位的序列。多数协议使用一个特殊的8位模式的标记01111110作为分隔符来标明帧的开始和结束。
(2)位填充是指在遇到1个0后面紧跟着5个1时便添加一个0的过程,使得接收方不会误认0111110是一个标记。当碰到在5个1以后如果是0,仍然填充0,这个0将会被接收方移走。这就意味着如果有类似标记的模式01111110出现在数据中时,它会变成011111010(填充后),而不会被接收方误认为是一个标记。而真正的标记01111110是不会被发送方填充的,故而能被接收方正确地确认。

二、流量控制

每个接收设备都有一块存储区,称之为缓冲区,存储进入的数据直到它们被处理。如果缓冲区也装满了,接收方必须能告知发送方停止传输直到它能够再次接收为止。

三、差错控制

在数据链路层,差错控制通常指差错检测和重传的方法。数据链路层的差错控制基于自动重复请求,即重传数据。

四、无噪声通道协议

最简单的协议

1、ACK是确认帧,NAK是否定确认帧。
2、发送方数据链路层的程序不断地运行着,直到有来自网络层的请求才会有行为。接收方数据链路层的程序也不断地运行着,直到有来自物理层的通知才会有行为。两端的程序都在不断地运行,因为它们不知道相关事件何时发生。

停止等待协议

1、当发送方发出一个帧后必须停下来直到接收到来自接收方的确认,然后再发送一个帧。与上一个协议相比,这个协议里加入了流量控制。
2、需要一个半双工的链路来实现。
3、在这个协议中发送方会发生两个事件:来自网络层的请求或来自物理层的通知。对这些事件的响应必须是交替的。换言之,当发送一个帧后,算法必须忽略另一个网络层的请求直到该帧被确认。

五、有噪声通道

停止等待自动重复请求(Stop-and-Wait ARQ)

1、为了检测和纠正被损坏的帧,我们需要给数据帧加上冗余的位。当帧到达接收方站点时,它被检测,如果它被损坏了,它会被无声地丢弃。
2、发送方保留已发送帧的副本。与此同时,它启动一个定时器。如果定时器到时间没有收到已发送帧的ACK,就要重发该帧,保留副本并重启定时器。
3、既然一个ACK帧同样会被损坏或丢弃,它也需要冗余位和一个序列号。
4、序列号是循环的,决定字段m位长,序列号从0开始,到2^m-1,再开始重复。在停止等待ARQ中,我们使用序列号给帧编号。该序列号基于模2运算。
5、序列号必须既适用于数据帧,也要适用于ACK帧。确认号总是告知接收方期待的下一个帧的序列号,位于ACK帧中。一个数据帧使用一个序列号,一个ACK帧使用一个确认号。
6、发送设备保留最后传输的帧的副本直到接收到该帧的确认。

回退N帧自动重发请求(Go-Back-N Automatic Repeat Request)

1、为了提高传输的效率(填满管道),在等待确认时传输多个帧。
2、帧在发送站点按序号编号。为了让每一个帧的头部中包含序列号,我们需要设置一个限制值。如果一个帧的头部允许序列号有m位,序列号的范围就是0到2^m-1。换言之,序列号是模2^m。
3、滑动窗口定义了发送方和接收方关心的序列号范围。发送方关心的序列号范围称为发送滑动窗口,接收方关心的则称为接收滑动窗口。
4、在任何时刻窗口将可能适用的序号分成四部分。第一部分:从最左端到窗口的左墙,定义了已经被确认的帧的序号。发送方不用担心这些帧,也不用保留他们的副本。第二部分:定义了属于已发送但处于未知状态的帧的序号。发送方必须等待直到直到这些帧被接收或者丢失。我们称这些帧位待处理的帧。第三部分:显示了发送窗口即将要发送的帧的序号范围,但还没有从网络层接收到相对应的数据包。第四部分:显示了那些直到窗口滑动才能使用的序号。
5、发送窗口是一个抽象概念,通过三个变量Sf(发送窗口,第一个待处理的帧),Sn(发送窗口,下一个要发送的帧)和Ssize(发送窗口,大小)定义的一个大小为2^m-1的假想盒子。
6、在此协议中,确认是累加的,这意味着一个ACK帧可以确认一个以上的帧。有效确认到达时,发送窗口能滑动一个或者多个时隙。
7、接收窗口的大小始终是1。也就是说接收方总是在等待一个指定帧的到达。任何到达的失序帧都会被丢掉并要求重发。因此,接收窗口时一个抽象概念,通过唯一变量Rn(接收窗口,期待的下一个帧)定义了一个大小为1的假想盒子。当一个正确的帧到达后,窗口滑动,但每次只滑动一个时隙。
8、在该协议中只对第一个待处理的帧使用定时器,原因是第一个待处理帧的计时器总是先到时。当计时器到时间时,发送方返回从计时器到时间的那个帧开始重发所有的帧。这就是这个协议称之为回退N帧自动重发请求协议的原因。
9、接收方不需要确认每一个收到的帧,它能为多个帧发送一个累积的确认。
10、停止等待ARQ是一种窗口大小为1的特殊的回退N步帧ARQ协议。

选择性重复ARQ(Selective Repeat ARQ)

1、窗口的大小为2^(m-1),而且接收窗口与发送窗口的大小一样,最多只能是2^m的一半。
2、选择性重复协议允许与接收窗口大小一样多的帧乱序到达,并被保留直到有一组帧能交付给网络层。但是,接收方从不会将无序的数据分组交付给网络层。
3、该协议与上一个协议的一个主要区别是定时器的数量。在这个协议中,每发送一个帧都需要一个定时器。
4、将帧交付给网络层有两个条件:第一,一组连续帧到达;第二,这组帧从窗口的起点开始。
5、在该协议中,只有当数据被交付到网络层时才发送ACK。就算属于一个时隙的n个帧的数据被传输,也只发送一个ACK。

六、捎带

当一个帧从A到B运载数据时,它也能从从A运载关于帧到达或丢失的控制信息,当一个帧从B到A运载数据时,它也能从B运载关于帧到达或丢失的控制信息。

七、高级数据链路控制(HDLC)

高级数据链路控制是一种面向位的点到点和多点链路进行通信的协议。它实现了前面讨论的ARQ机制。

八、HDLC的配置和传输方式

正常响应方式(normal response mode,NRM)

在正常响应方式中,站点配置是不平衡的。有一个主站和多个从站。主站能发送指令,而从站只能响应。NRM能在点到点和多点链路中使用。

异步平衡方式(asynchronous balanced mode,ABM)

在异步平衡方式中,配置是平衡的。每个站点既有主站的功能又有从站的功能。

九、HDLC定义的帧

1、HDLC定义了三种类型的帧:信息帧(information frames,I-frames)、管理帧(supervisory frames,S-frames)、无编号帧(unnumbered frames,U-frames)。每一种类型的帧都在不同类型的信息传输中扮演信封的角色。信封帧用来传输用户数据以及与用户数据相关的控制信息(捎带)。管理帧只用来传输控制信息,保留无编号帧作为系统管理之用,其携带的信息用来管理链路自身。
2、帧的格式
在HDLC中,每个帧都最多可包含六个字段:开始字段、地址字段、控制字段、信息字段、帧校验序列字段、结束标记字段。在多帧传输中,一个帧的结束标记可以作为下一个帧的开始标记。
信息帧:开始字段、地址字段、控制字段、用户信息字段、帧校验序列字段、结束标记字段;
管理帧:开始字段、地址字段、控制字段、帧校验序列字段、结束标记字段;
无编号帧:开始字段、地址字段、控制字段、管理信息字段、帧校验序列字段、结束标记字段;

字段

1、标记字段:一个HDLC帧的标记字段是8位序列,其模式是01111110,既可作为一个帧的开始也可作为一个帧的结束,为接收方提供同步模式。
2、地址字段:一个地址字段可能是一个字节也可能是多个字节,这取决于网络的需求。1字节可以最多定义128个站点(1个位用于其他目的了)。如果地址字段多于一个字节,所有的字节除了最后一个字节外都以0结束,只有最后一个字节以1结束。中间的字节都以0结束是为了提示接收方会有更多的地址字节到来。
3、控制字段:控制字段是HDLC帧的一个字节或是两个字节段,用于流量控制和差错控制。
4、信息字段:信息字段包含了来自网络层的用户数据或者管理信息。不同的网络该字段的长度不同。
5、帧校验序列字段:帧校验序列字段(FCS)是HDLC的差错校验字段。它可以包含2到4字节的ITU-T CRC。

控制字段

控制字段决定帧的类型及其功能。其格式对于一种类型的帧是特定的。
1、信息帧的控制字段:信息帧被设计用来运载来自网络层的用户数据,而且信息帧也能包含流量控制和差错控制信息(捎带)。控制字段的子字段用来定义这些功能。
第一个位决定类型。如果控制字段的第一个位是0,这就意味着这是一个信息帧。
第二、三、四位称为N(s),定义帧的序号。(也可以更多位)
第五位(在N(S)和N(R)之间的单个位)称之为P/F位。当帧由主站发送到从站时,它意味着轮询。当帧由从站向主站发送时,它意味着终止。
第六、七、八位称为N(R),在使用捎带时与确认号相对应
控制字段

2、管理帧的控制字段:
第一二位是固定的,管理帧没有信息字段,如果控制字段的前两个位是10,就说明这是一个管理帧。
第三、四位用来决定管理帧自身的类型。两个位讷讷感产生四种类型的管理帧。
准备接收(RR):00.对一个或一群安全接收的帧加以确认。N(R)定义了确认号。
不准备接收(RNR):10.这是一类有附加功能的RR帧。它对一个或一群帧的接收加以确认,并宣布接收方正忙不能接收更多的帧。它通过要求发送方减速来实现拥堵控制机能。
拒收(REJ):01.用在回退N帧ARQ协议中的NAK。
选择性拒收(SREJ):11.用在选择性重复ARQ协议的NAK帧
第五、六、七、八位与信息帧相同。

3、无编号帧的控制字段
第一、二位是固定的,为11。
第三、四位和第六、七、八位共能产生32种不同类型的无编号帧。

十、点到点协议(Point-to-Point Protocol,PPP)

成帧

PPP帧的格式
1、标记。一个PPP帧分别以位模式为01111110的一个字节标记开始和结束.虽然这个位模式与在HDLC中使用的相同,但是PPP是一个面向字节的协议,而HDLC是一个面向位的协议。这个标记将作为字节处理。
2、地址。在这个协议中地址字段是常量11111111(广播地址),协商时双方可同意省略这个字节。
3、控制。这个字段被设定为常量11000000(仿效HDLC中的无编号帧)。PPP不提供任何流量控制。关于差错检测方面的差错控制也是有限的。这就意味着这个字段是根本不需要的,而在协商时,双方能达成一致忽略这个字节。
4、协议。协议字段指明了数据字段承载着什么:用户数据或者其他信息。这个字段被默认为2个字节,而且在协商时,双方能达成一致忽略这个字节。
5、有效载荷字段。这个字段承载着用户数据或者其他信息。如果标记字节模式出现在数据字段的话,数据字段就是字节填充(转义)的。
6、帧校验序列。简单的2到4字节标准CRC。

PPP是一个面向字节的协议,它的标记时一个字节,通过转义字节01111101来进行字节填充。

传输阶段

1、闲置
2、建立
3、鉴别
4、联网
5、打开
6、终止
转换阶段

多路复用

PPP定义了三组协议使得它更为强大:链路控制协议(LCP),两个鉴别协议(CHAP和PAP)和多个网络控制协议(NCP)。
1、链路控制协议(Link Control Protocol,LCP)的职责是建立、维系、确认并终止链路。所有的LCP分组都位于PPP帧的有效载荷字段中,该帧的协议字段被设定为十六进制的c021。
一个帧中的LCP分组
2、分组可以分为三类。第一类:用于建立阶段的链路配置。第二类:在终止阶段用于链路终止。第三类:用于链路的监控和调试。
3、ID字段持有一个将请求和应答相匹配的值。一个端点将一个值插入这个字段,这个值边被复制到应答分组中。长度字段决定了整个LCP分组的长度。信息字段一般会被分成三段:选项类型,选项长度和选项数据。用于协商两个端点之间的选项。

鉴别协议

因为PPP被设计用于拨号链路中,这就使得鉴别具有很重要的作用。
1、口令鉴别协议(Password Authentication Protocol,PAP)的鉴别过程:
需要访问系统的用户发送一个鉴别身份(通常是用户名)和一个口令。
系统检测身份和口令的合法性,并选择接受链接或拒绝连接。
2、当一个PPP帧承载PAP分组时,协议字段的值时0xC023。这三个PAP分组分别是鉴别-请求,鉴别-确认和鉴别-不确认。
3、查询握手鉴别协议(Challenge Handshake Authentication Protocol,CHAP)的鉴别过程:
系统发送给用户一个包含查询值的查询分组。
用户应用一项预定义功能,根据查询值和用户自身的口令产生一个结果。用户将结果放入一个响应分组发送给系统。
系统同样操作。它应用同样的功能,使用户的口令(系统已知的)和查询值产生一个结果。如果这个结果与响应分组中发送的结果相同,则访问被允许;否则,访问被拒绝。
4、CHAP分组以十六进制的协议值C223封装在一个PPP帧中。有四种CHAP分组:查询、响应、成功或失败。

网络控制协议

1、注意:没有一个网络控制协议承载网络层数据,它们仅仅是在网络层为进入的数据配置链路。
2、互联网络协议控制协议(Internet Protocol Control Protocol,IPCP)配置用于承载因特网中IP分组的链路。该协议字段的值是0x8021。

十一、多链路PPP

逻辑帧的一段有多个实际PPP帧的有效载荷字段所承载。必须通过在实际PPP帧上增加一系列数字以说明这部分在逻辑帧中的位置。