数据链路层协议有很多,但是有三个基本的问题是相同的。封装成帧、透明传输、差错检测。
1、封装成帧
封装成帧就是在一段数据的前后分别添加首部和尾部,就会构成了一个帧。总所周知,所有在互联网上传输的数据都是以分组(IP数据报)为传送单位。网络层的IP数据报传送到数据链路层就成为了帧的数据部分。在帧的数据部分的前面和后面分别加上首部和尾部,就构成了一个完整的帧。其中首部和尾部具有一个重要作用就是进行帧界定。
2、透明传输
由于帧的开始和结束的标记使用一种专门指明的控制字符,因此,当传输的数据中有任何8比特的组合与帧界定的比特编码一样的话就会出现帧界定错误。当传送的帧是用于文本文件组成的帧时,其数据部分不会出现以帧界定符一样的数据,此时不管从键盘上输入任何数据都可以传输,因此就是透明传输。为了解决透明传输问题,就会采用字节填充(字符填充)的方法。
3、差错检验
为了保证数据传输的可靠性,在计算机网络传输数据时,就会采用必要的差错检验措施。其中在数据链路层广泛使用循环冗余检验CRC。譬如,在发送端,先把数据划分组,假定每组k个比特,假定数据为M=100101(k=6),CRC运算就是在数据M的后面添加供差错检验的n位冗余码,然后构成了一个(k+n)位的帧进行发送。
循环冗余检验原理的例子
补充 奇偶校验
奇偶校验是一种校验代码传输正确的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数还是偶数来进行检验。采用奇数的称为奇校验,反之,是为偶校验。通常专门设置一个奇偶校验位,用它使这个代码中“1”的个数是奇数还是偶数。若用奇数,则接收端收到这个代码时,校验到这个代码“1”的个数位奇数,从而确定这个代码的这个正确性。
奇偶校验是在通信过程中确保节点之间准确数据传输的过程。奇偶校验位附加到原始数据位以创建偶数或奇数位。内存中最小的单位是比特,也称为“位”,位只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1;对于奇校验,则相反。