计算机网络--数据链路层

来源:互联网 发布:汽车电气设计软件 编辑:程序博客网 时间:2024/06/06 00:14

数据链路层解决三个重要问题:封装成帧,差错检测,透明传输。

数据链路层所用的硬件:网卡(网络适配器)

封装成帧

数据链路层是以帧为单位进行传输和处理的。所以必须将上层的IP数据报在头部和尾部加上信息,封装成帧。在接收帧时,有个必须解决的问题是,如何识别每一个帧的开始和结束,即进行帧定界。首部和尾部的作用之一就是进行帧定界,还有一些控制信息。
每一种链路层协议都规定了帧的数据部分长度的上限,即最大传送单元(MTU)。
这里写图片描述

帧定界方法

1.在传输的帧和帧之间插入时间间隔(以太网使用该方式)
2.帧首部和尾部设置一个标志位,成为帧定界标志。(面向字符传输时,可以使用某个特殊的不可打印的控制字符作为帧定界符,还需要使用字节填充或字符填充来进行对帧定界符转义。面向比特传输时,可以使用比特位作为帧定界符。此时可以比特填充来对定界符转义。)

字符/字节填充法:定义一个转义字符,在发送端先对数据进行处理,在帧定界符和转移字符前面插入一个转义字符。在接受端对数据进行删除转义字符处理。

比特填充法:在发送端,当遇到帧定界符的某个比特前缀时,就在后面插入一些比特位进行转义。在接收端则去掉这些比特位。例如PPP协议用的“0比特填充法”。PPP协议的帧定界符为“01111110”,在发送端进行扫描,发现有连续的5个1时,就在后面加一个0.在接受端,先确定帧的边界,再进行删0处理。

透明传输

对上层交给的传输数据没有任何限制。可以使用上面的字符/字节填充法,比特填充法。

差错检测

在传输过程可能发送1变成0,0变成1的情况,这叫做比特差错。是传输差错的一种。可以利用差错检测码(EDC)来实现差错检测的基本原理。在数据链路层通常在帧的尾部设置一个差错检测字段存放整个帧的差错检测码,这个字段成为帧检验序列(FCS),然后对每一帧进行循环冗余检验(CRC)进行差错检测。

发送方和接收方先协商一个r+1比特的生成式G,要求是该G的最高位和最低位都是1)。对于一个d比特的数据D,发送方选择一个r比特冗余码R(检错码),并将它附在D的后面,然后使得这个d+r比特用模2算术可以被G整除。接收方进行差错检测时,用G去除收到的d+r比特,若能整除就没有差错,否则出错。

模2算术,加法不进位,减法不借位,等价于异或(XOR),乘以2和除以2等价于左移和右移。

由于D* 2^r XOR R=n*G(D*2^r相当于左移r位,因为后面r为放冗余码R。所以D* 2^r XOR R表示d+r的比特。),所以D*2^r=n*G XOR R,那么R=(D*2^r)/G的余数。

例子:D=101001(d=6),G=1101(r=3)
这里写图片描述

通常G的生成式有如下:
CRC-16=X^16+X^15+X^2+1
CRC-CCITT=X^16+X^12+X^5+1
CRC-32=X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1

原创粉丝点击