数据链路层在物理层提供服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻结点的网络层。其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。就像秘书把报文封装好给物理层运输,对面秘书会检验是否秘书给什么就收到什么,如果和对面秘书传的一致就给boss
- 数据链路层是实现设备之间通信的非常重要的一层
- 网络中的主机、路由器等都必须实现数据链路层
- 局域网中的主机、交换机等都必须实现数据链路层
- 数据链路层的作用:上层向下层提供服务,数据链路层同级提供协议
1. 使用点对点信道的数据链路层
1.1 数据链路和帧
- 结点 (node) 是指网络中的主机、路由器等。
- 链路 (link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。一条链路只是一条通路的一个组成部分。
- 数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,就构成了数据链路。
- 现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。
- 一般的适配器都包括了数据链路层和物理层这两层的功能。
- 物理链路就是上面所说的链路,即物理线路段。
- 逻辑链路就是上面的数据链路,是物理链路加上必要的通信协议。
- 网络层产生数据给数据链路层,数据链路层把数据封装成帧,物理层把帧转化为比特流
- 数据链路层传送的是帧(帧(frame):数据链路层的协议数据单元,封装网络层的数据报)
1.2 三个基本问题
数据链路层协议有许多种,但有三个基本问题则是共同的。这三个基本问题是:封装成帧,透明传输,差错控制
1.2.1 封装成帧
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧。首部和尾部包含了许多的控制信息。(首部和尾部中有帧定界符,其作用是进行帧定界(接收端识别开始和结束))
1.2.2 透明传输
透明传输是指不管所传数据是什么样的比特组合,都能够在链路上传送。因此,链路层应该“看不见”有什么妨碍数据传输的东西。
-
如果数据中的某字节的二进制代码恰好和 SOH 或 EOT 一样,链路层就会错误地“找到帧的边界”。
-
解决透明传输问题:
- 字符计数法:在帧首部使用计数字段来表明帧内字符数(缺点是:一处出错,比如读错计数字符,全部出错)
- 字符填充:发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC” 类似于语言的转义
- 字符计数法:在帧首部使用计数字段来表明帧内字符数(缺点是:一处出错,比如读错计数字符,全部出错)
1.2.3 差错检测
- 在传输过程中可能会产生差错,传输中的差错都是由于噪声引起的。
- 全局性噪声:由于线路本身的电气特性所产生的随机噪声,是信道固有的,随机存在的。
解决办法:提高信噪比来减少或避免干扰。 - 局部性噪声:外界特点的短暂原因造成的冲击噪声,是产生差错的主要原因。
解决办法:通常利用编码技术来解决
- 全局性噪声:由于线路本身的电气特性所产生的随机噪声,是信道固有的,随机存在的。
- 差错类型包括:
- 位错:比特位出错
- 位错检验:奇偶校验, 循环冗余码
- 奇偶校验:n-1位信息元,1位校验元。
- 循环冗余码:
- 在每组 M 后面再添加供差错检测用的 n 位冗余码,然后一起发送出去。
- 例题:要发送的数据是1010 01,采用CRC校验,生成多项式是1101,那么最终发送的数据是 101001001
- 在数据链路层使用 CRC 检验,能够实现无比特差错的传输,但这还不是可靠传输。要做到“无差错传输”(即发送什么就收到什么)
- 位错检验:奇偶校验, 循环冗余码