1. 数据链路层在网络体系结构中的地位
- 主机H1给主机H2发送数据
- 中间要经过三个路由器, 和电话网, 局域网,以及广域网,等多种网络
从五层协议原理体系结构的角度来看
主机应具有体系结构中
的各个层次
而路由器 只需具有体系结构中的网络层,链路层,物理层
.
数据流动过程:
- 当主机H1向H2发送数据时
- 主机H1将待发送的数据
逐层封装后
- 通过
物理层
将构成数据包的各比特
转换为电信号
发送到传输媒体
- 数据包进入路由器后
- 由
下往上
逐层解封
到网络层
. - 路由器根据
数据包
的目的网络地址
和自身转发表
,确定数据包的转发端口
- 然后从网络层向下逐层
封装
数据包 - 并通过
物理层
将数据包发送到传输媒体 - 数据包最终到达主界H2时,还要由
下往上逐层解封
,最终解封出主机H1所发送的数据
2. 概述
- 链路就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他的交换节点
- 数据链路是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 数据链路层以
帧
为单位传输和处理数据
三个问题:封装成帧、差错检测、可靠传输
网络 | 干的活 | 称之为 |
---|---|---|
应用层 | 封装成为应用层协议数据单位 | 应用层协议数据单元 |
运输层 | 运输层为其添加运输层协议首部 | 运输层协议数据单元 |
网络层 | 网络层为其添加网络层协议首部 | 网络层协议数据单元 |
数据链路层 | 添加一个数据链路层协议首部, and 添加一个帧尾 | 帧头 |
3.封装成帧
帧头和帧尾的作用之一就是帧定界
引自GPT 3.5
在 OSI 网络模型中,数据链路层是第二层,它负责将网络层(第三层)传递过来的数据包(也称为分组)封装成帧,以便在物理层(第一层)进行传输。
封装成帧的过程包括以下几个步骤:
- 帧起始标记:数据链路层在传输数据之前,需要在每个数据帧的开头添加一个特定的
起始标记
,用于标识帧的开始
。起始标记通常是一个固定的比特模式
,例如01111110
。 - 帧首部:在起始标记之后,帧首部包含了一些必要的控制信息,如帧的地址、控制字段等。这些信息用于识别和控制帧的传输和处理。
- 数据字段:帧首部之后是数据字段,也称为数据负载。数据字段是网络层传递过来的数据包,它包含了要传输的实际数据。
- 帧尾部:帧尾部包含了一些
错误检测和校验的字段
,用于保证数据的完整性和准确性
。常见的错误检测方法包括循环冗余检验(CRC)
和帧检验序列(FCS)
。 - 帧结束标记:在帧尾部之后,数据链路层添加一个帧结束标记,用于标识帧的结束。帧结束标记与起始标记相同,通常是
01111110
。
通过封装成帧,数据链路层将网络层传递的数据包转换为一系列的帧,每个帧都包含了起始标记、帧首部、数据字段、帧尾部和帧结束标记
。这样,数据链路层就能够将数据传输到物理层
,并通过物理介质进行实际的传输。
封装成帧的过程使得数据链路层能够在物理层上可靠地传输数据,并提供了错误检测和校验的机制,以确保数据的完整性和准确性。这种封装成帧的方式是在不同的网络技术和协议中广泛使用的基础。
我们将数据链路层
给网络层交付的协议数据单元
添加针头
和 针尾
的操作称为封装成针
添加针头和针尾的目的 都是为了在链路上 以针为单元来传送数据 也就是为了实现数据链路层本身的功能
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大一些
如图所示 帧的数据部分的长度
应远大于
帧头和帧尾的长度
这样才能提高针的传输效率.
因为仅从数据链路层来看 帧的数据部分才是真正要传输的数据
帧头和帧尾 是为了实现数据链路层功能而额外添加的
当然了考虑到差错控制等多种因素, 每一种数据链路层协议, 都规定了针的数据部分的长度上限, 称为最大传送单元MTU
4. 差错检测
实际的通信链路都不是理想的,毕竟在传输过程中可能会产生差错。1与0互变,这称为比特差错
使用差错检测码
来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一
奇偶校验(漏检率比较高)
- 在待发送的数据后面添加1位奇偶检验位,使整个数据中“1”的个数为奇数(奇校验) 或 偶数(偶校验)
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码
- 如果有偶数个位发生误码,则奇偶性不发生误码,不能检查出误码(漏检)
循环冗余校验CRC(广泛运用)
- 收发双方约定好一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出检错码(冗余码),将其添加到待传输数据的后面一起传输
- 接收方通过生成多项式来计算收到的数据是否产生了误码
- 计算方式:摸2取余
- 构造被除数:待发送信息后加上多项式最高次数个0
- 构造除数:生成多项式各项系数构成的比特串
- 做除法,检查余数,不够补零