了解数据链路层的基本概念和功能的基础上,重点掌握滑动窗口机制、三种可靠传输协议、各种MAC协议、HDLC协议和PPP协议,特别是CSMA/CD协议和以太网帧格式,以及局域网的争用期和最小帧长的概念、二进制指数退避算法。中继器、网卡、集线器、网桥和局域网交换机的原理及区别要重点掌握。
数据链路层以帧为单位传输,为了在出错时只重发出错的帧,而不必重发全部数据。为使接收方正确接收并检查传输的帧,发送方要按照规则把网络层递交的分组封装成帧,称为组帧,主要解决帧定界、帧同步、透明传输等问题。组帧通常有4种实现方法,首部和尾部都要添加,因为在网络中信息是以帧为最小单位进行传输的,接收端正确接收帧需要知道一串比特流中帧的开始和结束位置。而分组(IP数据报)仅包含在帧的数据部分,无需加尾部。
字符计数法是在帧头部使用一个计数字段来标明帧内字符数。目的结点的数据链路层收到字节(字符)计数值(包含它自身占用的)时,就知道后面的字节(字符)数,从而可以确定帧结束的位置。如果计数字段出错,即失去了帧边界划分的依据,接收方就无法判断所传输帧的结束位和下一帧的开始位,收发双方将失去同步,后果严重。
字符填充法使用特定字符来定界一帧的开始与结束,控制字符SOH放在帧的最前面,表示帧的首部开始,控制字符EOT表示帧的结束。为使信息位中出现的特殊字符不被误判为帧的首尾定界符,可在特殊字符(包括转义字符ESC)前面填充一个转义字符(ESC)来加以区分(转义字符是ASCII码中的控制字符,是一个字符),以实现数据的透明传输。接收到转义字符后,就明白后面紧跟的是数据信息。
零比特填充法允许数据帧包含任意个数的比特,也允许每个字符的编码包含任意个数的比特。它使用一个特定的比特模式,即01111110来标志一帧的开始和结束。为了不使信息位中出现的比特流01111110被误判为帧的首尾标志,发送方的数据链路层在信息位中遇到5个连续的“1”时,自动在其后插入一个“0”;接收方做逆操作删除插入的0“”,以恢复原信息。
零比特填充法很容易由硬件来实现,性能优于字符填充法。
在物理层进行比特编码时,通常采用违规编码法。曼彻斯特编码法将数据比特1编码成高-低电平对,将数据比特0编码成低-高电平对,而高-高和低-低电平对在在数据比特中是违规的。可以借用这些违规编码序列来定界帧的起始和终止。局域网IEEE802标准采用了这种方法。
违规编码法不需要采用任何填充技术,便能实现数据传输的透明性,但只适用于采用冗余编码的特殊编码环境。
由于字节计数法中计数字段的脆弱性和字符填充法实现上的复杂性与不兼容性,目前较常用的组帧方法是比特填充法和违规编码法。
比特在实际通信链路的传输过程中可能会出错,1和0发生变换,称为比特差错。比特差错是传输差错中的一种,本节仅讨论比特差错。
通常利用编码技术进行差错控制,主要有两类:自动重传请求ARQ和前向纠错FEC。在ARQ方式中,接收端检测出差错时,就设法通知发送端重发,直到接收到正确的码字为止。在FEC方式中,接收端不但能发现差错,而且能确定比特串的错误位置,从而加以纠正。因此,差错控制又可分为检错编码和纠错编码。
检测编码都采用冗余编码技术,其核心思想是在有效数据(信息位)被发送前,先按某种关系附加一定的冗余位,构成一个符合某一规则的码字后再发送。当要发送的有效数据变化时,相应的冗余位也随之变化,使得码字遵从不变的规则。接收端根据收到的码字是否仍符合原规则来判断是否出错。常见的检错编码有奇偶校验码和循环冗余码。
奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它由n-1位信息元和1位校验元组成,如果是奇校验码,那么在附加一个校验元后,码长为n的码字中1的个数为奇数;如果是偶校验码,那么在附加一个校验元以后,码长为n的码字中1的个数为偶数。它只能检测奇数位的出错情况,但并不知道哪些位错了,也不能发现偶数位的出错情况。
循环冗余码(Cyclic Redundancy Code,CRC)又称多项式码,任何一个由二进制数位串组成的代码都可以与一个只含有0和1两个系数的多项式建立一一对应关系。一个k位帧可以视为k多项式的系数序列,多项式阶数为k-1。
给定一个 m bit的帧或报文,发送器生成一个 r bit的序列,称为帧检验序列(FCS)。这样形成的帧将由 m + r 比特组成。发送方和接收方事先商定一个多项式G(x) (最高位和最低位必须为1),使这个带检验码的帧刚好能被预先确定的多项式G(x) 整除。接收方用相同的多项式去除收到的帧,如果无余数,那么认为无差错。
假设一个帧由m位,其对应的多项式为M(x),则计算冗余码的步骤省略。
通过循环冗余码(CRC)的检错技术,数据链路层做到了对帧的无差错接收。凡是接收端数据链路层接收的帧,都认为这些帧在传输过程中没有产生差错;而接收端丢弃的帧是因为有差错。循环冗余码(CRC)是具有纠错功能的,只是数据链路层仅使用了它的检错功能,检测到帧出错就直接丢弃。
在数据通信的过程中,解决差错问题的一种方法是在每个要发送的数据块上附加足够的冗余信息,使接收方能够推导出发送方实际送出的应该是什么样的比特串。最常见的纠错编码是海明码,其实现原理是在有效信息位中加入几个校验位形成海明码,并把海明码的每个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错位,而且能指出错位的位置,为自动纠错提供依据。
海明码的编码原理和过程:确定海明码的位数,确定校验位的分布,分组以形成校验关系,校验位取值,海明码的校验原理。