第三章 数据链路层
数据链路属于计算机网络的低层
数据链路层使用的信道主要有:
- 点对点信道
- 使用一对一的点对点通信方式
- 广播信道
- 使用一对多的广播通信方式,较复杂
- 需使用专用的共享信道协议来协调主机的数据发送
- 从整个互联网来看,局域网仍属于数据链路层的范围
本章概要
适配器、转发器、集线器、网桥、以太网交换机的作用以及使用场合
正文
- 点对点信道的数据链路层在进行通信时的主要步骤:
- 发送端数据链路层将网络层交下来的IP数据报添加首部和尾部封装成帧
- 发送端把封装好的帧发送给接收端的数据链路层
- 若接收端的数据链路层收到的帧无差错,则从帧中提取出IP数据报交给上面的网络层,否则丢弃这个帧
- 发送端可以是主机和边缘部分
- 链路和数据链路 link and data link
- 链路 = 传输数据的物理线路
- 数据链路 = 传输数据的物理线路 + 链路上的硬件和软件协议
- 一般使用 网络适配器 来实现协议
- 网络适配器包括了数据链路层和物理层这两层的功能
- 也有将链路分为:物理链路 + 逻辑链路(数据链路)
- 早期的通信协议叫做 通信规程 因此数据链路层中 规程和协议是同义的
- 数据链路层的协议数据单元PDU --帧
- 数据链路层:
- 将网络层交下来的数据构成帧发送到链路上
- 将接收到的帧中的数据取出并上交给网络层
- 网络层协议数据单元就是IP数据报(或称为数据报、分组、包)
三个基本问题
- 封装成帧
- 在数据前后分别添加首部和尾部,构成一个帧
- 帧长 = 帧的书部分长度 + 帧首和帧尾的长度
- 首部和尾部的作用
- 进行帧定界
- 包含许多必要的控制信息
- 从帧首开始发送数据
- 帧的数据部分长度上限---最大传送单元MTU Maximum Transfer Unit
- 帧定界
- 可以使用特殊的帧定界符(当数据由可打印的ASCII码组成)
- SOH start of header
- 处于帧的最前面
- 表示帧的开始
- 01 十六进制
- EOT end of transmission
- 表示帧的结束
- 04
- 透明传输
- 不管怎样的字符都可以放在帧中传输,为透明传输
- 透明的概念:
- 某一个实际存在的事物看起来却好像不存在一样
- 一般使用字符填充或字节填充
- 例如使用ESC EOT 转义字符
- 差错检测
- 0 可能变成 1 1 可能变成 0 叫做比特差错 是传输差错的一种
- 传输错误的比特占所有的传输比特总数的比率叫做误码率 BER
- 误码率不能为 0 所以有了循环冗余校验CRC
- CRC
- 在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,
- 一共发送(k + n)位
- 当传输可能出现差错时,这种增大数据传输开销的差错检测往往是很值得的
- n位冗余码的的得出方法:
- 用二进制的 模2运算 进行2n 乘M的运算,这相当于在M后面添加 n个0
- 得到的(k + n)位的数除以收发双方事先商定的长度(n + 1)位的除数P
- 得出商是Q而余数是R(n位, 比P少一位)
- 余数R作为冗余码拼接在数据M的后面发送出去,这种冗余码常称为帧检测序列FCS Frame Check Sequence
- 因此加上FCS后发送的帧2nM + FCS共有 k + n位
- CRC是检测方法
- FCS 是检错的冗余码
- 若得出的余数R = 0 则判定无差错 就接受
- 若余数R != 0则判定有差错,但无法判断是哪一位出错,就丢弃
- 传输差错可分为:
- 比特差错
- 帧丢失
- 帧重复
- 帧失序
- 帧编号 确认 重传机制
- 数据链路不被要求向上提供可靠传输的服务
- 由上层协议来完成改正差错
- 数据链路层的协议都不是可靠传输协议
点对点协议PPP
HDLC High-level-Data Link Control 高级数据链路控制
PPP Point-to-Point Protocol 点对点协议
PPP
- 简单
- 首要需求
- 不需要纠错
- 不需要序号
- 不需要流量控制
- 只进行CRC检验,如检测正确,就收下, 反之则丢弃
- 其他什么都不做
- 封装成帧
- PPP协议必须规定特殊的字符作为帧定界符
- 透明性
- PPP协议必须保证数据传输的透明性
- 解决数据中碰巧与帧定界符一样的比特组合
- 多种网络层协议
- PPP协议必须能够在同一条物理链路上同时支持多种网络层协议
- 多种类型链路
- PPP还需要能够在多种类型的链路上运行
- 例如串行的或并行的
- 同步的或异步的
- 低速的或高速的
- 电的或光的
- 交换的(动态的)或非交换的(静态的)点对点链路
- 差错检测
- 丢弃有差错的帧
- 减少往后的网络资源浪费
- 检测连接状态
- 自动检测链路是否处于正常工作状态
- 最大传送单元
- MTU 载荷的数据部分的最大长度,而不是帧的总长度
- 网络层地址协商
- 提供机制让通信的两个网络层能知道彼此的网络层地址
- 数据压缩协商
- 必须提供一种方法来协商使用数据压缩算法
- 但并不要求数据压缩算法进行标准化
- 在TCP/IP协议族中,可靠传输由运输层的TCP协议负责
- 此外,PPP协议只支持全双工链路
PPP协议的组成
- 三个部分
- 一个将ip数据报封装到串行链路的方法
- PPP既支持异步链路,也支持面向比特的同步链路
- IP数据报在PPP帧中就是其信息部分
- 这个信息部分受MTU限制
- 一个用来建立、配置和测试数据链路连接的 链路控制协议LCP link control protocol
- 一套 网络控制协议NCP network control protocol
- 其中每一个协议支持不同的网络层协议
- 一个将ip数据报封装到串行链路的方法
PPP协议的帧格式
- 各字段的意义
- 首部 四个字段
- 第一个字段 F(Flag)0x7E 01111110
- 第二个地址字段 A 0xFF 11111111
- 第三个控制字段 C 0x03 00000011
- 第四个2字节协议字段
- 0x0021 IP数据报
- 0xC021 PPP链路控制协议LCP的数据
- 0x8021 网络层的控制数据
- 信息字段
- 长度可变
- 不超过1500字节
- 尾部 两个字段
- 第一个字段 2字节 CRC的帧检测序列FCS
- 第二个字段 F
- 首部 四个字段
- 字节填充
- 当信息字段中出现和标志字段一样时
- 当使用异步传输
- 转义为 0x7D 01111101 并使用字节填充
- 把信息字段中的每一个0x7E 转变为2字节序列 0x7D 0x5E
- 当出现0x7D 转变为 2字节序列 0x7D 0x5D
- 若出现ASCII码控制字符,在该字符前面加入0x7D
- 零比特填充
- PPP协议在SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)而不是异步传输
- (逐个字符的传送),这种情况下,PPP协议采用零比特填充方法来实现透明传输。
- 具体做法
- 在发送端,先扫描整个信息字段 只要发现五个连续的1则立即插入一个0,因此不会
- 不会出现6个连续的1,接收端在收到一个帧时,先找到标志字段F以确定帧的边界,接着再用硬件对比特流进行扫描,每发现五个连续的1时,就将5个连续1后面的一个0删除,还原为原来的比特流
- 而不会引起对帧边界的误判断
PPP协议的工作状态
-
用户拨号接入ISP
-
建立一条从用户到ISP的物理连接
-
这是,用户电脑发送一系列链路控制协议LCP分组,封装成多个PPP帧到ISP
-
建立LCP连接
-
分组及其响应选择了将要使用的一些PPP参数,接着还要进行网络层配置,网络控制协议NCP给新接入的用户分配一个IP地址,这样用户的电脑就成为互联网上一个有IP的主机了
-
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,
-
接着LCP释放数据链路层连接,最后释放物理层的连接
-
链路静止 link dead
- 此时用户与ISP的路由器之间不存在物理层的连接
-
链路建立 link establish
- 用户通过调制解调器呼叫路由器
-
路由器检测到调制解调器发出的载波信号,双方建立物理层连接后
- PPP进入Link Establish状态
-
此时LCP开始协商一些配置选项,
- 发送LCP配置请求帧
- 配置确认帧
- 配置否认帧
- 配置拒绝帧
- 配置选项
- 连路上的最大帧长
- 所使用的鉴别协议 authentication protocol
- 不使用PPP帧中的地址和控制字段
- 协商结束后建立链路层的LCP连接
- 鉴别状态
- 只允许传送LCP协议的分组
- 鉴别协议的分组
- 监测链路质量的分组
- 口令鉴别协议PAP password authentication protocol
- 发起通信的一方发送身份标识符和口令,系统可允许用户重试若干次
- 增加复杂性可用 口令握手鉴别协议CHAP challenge-handshake Authentication protocol
- 若鉴别身份失败,则转入链路终止 link terminate
- 若鉴别成功,则进入‘ 网络层协议‘ Network-layer protocol状态
- NCP根据不同协议互相交换网络层特定的网络控制分组。
- 不同网络层协议,同一个PPP协议
- IPCP分组
- 链路打开
- 可以发送分组
- 可以发送回送请求分组 Echo-Request
- 回送回答LCP分组 Echo-Reply
- 终止请求
- 终止确认
- 链路终止
- 链路静止
- 发送LCP配置请求帧
使用广播信道的数据链路层
局域网
- 较高的数据率
- 较低的延迟
- 较低的误码率
- 具有广播功能
- 局域网上的主机共享连接在局域网上的各种硬件和软件资源
- 设备的位置可灵活调整和改变
- 提高了reliability available 和 survivability
- 集线器 hub 和 双绞线的使用 星型以太网获得了广泛应用
以太网
-
几乎成了局域网的同义词
-
如何使众多用户能够合理而方便地共享通信媒体资源
-
静态划分信道
- 复用
- 代价较高
-
动态媒体接入控制
- 多点接入
- 并非在通信时固定分配给用户
- 随机接入
- 所有用户可随机的发送信息
- 如果恰巧有多个用户同时发送信息,在共享媒体上就会产生碰撞或冲突
- 使得发送失败,因此必须要有解决碰撞的网络协议
- 受控接入
- 用户不能随机的发送信息而必须服从一定的控制,
- 分散控制的令牌环局域网和集中控制的多点线路探询或轮询
- 用的比较少
- 随机接入
-
逻辑链路控制 LLC logic link control 子层和媒体接入控制 MAC medium Access Control 子层
-
适配器的作用
- 计算机与外界局域网的连接是通过通信适配器adapter进行的
- 有接口板网络接口卡NIC network interface card 网卡
CSMA/CD协议
-
常把局域网上的计算机称为 主机 工作站 站点 站
-
采用无连接的工作方式
- 不对发送的帧进行编号,也不要求对边发回确认
- 以太网提供的服务是尽最大努力的交付,即不可靠交付
- 使用CRC校验
- 对是否重传由高层来决定
-
协调总线上各计算机的工作就是以太网要解决的一个重要问题
- 载波监听多点接入/碰撞检测 Carrier Sense Multiple Access with Collision Detection
- 以太网发送的数据都使用曼彻斯特编码的信号
-
多点接入
- 说明这是总线型网络
- 许多计算机以多点接入的方式连接在一根总线上
- 协议的实质是 载波监听 和 碰撞检测
-
载波监听
- 就是用电子技术检测总线上有没有其他计算机也在发送
- 其实总线上并欸有什么 载波 .只不过是借用一下这个名词
- 载波监听就是检测信道
- 不管在发送前,还是在发送中,每个站都必须不停的检测信道
- 发送前检测信道是为了获取发送权
- 发送中检测信道,是为了及时发现碰撞
-
碰撞检测
- 边发送边监听
- 适配器边发送数据边检测信道上的信号电压的变化情况,以便判断其他站是否也在同时发送数据,
- 当多个站同时在总线上发送数据时,总线上的电压变化幅度将会增大,互相叠加
- 当发现总线上出现了碰撞,适配器就要立即停止发送等待一段时间后再次发送
- 电磁波在1km电缆的传播时延约为5us
- 帧最小间隔时间为9.6us
CSMA/CD协议要点
- 准备发送
- 封装成以太帧,发送前检测信道
- 检测信道
- 不停检测直到信道转为空闲并在96比特时间内信道保持空闲了就发送这个帧
- 发送中不断检测信道,即适配器要边发边监听
- 发送成功
- 发送失败
- 重传达16次不能成功
- 停止重传向上报错
- 以太网每发送完一帧,要把已发送的帧暂时保留一下,等待是否重传
使用集线器的星型拓扑
- 集线器 hub
- 每个站需要用两对无屏蔽双绞线, 分别用于发送和接收
- 双绞线两端使用RJ-45插头
- 10BASE-T 10为10Mbit/s BASE为基带信号 T代表双绞线
- 10BASE-T 是局域网发展史上的一个非常重要的里程碑
- 一个集线器有许多接口
- 像一个多接口转发器
- 集线器工作在物理层,每个接口仅仅简单的转发比特,不进行碰撞检测
- 集线器本身必须非常可靠,现在的堆叠式集线器由4-8个集线器堆叠起来使用
- 10BASE-F F为光纤
以太网的信道利用率
- 假定一个10Mbit/s以太网同时有10个站在工作,那么每一个站所能发送数据的平均速率似乎是1/10
- 其实不然
- 因为多个站在以太网上同时工作就可能发生碰撞,信道资源实际上是被浪费了,因此,当
- 扣除碰撞所造成的信道损失后,以太网的信道利用率并不能达到100%
- a = r/ T0
以太网的MAC层
-
MAC层的硬件地址
-
计算机中固化在适配器的ROM中的地址
-
单播 一对一
-
广播 一对全体
-
多播 一对多
-
MAC的帧格式
- DIX Ethernet V2
- 前两个字段分别为6字节长的目的地址和源地址字段
- 第三个字段是2字节的类型字段 用来标志上一层使用的是什么协议
- 第四个字段是数据字段,长度在46到1500字节之间
- 最后一个字段是FCS
- 曼彻斯特编码,当电压不在变化, 即可知道传送结束, 往前四个字节就知道是数据的结束
- 由上层协议来判断填充字节的长度
- 从MAC子层向物理层时还要再帧前插入八个字节,有两个字段构成
- 第一个字段是7个字节的前同步码, 作用是使接收端的适配器在接收MAC帧时能够迅速调整其始终频率,使它和发送端的时钟同步
- 第二个字段是帧开始定界符 定义为10101011 最后两个1就是告诉接收端适配器马上要接收MAC帧信息
- 使用SONET/SDH进行同步传输时则不需要用前同步码和帧开始定界符
- 由于帧之间的间隔,所以帧不需要帧结束定界符,也不需要使用字节插入来保证透明传输
- 802.3
- 规定了以下情况为无效的MAC帧:
- 帧的长度不是整数个字节
- 用收到的帧检测序列FCS查出有错误
- 收到的帧的MAC客户数据字段长度不在46-1500字节之间。
- 考虑到MAC帧首尾长度共有十八字节, 可以得出MAC帧的有效长度在64-1518字节之间
- 对于检查出无效的MAC帧直接丢弃,以太网不考虑重传丢弃的帧
- 规定了以下情况为无效的MAC帧:
- V2和802.3的区别
- 802.3规定的MAC帧的第三个字段是 长度/类型 当这个字段值大于0x0600时,就表示 类型
- 当 长度/类型 字段值 小于0x0600时, 数据字段必须装入上面的LLC子层大的LLC帧
- DIX Ethernet V2
以太网交换机
-
独占传输媒体
-
无碰撞地传输数据
-
缓存存储器
-
帧交换表 地址表 自学习算法
-
生成树协议 STP Spanning Tree Protocol
- 切断闭环
-
不使用CSMA/CD 但由于仍使用以太网帧结构, 故还称为以太网
-
VLAN
高速以太网
- 可扩展
- 灵活的
- 易于安装
- 稳健性好
ohoh
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律