数据链路层(Data Link Layer)

                                    数据链路层(Data Link Layer)

            位于物理层 和 网络层 之间, 它能够提供对物理通信的控制 并 提供对上面网络层的服务。

该层执行以下主要功能:成帧、寻址、差错控制和可靠性、流量控制、介质访问控制。

(1)成帧

网络层的IP数据报传送到 数据链路层 成为 帧的数据部分,在帧的数据部分前后加上首部和尾部,就构成了一个完整的帧。

最大传送单元(Maximum Transfer Unit) 是指 帧的数据部分的长度上限。

数据链路层(Data Link Layer)

帧定界:

接受链路层用来确定每一帧的开始 和 结束。

帧定界有多种方法,主要分为两类。

采用特殊的物理编码标记帧的边界 和 通过是否存在某个信号来标识边界。

比如以太网,不同以太网系统中都会采用不同的成帧方式。

成帧协议也有两种: 面向位的, 和 面向字节的, 根据其基本单元。

1、面向位的

比如 HDLC(高级数据链路控制),以 01111110标记。

在每5个连续的1后面插入一个0.

2、面向字节的

指定特殊字符,比如SOH (头部开始)和 STX(文本开始)

存在转义字符。

帧格式:

帧头部中主要包含以下字段。

地址,源地址和目的地址。

长度、整个帧的长度,或者数据的长度。

类型、网络层协议的类型。

错误检测代码:(将在差错控制中详细介绍)

(2)寻址

IEEE 802标准。(没什么好说的。。)

(3)差错控制和可靠性

主要有两种检测函数:checksum(校验和) 和 CRC(循环冗余检测,Circuit Redundancy Check)

在更高层协议(TCP,UDP,IP) 中使用 checksum, CRC只用于以太网和无线局域网。

原因:1、CRC容易在硬件中实现,而高层协议几乎总在软件中实现。2、CRC对物理传输错误是健壮的,所以不需要使用checksum复核了。

checksum 原理(算法):

将所有位按照相邻字节配对形成 16位的字(如有剩余一个,最后再处理),然后将这些16位字全部加起来,(最后如果剩下一个字节,也加起来),然后对得到的数操作(用32位 sum 表示, 这样判断溢出),如果有溢出(即32位sum前16位非0),将该sum折叠,重复折叠操作,直到sum前16位 为0.最后将sum 取反 得到checksum。

代码如图:

数据链路层(Data Link Layer)

CRC原理(算法):

首先注意,这里的全部运算皆是在模2的条件下进行的。(其实不用搞懂模运算,感兴趣的小伙伴可以补充一波数论同余)

假设帧内容有m位,发射机生成一个k位序列(Frame check sequence),将m位帧内容左移k位(就是末尾添加k个0),用这个数模2除以 FCS,得到一个余数,将刚刚那个m+k位的数加上这个余数,,得到的这个数就是要传输的帧。

接收机将收到的帧内容除以 FCS ,若余数为0,则验证正确,反之不然。

(4)流量控制

这是由于一种情况:发送机不断发送分组数据,而接收机来不及处理,那么这个时候就需要提醒发送机放慢速度。

即流量控制。

最简单的方法:停止--等待,发射机发送一个帧,等待接收机确认,然后发送下一个。这样会使链路的利用率非常低。

滑动窗口协议:

通过窗口滑动传送帧

数据链路层(Data Link Layer)


(5)介质访问控制

多个节点共享同一个物理介质时用到的机制。

恩。。同学们看到这里很烦了吧,我也累了,没什么用,等有新发现再来补充。