数据链路层
数据链路层 | fang
为什么要数据链路层?
- 物理层解决了相邻节点透明传输比特的问题(相邻:两个节点之间只有一段传输介质、透明:不需要考虑传输介质是什么,只要考虑接口)
- 如何在比特流中找到一组数据的开始和结束位置
- 线路上有多个设备的时候比特流应由谁接受
- 比特传输错误怎么办
什么是数据链路
- 链路:结点间的物理通道,无源的物理线路,中间无任何其他的交换节点
- 数据链路:是节点间的逻辑通道,是链路+协议
- 数据链路层:负责通过一条链路从一个节点向物理链路相连的相邻节点传送帧
- 帧:链路层协议数据单元,封装网络层的数据报
抽象思维 强化分层思想
考虑数据链路层时,可以把物理层当做透明的,直接认为是数据链路层之间在传输帧
- 向上:利用物理层提供的位流服务
- 向下:向网络层提供明确的一些服务的接口
数据链路层信道类型
- 点对点信道
- 广播信道
不同信道,不同控制协议
封装成帧
在数据的前后分别添加首部和尾部,构成一个帧,首部和尾部的一个重要作用就是帧定界,中间一块就是数据链路层的最大传送单元 MTU(Maximum Transfer Unit)
只有数据链路层在增加功能的时候是首尾都加
其他层要加功能都只在头加
关键问题:如何标识一个帧的开始?
- 接收方要明确区分比特流中每一帧的开始和结束(帧同步/帧定界)
- 关键:选择何种定界符
成帧的方式:
- 字节计数 每帧第一个数字是帧的长度 无法应对传输中出现错误
- 带字节填充的定界符法
用控制字符(SOH start of header, EOT end of transmission)作为帧定界符
bug:数据中出现控制字符,不过可以用转义字符
转移字符需要加在数据区的【SOH, EOT, 以及转义字符本身】前面
- 带比特填充的定界符法
- 物理层编码违例 用物理层的一些特殊信号
差错控制
误码率 BER(Bit Error Rate)
- 纠错码:用于错误发生比较平凡的信道,如无线链路
- 检错码:用在高可靠、误码率低的信道,如光纤链路
如何理解
使用检错码,则发现错误就要丢掉重发,如果错误概率高,则多次重发会消耗大量资源,故使用纠错码
循环冗余校验(CRC Cyclic Redundancy Check)
这个可以之后再复习一下
注意这样还没有实现可靠传输
使用CRC只能做到无差错接受
每个帧能确保没有问题,但是没有确保每个帧之间的相对位置关系是正确的
要做到可靠传输,还必须加上帧编号、确认和重传等机制
点对点协议 PPP
Point-to-Point Protocol
PPP协议的组成
- 一种将IP数据报封装到同步/异步串行链路的方法
-
链路控制协议LCP(Link Control Protocol)
-
用来建立、配置和测试数据链路的链路控制协议,通信双方可以协商一些选项,最重要的功能之一是身份验证
-
网络控制协议NCP(Network Control Protocol)
-
其中每个协议支持一种不同的网络层协议,如IP, OSI的网络层, DECnet, AppleTalk等

- 首部4个字段
- F: 定界符,标志一个数据包的开始
- A: 地址字段
- C: 控制字段
- A和C没有携带PPP帧的信息
- 协议字段: 标识信息部分的类型,标识当前处在发送数据/建立连接/通信交互阶段,毕竟除了发送真实的数据,也要又测试链路、身份验证、参数协商,他们共用同一种帧格式(初期LCP; 中期NCP; 后期正常通信阶段)
- FCS: 循环冗余校验码
- F: 尾部的定界符
透明传输
什么是透明?
“透明”的意思是:我不关心你发的是什么数据,你随便发,我保证原封不动地给你送过去。
问题出在哪?为什么会不透明?
数据内部会出现标识符
- PPP用在异步传输时,使用字节填充法(即使用转义字符)
- PPP用在同步传输链路时,采用零比特填充法(使用连续6个1作为标识符,然后在数据内部一旦遇到5个1就在后面插入一个0)
使用广播信道的数据链路层
和刚才的点对点的ppp相对应、
- ppp经常用在广域网(WAN)
- 广播则用在局域网(LAN)
局域网的特点
- 具有广播功能,从一个站点可方便地访问全网
- 便于系统的扩展、演变、灵活调整
广域网的拓扑结构:星形网、总线网、环形网
特点:共享同一信道
面临问题
由于共享同一信道,多个站点同时请求会占用信道
解决办法:信道分配
- 静态分配
- 动态分配
静态分配
频分复用、时分复用、波分复用、码分复用
适用于通信量大且流量稳定的情况、用户数量少且用户数目固定
代价高,不适合突发性业务,不适合局域网
动态媒体接入控制
- 随机接入
- 受控接入
以太网
以太网的标准
把数据链路层分成逻辑链路控制LLC子层和媒体接入控制MAC子层
后来LLC逐渐没有,就只留下了MAC,MAC和物理层结合就是网络接口层,(现在很多适配器上就仅装有MAC协议(网卡))
以太网采取的2种重要措施
CSMA/CD 协议 重要重要
有多点接入一根总线
在数据发送前、发送中都监听信道,进行碰撞检测
- 一旦检测到碰撞:立即停止发生,等待一段随机的时间或再次发送
监听只会监听门口的信道有没有数据,没法完全检测整条信道,所以信道可能并非真正空闲

碰撞不发生的最短往返时间
(争用期)
最短帧长...
- 碰撞后什么时候重传:截断二进制指数退避
总结:
- 使用CSMA/CD协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)
Note
先听后发,边听边发,冲突停止,延迟重发。
使用集线器的星形拓扑
- 传统以太网传输媒体:粗同轴电缆->细同轴电缆->双绞线
- 采用星形拓扑结构
- 星形的中心使用一种可靠性非常高的设备——集线器(hub)
以太网的信道利用率
单程端到端传播时延\(\tao\),则争用期为\(2\tao\)
假设:帧长\(L(bit)\),数据发送速率\(C(bit/s)\),则帧的发送时间\(T_0=L/C(s)\)
流程
首先经过\(2\tao\)的时间抢信道,如果发现冲突则随机等待一段时间后再次尝试,直到抢信道成功
经过\(T_0\)把整个数据帧全部推到信道,同步地会把比特从信道一端传到另一端,传播时延为\(\tao\)
所以占用期为\(T_0 + \tao\)
以太网的信道利用率\(S_{max} = \frac{T_0}{T_0 + \tao} = \frac{1}{1 + a}\)
\(a \rightarrow 0\),表示基本事件都花在\(T_0=\frac{L发送的数据}{c速率}\)表示已发送碰撞就立即可以检测出来,并立即停止发送,因此信道利用率很高
-
以太网的a值应当尽可能小
-
以太网长度收到限制,否则\(\tao\)会太大
- 以太网帧长不能太短,否则\(T_0\)会太小
扩展的以太网
就是老师上课讲的switched ethernet
prefill
- 五层模型
- 物理层 4 特性
- 单工 / 半双工 / 全双工
- 基带 vs 调制
- 奈氏、香农
- 复用技术
- 帧、CRC、PPP
- CSMA/CD、争用期、最短帧
- 集线器 vs 交换机
在物理层拓展以太网
网络层眼中:扩展后的网络依旧是一个网络
使用光纤拓展,主机使用光纤连接到集线器
使用集线器拓展

但是这样接口变多,冲突域也更大了
优点:
- 使原本不同冲突域的计算机能够跨碰撞域通信
- 扩大了以太网覆盖的地理位置
缺点:
- 碰撞域增大,总的吞吐量未提高
- 如果使用不同以太网技术,就不能简单地用集线器互联
- 存在安全隐患,仅是在物理层上的拓展
冲突的根源在于共享总线
在数据链路层
使用网桥,现在进化为以太网交换机
网桥的接口变成了全双工了,就解决了之前信道半双工导致的冲突问题
以太网交换机就是一个多接口网桥
每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式
有了交换机,大家不冲突了,之前的CMSA/CD都没用了
以太网交换机的特点
- 接口有存储器
- 即插即用,其内部的帧交换表(又称地址表)是通过自学习算法自动地逐渐建立起来的
- 使用专用的交换结构芯片,用硬件转发,其转发速率要比使用软件转发的网桥快很多
- 每个接口用户独享带宽,增加了总容量
- 支持多种速率接口
- 支持多类型接口
以太网交换机的自学习功能
收到帧 frame,入端口为 in_port
src = frame.源MAC
dst = frame.目的MAC
第一步:学习源地址
MAC表[src] = in_port
刷新 src 的老化时间
第二步:处理目的地址
如果 dst 是广播地址:
从除了 in_port 以外的所有端口转发
否则如果 dst 不在 MAC 表中:
从除了 in_port 以外的所有端口转发
否则:
out_port = MAC表[dst]
如果 out_port == in_port:
丢弃该帧
否则:
从 out_port 转发该帧
简化版:
-
两台以太网交换机互连
- 会有广播风暴
如何解决交换机形成的环路引发的广播风暴?
消除回路
消除回路:使用生成树协议STP
Spanning Tree Protocol
不改变网络的实际拓扑,但在逻辑上切断不写链路,消除环路
虚拟局域网 VLAN
虚拟局域网,由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求,每一个VLAN的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个VLAN
- 虚拟局域网其实只是局域网给用户提供的一种服务,并不是一种新型的局域网
- 每个VLAN是一个广播域
- 一台主机发出的广播包,只能在VLAN中传播
划分虚拟局域网的方法:
- 基于交换机端口
- 基于计算机网卡的MAC地址
- 基于协议类型
- 基于IP子网地址
- 基于高层应用或服务
高速以太网
数据链路层的最后一点