数据链路层是在物理层和网络层之间的协议,提供相邻节点的可靠数据传输
一、从体系结构来看数据链路层
数据链路层是为上下两层提供服务或者上下两层向他传送数据(服务【垂直】);与其对等层之间用帧进行通信(协议【水平】)
注意:不同的链路层可能采用不同的数据链路层协议
在许多情况下我们可以只关心在协议栈中水平方向的各数据链路层,于是当主机 H1 向主机 H2 发送数据的时候,我们可以想象数据就是在数据链路层中从左向右沿着水平方法传送的
数据链路层信道类型
二、使用点对点信道的数据链路层
(一)数据链路和帧
(1)数据链路
链路 (link):一条无源的点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个组成部分,链路也称为物理链路
数据链路 (data link):把实现控制数据传输的协议的硬件和软件加到链路上(现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件),就构成了数据链路,即链路+协议 ,数据链路也称为逻辑链路
(2)帧
帧:数据链路层传送的是帧 ,是数据链路层的协议数据单元
帧的组成:帧头(Header) + 数据(Data) + 帧尾(Traile)
- 帧头(Header):存放源MAC地址、目的MAC地址、类型(针对于不同的网络拓扑结构进行转换)
MAC地址(Media Access Control Address)直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的地址。在OSI模型中,第三层网络层负责 IP 地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址 [来源:维基百科] - 数据(Data)
- 帧尾(Traile):进行校验
(二)数据链路层要解决的三个基本问题
(1)封装成帧
将比特流变成帧,即找到帧的开头和结尾
➡️ 在一段数据的前后分别添加首部和尾部,然后就构成了一个帧 ,首部和尾部的一个重要作用就是进行帧定界(确定帧的界限)
将比特流划分成“帧”的主要目的是为了检测和纠正物理层在比特传输中可能出现的错误
用控制字符进行帧定界的方法举例
控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始,另一个控制字符 EOT (End Of Transmission) 表示帧的结束
(2)透明传输
“在数据链路层透明传送数据”表示:无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层
如果数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,数据链路层就会错误地 “找到帧的边界”
解决方案:用“字节填充”或“字符填充”法解决透明传输的问题
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)
- 接收端的数据链路层在将数据送往网络层之前删除插入的转义字符
- 如果转义字符也出现在数据当中,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个
(3)差错检测
差错原因:噪声的影响,导致信号的叠加
在传输过程中可能会产生比特差错:1 可能变成 0,而 0 可能变成 1
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施
在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC (Cyclic Redundancy Check) 检错技术
循环冗余检验 CRC 原理
在发送端,先把数据划分为组,假定每组 k 个比特
在每组 M 后面再添加供差错检测用的 n 位冗余码,然后构成一个帧发送出去,一共发送 (k + n) 位
详细内容可以参见:【科普向】谁都能看懂的CRC(循环冗余校验)原理
(三)点对点协议PPP
对于点对点的链路,目前使用最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)
(1) PPP 协议的组成
PPP 协议有三个组成部分
-
一个将 IP 数据报封装到串行链路的方法
-
一个链路控制协议 LCP (Link Control Protocol)
用来建立、配置和测试数据链路的链路控制协议,通信双方可协商一些选项,最重要的功能之一是身份验证
-
一套网络控制协议 NCP (Network Control Protocol)
每个协议支持一种不同的网络层协议,如IP、OSI的网络层等
(2) PPP 协议应满足的需求
- 简单 —— 这是首要的要求
- 封装成帧 —— 必须规定特殊的字符作为帧定界符
- 透明性 —— 必须保证数据传输的透明性
- 多种网络层协议 —— 能够在同一条物理链路上同时支持多种网络层协议
- 多种类型链路 —— 能够在多种类型的链路上运行
- 差错检测 —— 能够对接收端收到的帧进行检测,并立即丢弃有差错的帧
- 检测连接状态 —— 能够及时自动检测出链路是否处于正常工作状态
- 最大传送单元 —— 必须对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值,促进各种实现之间的互操作性
- 网络层地址协商 —— 必须提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址
- 数据压缩协商 —— 必须提供一种方法来协商使用数据压缩算法
(3) PPP 协议的帧格式
PPP 帧的首部和尾部分别为 4 个字段和 2 个字段
- 首部
- 首尾标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)
- 地址字段 A 只置为 0xFF。地址字段实际上并不起作用
- 控制字段 C 通常置为 0x03
- 协议字段 🌟
- 若为 0x0021,则信息字段就是 IP 数据报
- 若为 0x8021,则信息字段是网络控制数据
- 若为 0xC021,则信息字段是 PPP 链路控制数据
- 若为 0xC023,则信息字段是鉴别数据
- 尾部
PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节
(4) PPP 协议解决透明传输的问题
当 PPP 用在异步传输时,使用字节填充法
当 PPP 用在同步传输链路时,采用零比特填充法
字节填充法(异步)
- 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)
- 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)
- 若信息字段中出现 ASCII 码的控制字符,则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变
零比特填充法(同步)
PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送),这时 PPP 协议采用零比特填充方法来实现透明传输。
具体方法
- 在发送端,只要发现有 5 个连续 1,则立即填入一个 0
- 接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除
目的就是使得信息部分数据中不再出现帧的定界符(0x7E)
(5) PPP协议差错检测
PPP 协议不使用序号和确认机制是出于以下的考虑
- 在数据链路层出现差错的概率不大时,使用比较简单的 PPP 协议较为合理
- 在因特网、互联网环境下,PPP 的信息字段放入的数据是 IP 数据报。数据链路层的可靠传输并不能够保证网络层的传输也是可靠的
- 帧检验序列 FCS 字段可保证无差错接受
(6) PPP协议的工作状态
PPP 链路初始化过程
- 当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接
- PC 机向 ISP 发送一系列的 LCP 分组(封装成多个 PPP 帧),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。(链路上的最大帧长、不使用PPP帧中的地址和控制字段)
- 进行网络层配置,网络控制协议NCP给新接入的用户个人电脑分配了一个临时的IP地址,这样,用户个人电脑就成为互联网上的一个有IP地址的主机了。(根据网络层的不同协议互相交换网络层特定的网络控制分组)
- 通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容
三、使用广播信道的数据链路层
(一) 局域网的数据链路层
(1)局域网的特点 & 优点
局域网的主要特点
- 网络为一个单位所拥有
- 地理范围和站点数目均有限
局域网的主要优点
- 具有广播功能,从一个站点可很方便地访问全网
- 便于系统的扩展和逐渐地演变,各设备的位置可灵活调整和改变
- 提高了系统的可靠性、可用性和生存性
(2)局域网的拓扑结构
(3)共享信道带来的问题
- 竞争和冲突:多个用户共享同一信道时可能会发生竞争和冲突,导致数据包丢失或延迟增加。
- 信道拥塞:当共享信道上的用户数量增加时,信道可能会变得拥挤,导致性能下降和通信质量降低。
- 碰撞:在共享信道上,多个用户同时发送数据可能会导致碰撞,使得数据包损坏并需要重新发送,从而降低了效率
(4)媒体共享技术
静态划分信道
信道复用:复用(Multiplexing)是通信技术中的一个重要概念。复用就是通过一条物理线路同时传输多路用户的信号
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
-
频分复用FM
频分复用的所有用户同时占用不同的频带资源并行通信
-
时分复用TDM
时分复用的所有用户在不同的时间占用同样的频带宽度
-
波分复用WDM
根据光波的波长进行传输(合波器耦合)
-
码分复用CDM
码分复用CDM是另一种共享信道的方法。实际上,由于该技术主要用于多址接入,人们更常用的名词是码分多址CDMA
各用户使用经过特殊挑选的不同码型
动态媒体接入控制(多点接入)
- 随机接入:所有的用户可随机地发送信息
- 受控接入:用户必须服从一定的控制
(5)以太网的两个标准
-
IEEE 802.3 是第一个 IEEE 的以太网标准,数据链路层分为2个子层
-
逻辑链路控制 LLC (Logical Link Control) 子层:与传输媒体无关
-
媒体接入控制 MAC (Medium Access Control) 子层:与传输媒体有关
与接入到传输媒体有关的内容都放在 MAC子层,而 LLC 子层则与传输媒体无关
不管采用何种协议的局域网,对 LLC 子层来说都是透明的 -
-
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约
这两种标准的硬件实现可以在同一个局域网上互操作。这两个标准标准只有很小的差别,因此很多人也常把 802.3局域网简称为“以太网”
(6)适配器的作用
网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”
适配器的重要功能:
- 进行串行/并行转换
- 对数据进行缓存
- 在计算机的操作系统安装设备驱动程序
- 实现以太网协议
(二)CSMA/CD协议
最早的以太网:将许多计算机都连接到一根总线上
总线特点:易于实现广播通信,简单,可靠
为了实现一对一通信,将接收站的硬件地址写入帧首部中的目的地址字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧
总线缺点:多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败
(1) 以太网采取的两种重要措施
-
采用较为灵活的无连接的工作方式
-
不必先建立连接就可以直接发送数据
-
对发送的数据帧不进行编号,也不要求对方发回确认
-
这样做的理由是局域网信道的质量很好,因信道质量产生差错的概率是很小的
-
-
以太网发送的数据都使用曼彻斯特 (Manchester) 编码,便于同步
曼彻斯特编码缺点是:它所占的频带宽度比原始的基带信号增加了一倍
(2) CSMA/CD 协议的要点
CSMA/CD 含义:载波监听多点接入 / 碰撞检测
-
多点接入:表示许多计算机以多点接入的方式连接在一根总线上
-
载波监听:是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞(总线上并没有什么“载波”。因此, “载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号 )
-
碰撞检测:适配器边发送数据,边检测信道上的信号电压的变化情况。电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞(或冲突)
- 当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)
- 当一个站检测到的信号电压摆动值超过一定的门限值时,就认为总线上至少有两个站同时在发送数据,表明产生了碰撞
“碰撞”就是发生了冲突,“碰撞检测”也称为“冲突检测”
在发生碰撞时,总线上传输的信号产生了严重的失真,无法从中恢复出有用的信息来。每一个正在发送数据的站,一旦发现总线上出现了碰撞,就要立即停止发送,以免继续浪费网络资源,然后等待一段随机时间后再次发送
(3) CSMA/CD 协议工作流程
-
在发送前已经监听过信道,为什么还要进行碰撞检测?
监听时,监听的是接口处,因为信号有传播时延,监听信道空闲,但信道可能并非真正空闲(可见:每一个站在自己发送数据之后的一小段时间内,存在着遭遇碰撞的可能性)
-
碰撞后重传的时机
采用截断二进制指数退避确定
-
强化碰撞
在总线类型的网络中,AB碰撞但C不知道。发送站检测到冲突后,立即停止发送数据帧,接着就发送 32 或 48 比特的人为干扰信号。让当前总线上的所有用户都知道发生碰撞
参考文章
【计算机网络】学习笔记,第三篇:数据链路层(谢希仁版)
计算机网络-数据链路层