第4章数据链路层 第4章数据链路层 本章基本要求:掌握数据链路层的功能与作用,掌握差错控制的作用和原理,掌握数 据链路层的设备与组件:理解常用的成顿方式,理解流量控制的作用和原理,理解HDLC 协议的主要内容。 本章难点:差错控制,滑动窗口协议 数学时数与实验:4.5学时,无实哈 上一章我们己经学习了物理层的有关知识,本章我们将介绍数据链路层的相关知识, 包括数据链路层的功能以及实现这些功能的若干重要机制。 4.1数据链路层概述 4.1.1为什么需要数据链路层 至少有两个理由可用来说明数据链路层存在的必要性。首先,尽管物理层采取了一些 必要的措施来减少信号传输过程中的噪声,但是数据在物理传输过程中仍然可能损坏或丢 失。由于物理层只关心原始比特流的传送,所以物理层不考虑也不可能考虑所传输信号的 意义和信息的结构,也就是说物理层不可能识别或判断数据在传输过程中是否出现了损坏 或丢失,从而也谈不上采取什么方法进行补救。其次,物理层也不考虑当发送站点的发送 速度过快而接收站点接收的速度过慢时,应采取何种策略来控制发送站点的发送速度,以 避免接收站点来不及处理而丢失数据。可见只有物理层的功能是不够的,位于物理层之上 的数据链路层就是为了克服物理层的这些不足而建立的。 数据链路层旨在实现网络上两个相邻节点之间的无差错传输。它利用了物理层提供的 原始比特流传输服务,检测并校正物理层的传输差错,使在相邻节点之间构成一条无差错 的链路,从而向网络层提供可靠的数据传输服务。 4.1.2相邻节点的概念 那么何为相邻节点呢?所谓相邻节点是指由同一物理链路连接的所有节点。因此,不 仅图4.1(a)所示的网络环境中的两个节点属于相邻节点,图4.1(b)中的四个由同一物理线路 连接的节点也属于相邻节点。相邻节点的最主要特征是节点之间的数据通信不需要经过其
第 4 章 数据链路层 1 第 4 章 数据链路层 本章基本要求:掌握数据链路层的功能与作用,掌握差错控制的作用和原理,掌握数 据链路层的设备与组件;理解常用的成帧方式,理解流量控制的作用和原理,理解 HDLC 协议的主要内容。 本章难点:差错控制,滑动窗口协议 教学时数与实验:4-5 学时,无实验。 上一章我们已经学习了物理层的有关知识,本章我们将介绍数据链路层的相关知识, 包括数据链路层的功能以及实现这些功能的若干重要机制。 4.1 数据链路层概述 4.1.1 为什么需要数据链路层 至少有两个理由可用来说明数据链路层存在的必要性。首先,尽管物理层采取了一些 必要的措施来减少信号传输过程中的噪声,但是数据在物理传输过程中仍然可能损坏或丢 失。由于物理层只关心原始比特流的传送,所以物理层不考虑也不可能考虑所传输信号的 意义和信息的结构,也就是说物理层不可能识别或判断数据在传输过程中是否出现了损坏 或丢失,从而也谈不上采取什么方法进行补救。其次,物理层也不考虑当发送站点的发送 速度过快而接收站点接收的速度过慢时,应采取何种策略来控制发送站点的发送速度,以 避免接收站点来不及处理而丢失数据。可见只有物理层的功能是不够的,位于物理层之上 的数据链路层就是为了克服物理层的这些不足而建立的。 数据链路层旨在实现网络上两个相邻节点之间的无差错传输。它利用了物理层提供的 原始比特流传输服务,检测并校正物理层的传输差错,使在相邻节点之间构成一条无差错 的链路,从而向网络层提供可靠的数据传输服务。 4.1.2 相邻节点的概念 那么何为相邻节点呢?所谓相邻节点是指由同一物理链路连接的所有节点。因此,不 仅图 4.1 (a)所示的网络环境中的两个节点属于相邻节点,图 4.1(b)中的四个由同一物理线路 连接的节点也属于相邻节点。相邻节点的最主要特征是节点之间的数据通信不需要经过其
2 计算机网络技术 他交换设备的转发。 a b 图4.1相邻节点的示例 4.1.3数据链路层需要解决的主要问题 为实现相邻节点之间的可靠传输,数据链路层必须要解决以下问题:在相邻的节点之 间确定一个接收目标,即实现物理寻址:提供一种机制使得接收方能识别数据流的开始与 结束:提供相应的差错检测与控制机制以使有差错的物理链路对网络层表现为一条无差错 的数据链路:提供流量控制机制以保证源和目标之间不会因发送和接收速率不匹配而引起 数据丢失。 下面我们分几个小节来介绍数据链路层解决这些问题的相关机制。 4.2帧与成帧 为了实现上述诸如差错控制、物理寻址和流量控制等一系列功能,数据链路层必须要 使自己所看到的数据是有意义的,其中除了要传送的用户数据外,还要提供关于寻址、差 错控制和流量控制所必需的信息,而不再是物理层所谓的原始比特流。为此,数据链路层 采用了被称为帧(am)的协议数据单元作为数据链路层的数据传送逻辑单元。不同的数据 链路层协议的核心任务就是根据所要实现的数据链路层功能来规定帧的格式。 4.2.1帧的基本格式 尽管不同的数据链路层协议给出的帧格式都存在一定的差异,但它们的基本格式还是 大同小异的。图42给出了帧的基本格式,组成帧的那些具有特定意义的部分被称为域或宁 段(field)。 帧开始 地址 长度/类型控制 数据FCS 帧结束 图4.2帧的基本格式 其中,帧开始字段和帧结束字段分别用以指示顿或数据流的开始和结束。地址字段给 出节点的物理地址信息,物理地址可以是局域网网卡地址,也可以是广域网中的数据链路
2 计算机网络技术 他交换设备的转发。 (a) (b) 图 4.1 相邻节点的示例 4.1.3 数据链路层需要解决的主要问题 为实现相邻节点之间的可靠传输,数据链路层必须要解决以下问题:在相邻的节点之 间确定一个接收目标,即实现物理寻址;提供一种机制使得接收方能识别数据流的开始与 结束;提供相应的差错检测与控制机制以使有差错的物理链路对网络层表现为一条无差错 的数据链路;提供流量控制机制以保证源和目标之间不会因发送和接收速率不匹配而引起 数据丢失。 下面我们分几个小节来介绍数据链路层解决这些问题的相关机制。 4.2 帧与成帧 为了实现上述诸如差错控制、物理寻址和流量控制等一系列功能,数据链路层必须要 使自己所看到的数据是有意义的,其中除了要传送的用户数据外,还要提供关于寻址、差 错控制和流量控制所必需的信息,而不再是物理层所谓的原始比特流。为此,数据链路层 采用了被称为帧(frame)的协议数据单元作为数据链路层的数据传送逻辑单元。不同的数据 链路层协议的核心任务就是根据所要实现的数据链路层功能来规定帧的格式。 4.2.1 帧的基本格式 尽管不同的数据链路层协议给出的帧格式都存在一定的差异,但它们的基本格式还是 大同小异的。图 4.2 给出了帧的基本格式,组成帧的那些具有特定意义的部分被称为域或字 段(field)。 帧开始 地址 长度/类型/控制 数据 FCS 帧结束 图 4.2 帧的基本格式 其中,帧开始字段和帧结束字段分别用以指示帧或数据流的开始和结束。地址字段给 出节点的物理地址信息,物理地址可以是局域网网卡地址,也可以是广域网中的数据链路
第4章数据链路层 3 标识,地址字段用于设备或机器的物理寻址。第三个字段则提供有关帧的长度或类型的信 息,也可能是其他一些控制信息。数据字段承载的是来自高层即网络层的数据分组(packet)。 帧检验序列FCS(Frame Check Sequence)字段提供与差错检测有关的信息。通常数据字段之 前的所有字段被统称为帧头部分,而数据字段之后的所有字段被称为帧尾部分。 4.2.2成帧与拆帧 从顺的基本格式可以看出,帧提供了与数据链路层功能实现相关的各种机制,如寻址 差错控制、数据流定界等。可以说数据链路层协议将其要实现的数据链路层功能集中体现 在其所规定的帧格式中。引入帧机制不仅可以实现相邻节点之间的可靠传输,还有助于提 高数据传输的效率。例如,若发现接收到的某一个(或几个)比特出错时,可以只对相应 的姊讲行特殊处理(如请求重发等),而不需要对其他未出错的城讲行这种处理:如果发现 某一帧被丢失,也只要请求发送方重传所丢失的帧,从而大大提高了数据处理和传输的效 率。但是,引入顺机制后,发送方的数据链路层必须提供将从网路层接收的分组(Packet) 封装成帧的功能,即为来自上层的分组加上必要的帧头和帧尾部分,通常称此为成顿 (阳g):而接收方数据链路层则必须提供将帧重新拆装成分组的拆帧功能,即去掉发关瑞 数据链路层所加的顿头和帧尾部分,从中分离出网络层所需的分组。在成帧过程中,如果 上层的分组大小超出下层帧的大小限制,则上层的分组还要被划分成若干个帧才能被传输, 发送端和接收端数据链路层所发生的帧发送和接收过程大致如下:发送端的数据链路 层接收到网络层的发送请求之后,便从网络层与数据链路层之间的接口处取下待发送的分 组,并封装成顺,然后经过其下层物理层送入传输信道:这样不断地将顿送入传输信道就 形成了连续的比特流:接收端的数据链路层从来自其物理层的比特流中识别出一个一个的 独立帧,然后利用帧中的CS字段对每一个帧进行校验,判断是否有错误。如果有错误, 就采取收发双方约定的差错控制方法进行处理。如果没有错误,就对帧实施拆封,并将其 中的数据部分即分组通过数据链路层与网络层之间的接口上交给网络层,从而完成了相邻 节点的数据链路层关于该帧的传输任务。 4.2.3帧的定界 引入帧后,数据链路层必须提供关于帧边界的识别功能,即所谓帧定界(fram boundary.)。帧定界就是标识帧的开始与结束。有四种常见的定界方法,即字符计数法、带 字符填充的首尾界符法、带位填充的首尾标志法和物理层编码违例法。下面分别予以简单 的介绍。 1.字符计数法 此方法是在颜头部中使用一个字符计数字段来标明顺内字符数。接收瑞根据这个计数 值来确定该帧的结束位置和下一帧的开始位置。例如,发送序列“6 ABCDE5LYWX8 1234458”表示一共有三个帧,且三个帧的长度分别为6字节、5字节和8字节
第 4 章 数据链路层 3 标识,地址字段用于设备或机器的物理寻址。第三个字段则提供有关帧的长度或类型的信 息,也可能是其他一些控制信息。数据字段承载的是来自高层即网络层的数据分组(packet)。 帧检验序列 FCS (Frame Check Sequence)字段提供与差错检测有关的信息。通常数据字段之 前的所有字段被统称为帧头部分,而数据字段之后的所有字段被称为帧尾部分。 4.2.2 成帧与拆帧 从帧的基本格式可以看出,帧提供了与数据链路层功能实现相关的各种机制,如寻址、 差错控制、数据流定界等。可以说数据链路层协议将其要实现的数据链路层功能集中体现 在其所规定的帧格式中。引入帧机制不仅可以实现相邻节点之间的可靠传输,还有助于提 高数据传输的效率。例如,若发现接收到的某一个(或几个)比特出错时,可以只对相应 的帧进行特殊处理(如请求重发等),而不需要对其他未出错的帧进行这种处理;如果发现 某一帧被丢失,也只要请求发送方重传所丢失的帧,从而大大提高了数据处理和传输的效 率。但是,引入帧机制后,发送方的数据链路层必须提供将从网络层接收的分组(Packet) 封装成帧的功能,即为来自上层的分组加上必要的帧头和帧尾部分,通常称此为成帧 (framing);而接收方数据链路层则必须提供将帧重新拆装成分组的拆帧功能,即去掉发送端 数据链路层所加的帧头和帧尾部分,从中分离出网络层所需的分组。在成帧过程中,如果 上层的分组大小超出下层帧的大小限制,则上层的分组还要被划分成若干个帧才能被传输。 发送端和接收端数据链路层所发生的帧发送和接收过程大致如下:发送端的数据链路 层接收到网络层的发送请求之后,便从网络层与数据链路层之间的接口处取下待发送的分 组,并封装成帧,然后经过其下层物理层送入传输信道;这样不断地将帧送入传输信道就 形成了连续的比特流;接收端的数据链路层从来自其物理层的比特流中识别出一个一个的 独立帧,然后利用帧中的 FCS 字段对每一个帧进行校验,判断是否有错误。如果有错误, 就采取收发双方约定的差错控制方法进行处理。如果没有错误,就对帧实施拆封,并将其 中的数据部分即分组通过数据链路层与网络层之间的接口上交给网络层,从而完成了相邻 节点的数据链路层关于该帧的传输任务。 4.2.3 帧的定界 引入帧后,数据链路层必须提供关于帧边界的识别功能,即所谓帧定界(frame boundary)。帧定界就是标识帧的开始与结束。有四种常见的定界方法,即字符计数法、带 字符填充的首尾界符法、带位填充的首尾标志法和物理层编码违例法。下面分别予以简单 的介绍。 1. 字符计数法 此方法是在帧头部中使用一个字符计数字段来标明帧内字符数。接收端根据这个计数 值来确定该帧的结束位置和下一帧的开始位置。例如,发送序列“6 A B C D E 5 U V W X 8 1 2 3 4 4 5 8”表示一共有三个帧,且三个帧的长度分别为 6 字节、5 字节和 8 字节
4 计算机网络技术 但是这种方法很容易出现定界错误。仍以刚才的发送序列为例,当计数值出现传输差 错,如接收端收到的序列为“6 ABCDE7八YWX81234458”时,则接收端会将第 二帧解释为“UVWX81”,从而导致因发收双方对帧大小理解的不一致而出错。 2.带字符填充的首尾界符法 此方法是在每一帧的开头用ASCII字符DLE STX,在帧末尾用ASCI字符DLE ETX。 但是,如果在帧的数据部分也出现了DLE STX或DLE ETX,那么接收端就会错误判断帧 边界。为了不影响接收方对帧边界的正确判断,采用了填充字符DLE的方法。即如果发送 方在帧的数据部分遇到DLE,就在其前面再插入一个DLE。这样数据部分的DLE就会成对 出现。在接收方,若遇到两个连续的DLE,则认为是数据部分,并删除一个DLE。 例如,待发送的数据是A DLECB,则在数据链路层封装的帧为 DLE STX ADLEDLECBDLE ETX 其中DLE STX是帧首标记,斜体DLE是填充的DLE字符,DLEETX则是帧尾标记。 通过这种DLE字符的填充法,接收方就能保证帧边界字符的唯一性。 因为DLE是一个字符,发送方每次在数据部分中遇到一个DLE字符时,就必须插入 个8bt长的DLE。如果待传送的数据中有很多DLE字符,那么帧中就会包含大量的沉余 DLE。这也是带字符填充的首尾界符法的一个不足之处。 3.带位填充的首尾标志法 与字符填充技术类似,带位填充的首尾标志法也是一种填充技术,但是它一次只填充 一个比特“0”而不是一个字符“DLE”。另外,带位填充的首尾标志法用一个特殊的位模 式“O111I0”作为帧的开始和结束标志,而不是分别用“DLE STX”和“DLE ETX”作 帧的首标志和帧的尾标志。 当发送方在数据部分遇到5个连续的“1”时,就自动在其后插入一个“0”,即所谓的 “逢五个1插0”。例如,若原始数据为 011100111111111111111010 则经过填充后就变为 011100111110111110111110010 其中三个里体“0”为填充的位。 当接收方遇到5个连续的“1”之后是一个“0”时,就删除该“0”,即所谓的“逢五 个1删0”。这样就保证了在帧的数据部分不会出现“01111110”位串,从而使接收方能准 确地判断出帧边界。 与上述字符填充法相比,这种位填充技术存在明显的优势。其在位模式基础上入了 “逢五个1删0”和“逢五个1插0”机制,保证了帧边界标志“01111110”的唯一性。带 位填充的首尾标志法是比较常用的成帧方法,本章后面介绍的数据链路层协议HDLC就使 用了这种帧定界方法
4 计算机网络技术 但是这种方法很容易出现定界错误。仍以刚才的发送序列为例,当计数值出现传输差 错,如接收端收到的序列为“6 A B C D E 7 U V W X 8 1 2 3 4 4 5 8”时,则接收端会将第 二帧解释为“7 U V W X 8 1”,从而导致因发收双方对帧大小理解的不一致而出错。 2.带字符填充的首尾界符法 此方法是在每一帧的开头用 ASCII 字符 DLE STX,在帧末尾用 ASCII 字符 DLE ETX。 但是,如果在帧的数据部分也出现了 DLE STX 或 DLE ETX,那么接收端就会错误判断帧 边界。为了不影响接收方对帧边界的正确判断,采用了填充字符 DLE 的方法。即如果发送 方在帧的数据部分遇到 DLE,就在其前面再插入一个 DLE。这样数据部分的 DLE 就会成对 出现。在接收方,若遇到两个连续的 DLE,则认为是数据部分,并删除一个 DLE。 例如,待发送的数据是 A DLE C B ,则在数据链路层封装的帧为 DLE STX A DLE DLE C B DLE ETX 其中 DLE STX 是帧首标记,斜体 DLE 是填充的 DLE 字符,DLE ETX 则是帧尾标记。 通过这种 DLE 字符的填充法,接收方就能保证帧边界字符的唯一性。 因为 DLE 是一个字符,发送方每次在数据部分中遇到一个 DLE 字符时,就必须插入一 个 8bit 长的 DLE。如果待传送的数据中有很多 DLE 字符,那么帧中就会包含大量的冗余 DLE。这也是带字符填充的首尾界符法的一个不足之处。 3.带位填充的首尾标志法 与字符填充技术类似,带位填充的首尾标志法也是一种填充技术,但是它一次只填充 一个比特“0”而不是一个字符“DLE”。另外,带位填充的首尾标志法用一个特殊的位模 式“01111110”作为帧的开始和结束标志,而不是分别用“DLE STX”和“DLE ETX”作 帧的首标志和帧的尾标志。 当发送方在数据部分遇到 5 个连续的“1”时,就自动在其后插入一个“0”,即所谓的 “逢五个 1 插 0”。例如,若原始数据为 0 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 则经过填充后就变为 0 1 1 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 0 0 1 0 其中三个黑体“0”为填充的位。 当接收方遇到 5 个连续的“1”之后是一个“0”时,就删除该“0”,即所谓的“逢五 个 1 删 0”。这样就保证了在帧的数据部分不会出现“01111110”位串,从而使接收方能准 确地判断出帧边界。 与上述字符填充法相比,这种位填充技术存在明显的优势。其在位模式基础上引入了 “逢五个 1 删 0”和“逢五个 1 插 0”机制,保证了帧边界标志“01111110”的唯一性。带 位填充的首尾标志法是比较常用的成帧方法,本章后面介绍的数据链路层协议 HDLC 就使 用了这种帧定界方法
第4章数据链路层 4.物理层编码违例法 物理层编码违例法就是利用物理层信息编码中未用的电信号来作为帧的边界。例如曼 彻斯特编码,在传输之前将数据位“1”编码成高-低电平对,数据位“0”编码成低高电平 对,因此可以利用高-高电平对和低-低电平对作为帧边界的特殊编码。这种方法在EEE802 局域网标准中用到。 实际上,很多数据链路层协议使用字符计数法与其他方法相结合作为其成帧的方法。 这里不再赘述。 4.3差错控制 4.3.1差错原因与类型 所谓差错是指接收端收到的数据与发送端实际发出的数据出现不一致的现象。之所以 产生差错,主要是因为在通信线路上噪声干扰的结果。根据噪声类型不同,可将差错分为 随机错和突发错。热噪声所产生的差错称为随机错,冲击噪声所产生的错误称为突发错, 电磁干扰、无线电干扰等都属于冲击噪声。 差错的严重程度由误码率来衡量,误码率P等于错误接收的码元数与所接收的码元总 数之比。显然,误码率越低,信道的传输质量越高,但是由于信道中的噪声是客观存在的, 所以不管信道质量多高,都要进行差错控制。 4.3.2差错控制的作用与机制 差错控制的主要作用是通过发现数据传输中的错误,以便采取相应的措施减少数据传 输错误。差错控制的核心是对传送的数据信息加上与其满足一定关系的冗余码,形成一个 加强的、符合一定规律的发送序列。所加入的冗余码称为校验码(Frame Check Sequence, 简称FCS)。举一个形象的例子同学们就可以理解冗余码的作用。假定有朋友托人给你捎来 一个水果篮,里面放了五只苹果和一盒巧克力。结果为你挡该水果篮的人禁不住这盒巧克 力的诱惑将其吃掉了,然后将剩下的五只苹果交给了你,而你还以为原来就只有五只苹果。 但假如你的朋友在水果蓝里同时放上了一张卡片或纸条,上面写若五只苹果和一盒巧克力 的传送信息,则你就可以发现该水果篮在捎带过程中出了问题。显然,这张卡片或纸条不 是真正要送给你的礼物,但却是保证礼物被正确送给你所必需的额外信息,即冗余信息。 校验码在顿传输中的作用就相当于该例子中的卡片或纸条。校验码按功能的不同被分为纠 错码和检错码。纠错码不仅能发现传输中的错误,还能利用纠错码中的信息自动纠正错误, 其对应的差错控制措施为自动前向纠错。汉明编码(Hamming code)为典型的纠错码,具 有很高的纠错能力。检错码只能用来发现传输中的错误,但不能自动纠正所发现的错误, 需要通过反馈重发来纠错。常见的检错码有奇偶校验码和循环冗余校验码。由于目前计算
第 4 章 数据链路层 5 4.物理层编码违例法 物理层编码违例法就是利用物理层信息编码中未用的电信号来作为帧的边界。例如曼 彻斯特编码,在传输之前将数据位“1”编码成高-低电平对,数据位“0”编码成低-高电平 对,因此可以利用高-高电平对和低-低电平对作为帧边界的特殊编码。这种方法在 IEEE802 局域网标准中用到。 实际上,很多数据链路层协议使用字符计数法与其他方法相结合作为其成帧的方法。 这里不再赘述。 4.3 差错控制 4.3.1 差错原因与类型 所谓差错是指接收端收到的数据与发送端实际发出的数据出现不一致的现象。之所以 产生差错,主要是因为在通信线路上噪声干扰的结果。根据噪声类型不同,可将差错分为 随机错和突发错。热噪声所产生的差错称为随机错,冲击噪声所产生的错误称为突发错, 电磁干扰、无线电干扰等都属于冲击噪声。 差错的严重程度由误码率来衡量,误码率 Pe 等于错误接收的码元数与所接收的码元总 数之比。显然,误码率越低,信道的传输质量越高,但是由于信道中的噪声是客观存在的, 所以不管信道质量多高,都要进行差错控制。 4.3.2 差错控制的作用与机制 差错控制的主要作用是通过发现数据传输中的错误,以便采取相应的措施减少数据传 输错误。差错控制的核心是对传送的数据信息加上与其满足一定关系的冗余码,形成一个 加强的、符合一定规律的发送序列。所加入的冗余码称为校验码(Frame Check Sequence , 简称 FCS)。举一个形象的例子同学们就可以理解冗余码的作用。假定有朋友托人给你捎来 一个水果篮,里面放了五只苹果和一盒巧克力。结果为你捎该水果篮的人禁不住这盒巧克 力的诱惑将其吃掉了,然后将剩下的五只苹果交给了你,而你还以为原来就只有五只苹果。 但假如你的朋友在水果篮里同时放上了一张卡片或纸条,上面写着五只苹果和一盒巧克力 的传送信息,则你就可以发现该水果篮在捎带过程中出了问题。显然,这张卡片或纸条不 是真正要送给你的礼物,但却是保证礼物被正确送给你所必需的额外信息,即冗余信息。 校验码在帧传输中的作用就相当于该例子中的卡片或纸条。校验码按功能的不同被分为纠 错码和检错码。纠错码不仅能发现传输中的错误,还能利用纠错码中的信息自动纠正错误, 其对应的差错控制措施为自动前向纠错。汉明编码(Hamming code)为典型的纠错码,具 有很高的纠错能力。检错码只能用来发现传输中的错误,但不能自动纠正所发现的错误, 需要通过反馈重发来纠错。常见的检错码有奇偶校验码和循环冗余校验码。由于目前计算