【计算机网络高分笔记】第三章:数据链路层
标签(空格分隔):【计算机网络】
第三章:数据链路层
大纲要求:
- 数据链路层功能
- 组帧
- 差错控制
- 检错编码
- 纠错编码
- 流量控制与可靠传输
- 流量控制、可靠传输与滑动窗口机制
- 停止-等待协议
- 后退 N 帧(GBN)协议
- 选择重传(SR)协议
- 介质访问控制
- 信道划分介质访问控制:频分多路复用、时分多路复用、波分多路复用、码分多路复用的概念和基本原理。
- 随机访问介质访问控制:ALOHA 协议、CSMA 协议、CSMA/CD 协议、CSMA/CA 协议
- 轮询访问介质访问控制:令牌传递协议
- 局域网
- 局域网的基本概念与体系结构
- 以太网与 IEEE 802.3
- IEEE 802.11
- 令牌环网的基本原理
- 广域网
- 广域网的基本概念
- PPP
- HDLC协议
- 数据链路层设备
- 网桥的概念和基本原理
- 局域网交换机及其工作原理
考点和要点分析
- 核心考点:
- 流量控制与可靠传输机制、CSMA/CD原理,特别是争用期和截断二进制指数退避算法
- 网桥的概念和基本原理
- 组帧机制和差错控制机制,特别是循环冗余码和海明码
- 基础要点:
- 数据链路层的概念和功能
- 帧的概念,了解帧的 4 种组帧方法,掌握其中带位填充的首尾标志法
- 帧的概念,了解帧的 4种组帧方法,掌握其中带位填充额首尾标志法
- 差错控制的基本概念和方法
- 流量控制的基本概念和可靠传输机制
- 4 种信道划分介质访问控制的基本概念
- 3 种可靠传输协议以及 HDLC 协议和 PPP
- 数据链路层各层设备的基本工作原理和其他各层设备的区别
- 核心考点:
3.1 数据链路层的功能
- 数据链路层 在物理层所提供的服务的基础上 向网络层提供服务,即将原始的、有差错的物理线路改进成为逻辑上无差错的数据链路,从而向网络层提供高质量的服务。它一般包括 3 种基本服务:无确定的无连接服务、有确定的有连接服务、有确定的无连接服务(不存在无确定的有连接服务)。
具体而言,数据链路层的主要功能如下:
- 链路管理:负责数据链路的建立、维持和释放,主要用于面向连接服务。
- 帧同步:接收方确定收到的比特流中一帧的开始位置和结束位置。
- 差错控制:用于使接收方确定收到的数据就是由发送方发送的数据。
- 透明传输:不论数据是什么样的比特组合,都应当能够在链路上进行传输。
问,什么是帧定界?
答:当两个主机之间互相传送消息时,网络层的分组必须将封装成帧,并以帧的格式进行传送。将一段数据的前后分别添加首部和尾部,就够成了帧。首部和尾部中含有很多控制信息,这些信息的重要作用之一就是确定帧的界限,这就是帧定界。
例如,在 HDLC 协议中,帧格式使用标志 F(01111110) 来标识帧的开始和结束。
标志 | 地址 | 控制 | 信息 | 帧校验序列 | 标志 |
---|---|---|---|---|---|
F 01111110 | A 8位 | C 8位 | Info N位(可变) | FCS 16位 | F011111110 |
上表中 地址到帧校验序列之间为 透明传输区间。
常见问题 1 :旧版《计算机网络》教材认为数据链路层的任务是在两个相邻节点之间线路上无差错地传送以帧(frame)为单位地数据。数据链路层可以把一条有可能出差错地实际链路,转变成让网络层向下看起来好像是一条不出错地链路。但是《计算机网络》第五版中对数据链路层地提法改变:数据链路层地传输不能让网络层向下看起来好像是一条不出差错的链路。那种说法正确?
答:首先,在旧版本地计算机网络教材中对数据链路层的阐述都是基于 OSI 体系结构的,OSI 体系结构的数据链路层采用的是面向连接的 HDLC 协议,它提供可靠传输服务。因此旧版本中的提法对于 OSI 体系结构是正确的。也就谁说,以前确实是数据链路层向网络层提供了一条不出差错的链路。
而第五版之后,教材更加突出了 TCP/IP 体系结构,现在互联网的数据链路层协议使用最多的是 PPP 和 CSMA/CD 协议。这两种协议都不使用序号和确定机制,因此也就不能让网络层向下看起来好像是一条不出差错的链路。
新版教材中的提法更符合当前计算机网络的现状。当接受度按通过差错检错后发现帧在传输过程中出现差错之后,或者默默丢弃不做任何处理(当使用 PPP 或 CSMA/CD 协议时),或者使用重传机制要求发送方重传(使用 HDLC 协议时)。在以上两类协议中,前者占大多数,后者极少使用。如果需要可靠传输,那么就由高层的 TCP 负责重传。但是数据链路层并不知道这是重传的帧,所以还是默认可靠传输由 传输层 的 TCP 负责,而不是数据链路层。问题 2:当数据链路层使用 PPP 或者 CSMA/CD 协议时,既然不能保证可靠传输,为什么对所传输的帧进行差错检验的?这不是多此一举吗?
答:并不是多此一举,当数据链路层使用 PPP 或者 CSMA/CD 协议时,在数据链路层的接收端对所传输的帧进行差错检验是为了不将已经发现错误的帧瘦下来。如果或在接受端不进行差错检验,那么接收端上交给主机的帧就有可能包括在传输过程中除了差错的帧,而这样的帧对于接收端主机而言没有用途的。换而言之,接受度按进行差错检验的目的是为了保证“上交主机的帧都是没有传输差错的,因为有差错的帧都已经被丢弃了(丢弃不重传,所以不可靠)”。更严格来说,“我们以很接近 1 的概率认为,凡是上交主机的帧都是没有传输差错的)问题 3:数据链路层有流量控制吗?
答:这个问题不能一概而论,而需要看讨论的前提。在 OSI 体系结构中,数据链路层肯定有流量控制。而在 TCP/IP 体系结构中,数据链路层的流量控制被转移到传输层,因此没有必要再数据链路层设置流量控制。
3.2 组帧
问:为什么组帧时及要求加首部,也要加尾部?而报文切割成分组只加首部?
答:因为在网络中是以帧为最小单位进行传输的,所以接收端要正确地收到帧,必须要清楚该帧再一串比特流中是从哪里开始再哪里结束(因为接收端接收到的时一串比特流,没有首部和尾部不能正确的区分帧)。而分组(也称为 IP数据报)仅仅是包含在帧的数据部分,所以不需要加尾部来定界。
- 为什么要组帧?直接传送比特流不就可以了?还免去了帧同步、帧定界、透明传输等问题。但是反过来思考,万一传送的比特流出错了怎么办?那就得重新传输全部的比特流,组帧的优点就在于,如果传输出现了错误,只需要重新发送错误的帧即可,这相对于增加帧同步、帧定界、透明传输问题是值得的。组帧不能随意组合,需要让接收方看懂才行,这就需要依据一定的规则将网络层递交下来的分组组装成帧。
四种组帧方法:字符计数法、字节填充的首尾界符法、比特填充的首尾标志法、物理编码违例法。
- 字节计数法:用一个特殊的字符来表示一帧的开始,然年后用一个计数字段来表明帧包含的字节数。当目的主机接收到该帧时,根据此字段提供的字节数,便可以知道该帧接受位和下一帧的开始位。如下图
从上图中可以看出,计数字段提供的字节数包含自身所占的一个字节。
缺点:如果计数字段在传输过程中出错,接收方就无法判断所传输帧的结束位,当然也无法知道下一帧的开始位,这样就无法帧同步。由于此原因,字符计数法很少被使用。 字符填充的首尾界符法:
- 首先讨论首尾界符法,由 C 语言知识我们直到 ASCII 码是 7 位编码,可以组成 128 个不同的ASCII码,但是可以打印的字符(可以从键盘上输入的字符)只有 95 个,那么当传送的帧是文本文件(都是由键盘输入的)时,就可以在剩下的 33 个控制字符里选定 2 个字符作为每一帧的开始和结束,我们选定 SOH 和 EOT 分别作为帧开始符和帧结束符,这样接收端只需要判断这两个控制字符出现的位置就可以准确地分割成帧,如下图。
注意: 字符 SOH 代表 Start of Header(首部开始),而 EOT 表示 End of Transmission(传输结束)。 SOH 和 EOT 都是 ASCII 中的控制字符,SOH 的十六进制编码是 01, 而 EOT 的十六进制编码是 04。不要与一位 SOH 是 ‘S”O”H’ 三个字符,同样也不要误以为 EOT 是 ‘E”O”T’三个字符。
缺点:首尾界符法对于帧数据文件是文本文件完全没有问题。但是还有一种情况,假如帧传输的数据不是文本文件,即真传输的数据可能包含种植字符,就不能仅仅使用控制字符来进行帧定界了,否则会导致错误的定界,而仅仅把一部分帧收下,例如
在这种情况下,采用首尾界符法便会仅仅收下前小半段数据。 - 如此看来,首尾界符法是不严谨的,因此出现了字符填充的首尾界符法,其方法是,当数据中出现字符 “EOF” 或者 “SOH” 时,就将它们转换成另外一个字符,而这个字符是不会被错误解释的。但是所有字符都可能在数据中出现,于是就将数据中出现的字符
“SOH” 转换成 “ESC” 和 ‘x’ 两个字符;
“EOF” 转换成 “ESC” 和 ‘y’ 两个字符;
而当数据中出现控制字符 “ESC” 时,就将其转化为 “ESC” 和 ‘z’ 两个字符。
这种转换方法能够在接收端将收到的数据正确地还原为源来的数据,其中 “ESC” 是转义符,它的十六进制编码为 1B.如下图:
在接收端只需要按照上述规则进行相反的转化,便可以还原原来的数据。
问:为什么在谢希仁的教材中和上述转换方法不一样?
答:教材上是将 EOT 转换成 ESC EOT 等。其实解决透明传输的方法由很多种,只要合理即可,即与接收方约定一种方式,可以在创新的情况下不一定非要与教材一致。- 首先讨论首尾界符法,由 C 语言知识我们直到 ASCII 码是 7 位编码,可以组成 128 个不同的ASCII码,但是可以打印的字符(可以从键盘上输入的字符)只有 95 个,那么当传送的帧是文本文件(都是由键盘输入的)时,就可以在剩下的 33 个控制字符里选定 2 个字符作为每一帧的开始和结束,我们选定 SOH 和 EOT 分别作为帧开始符和帧结束符,这样接收端只需要判断这两个控制字符出现的位置就可以准确地分割成帧,如下图。
- 字节计数法:用一个特殊的字符来表示一帧的开始,然年后用一个计数字段来表明帧包含的字节数。当目的主机接收到该帧时,根据此字段提供的字节数,便可以知道该帧接受位和下一帧的开始位。如下图
比特填充的首尾标志法:比特填充的首尾标志法是使用 01111110 作为帧的开始和结束的标志,这样看来似乎帧定界的问题便解决了,单位体随着而来,如果帧的数据部分含有 01111110 怎么办?透明传输依然是一个问题。
- 解决方法如下:在 01111110 中拥有 6 个连续的 ‘1’,只要数据帧检测到有 5 个连续的 ‘1’,便马上再其后面插入 ‘0’,而在接收方对该过程实施逆操作,即每次收到 5 个连续的 ‘1’,自动删除后面紧紧跟随的 ‘0’,以恢复数据。这样的方法又称为零比特填充法。
- 我们来模拟这这个过程:
原始数据: 0110101111110010111111011 数据中两次出现了 01111110.
零比特填充后的数据:01101011111 0 1001011111 0 1011,其中加粗部分表示填充的 0.
接收方收到数据后,遇到 5 个连续的 ‘1’ 删除后面的 ‘0’ ,便可以得到原始数据。
物理编码违例法:物理编码违例法是利用物理介质上编码的违法标志来区分帧的开始与结束,例如,在曼彻斯特编码中,码元 1 编码成高-低电平,码元 0 编码成低-高电平,而高-高和低-低点公平在编码中是无效的,可以用来作为帧的起视标志和结束标志。
注意:
- 在使用字节填充的首尾界符法时,并不是所有形式的帧都需要开始符和帧结束符,如 MAC 帧便不需要帧结束符。因为以太网在传送帧时,各帧之间还必须要有一定的间隙,所以,接收端只要找到帧开始定界符,其后面的连续到达的比特流就都属于同一个 MAC 帧,可见,以太网不需要使用帧结束定界符,也不需要使用字节插入来保证透明传输。
- PPP帧用来及逆行帧定界的字段是 Ox7E. 1B是普通帧透明传输的处理,即转义字符 “ESC” 的十六进制编码。
3.3 差错控制
3.3.1 检错编码
- 检错编码:通过一定的编码和解码,能够在接收端解码时检查出传输的错误,但不能纠正错误。常见的检错编码具有有奇偶校验码和循环冗余校验码(CRC).
- 奇偶校验码:在信息码后面加一位校验码,分奇校验和偶校验。
- 奇校验:添加以为校验码之后,保持整个码字里面的 1 的个数是奇数。接收端收到数据之后就校验数据里面 1 的个数,如果检查到奇数个 1 ,那么认为传输过程中没有出错,如果检查到偶数个 1 ,则说明传输过程中数据发生了改变,要求重发。
- 偶校验:添加一位校验码之后,保持整个码字里面的 1 的个数是偶数。接收端收到数据之后就校验数据里面 1 的个数,如果检查到偶数个 1 ,那么认为传输过程中没有出错,如果检查到奇数个 1 ,则说明传输过程中数据发生了改变,要求重发。
当数据中有一位发生变化时,奇偶校验码能够检测出来,但是不知道是哪一位发生了错误。如果数据中有两位数据发生了编码,那么奇偶校验码检测不到数据出错。所以它的检错能力是有限的。
奇偶校验码在实际使用中又分为垂直奇偶校验、水平奇偶校验与水平垂直奇偶校验。上述内容属于水平奇偶校验。
- 循环冗余校验码(CRC):适当选择多项式 G(x) G ( x ) ,在计算机二进制信息 M(X) M ( X ) 的长度确定时,余数与 CRC 码出错位的对应关系是不变的,可以使用余数作为判断出错位置的依据而纠正编码。检错方式:将受到的 CRC 码与 G(x) G ( x ) 相除,如果余数为 0 ,那么数据正确。如果余数不为 0 ,那么可以判断出错的位置。
举个例子:试计算 10110010000/11001.
计算技巧:在除法过程中,进行异或运算,无视进位;上商的规则是看余数的首尾,如果为 1,则上 1,如果为 0 ,则上 0;当部分余数的位数小于除数的位数时,该余数便是最后的余数。
可以得到 10110010000/11001 余数为 1010.
CRC码进行检错的重要特征
1. 具有 r 检测位的多项式嫩能够检测出所有小于或者等于 r 的突发错误
2. 长度大于 r + 1 的错误逃脱的概率为 12r. 1 2 r .
注意:1. 循环冗余码仅能做到无差错接受。 2. CRC 具有纠错功能。但是在计算机网络中一般发现错误直接重传,因此在默认情况下,CRC为检错码而不是纠错码。
3.3.2 纠错编码
- 纠错编码:在接受端不仅能够检查出错误,而且还能够就成检查出来的错误。常见的纠错码是海明码。
海明码:又称为汉明码,他是在信息字段中插入若干位数据,用于监督码字的哪一位数据发生了变化,具有一位纠错能力。假设信息位有 k 位,整个码字的长度就是 k + r 位,每一位的数据只有两种状态,因此有 r 位数据就有 2r 2 r 种状态。如果每一种状态就代表一个码元发生了错误,有 k + r个码元,就要有 k + r 种状态来表示,另外还要有一种状态来表示数据正确的情况,所以 2r−1≥k+r 2 r − 1 ≥ k + r 才可以检查出一种错误。
海明码求解步骤:- 确定校验码的位数 r . 2r≥k+r+1 2 r ≥ k + r + 1 .
- 确定校验码的位置。第 i 个校验码处于位置 Pi P i 处, Pi P i 对应的位置为 2i−1 2 i − 1 , i=0,1,2.... i = 0 , 1 , 2.... .
- 确定数据的位置。
求出校验位的值。
- 例:D = 101101 的海明码。
首先确定 r ,易得 r = 4。
- 例:D = 101101 的海明码。
M1 M 1 M2 M 2 M3 M 3 M4 M 4 M5 M 5 M6 M 6 M7