首先要明确“数据链路”和“链路”这两个概念:
链路:从一个节点到相邻节点的一段物理现路,其中间没有任何的交换节点,所以可以说链路只是一条路径的组成部分。
数据链路:当需要在一条线路上传送数据的时候,除了要有一条物理线路还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的软硬件添加到链路上就形成了数据链路。其中最常使用网络适配器来实现这些协议,一般都包括数据链路层和物理层的功能。
数据链路层负责相邻设备之间的数据传输,数据单元为帧,主要的设备是交换机,主要工作是将网络层交下来的IP数据报添加首部和尾部封装成帧,然后将封装好的帧发送给接收方的数据链路层,接收方如果收到的帧是无差错的,就从中提取IP数据报交付给网络层,否则丢弃。
所以在数据链路层的协议要解决三个问题:封装成帧、透明传输和差错控制。
- 封装成帧:在数据的首端和尾端添加首部和尾部封装成帧,这样可以判断一个帧的完整性。
- 透明传输:虽然帧的开始(SOH)和结尾(EOT)是ASCLL码不可打印的控制字符,但是他的二进制形式很有可能和数据中的二进制相同,造成帧提前结束,透明传输就是用来解决这一问题。在数据中出现控制字符前插入转义自读“ESC”,接收方接收到帧将这个转义字符删掉,然后发往网络层。如果前面刚好有一个转义字符,在插入一个转义字符,然后删掉最前面的。
- 差错控制:为了保证可靠性,使用CRC(循环冗余校验码)。由于数据链路层不要求可靠传输,CRC只做到对帧的无差错接收,只是为了避免比特差错,但是仍然会出现传输差错(帧丢失、帧重复、帧失序)。