数据链路层
数据链路层将原始的传输线路变成一条 逻辑的传输线路,实现实体间二进制的正确传输,为网络层提供可靠的数据信息。数据单位是 帧,可以进行 流量控制。主要功能有: 链路的建立、拆除、分离;帧定界和帧同步;顺序控制;差错检测、恢复;链路标识、流量控制。
数据链路是数据的通道,是物理链路加上必要的 通信协议组成的逻辑链路。
数据链路层的结构
数据链路层分为两个子层:1.逻辑链路控制层(LLC);2.媒体接入控制层(MAC)
逻辑链路控制层(LLC)
LLC层与硬件无关,实现流量控制等功能。LLC只在IEEE 802.3格式的时候才会用到,现在很少使用了。
媒体接入控制层(MAC)
MAC层与硬件相关,提供硬件和LLC层的接口。主要功能包括数据帧的封装/卸装、帧的寻址和识别、帧的接收和发送、链路的管理、帧的差错控制等。
MAC层的主要访问方式有三种:CSMA/CD、令牌环和令牌总线。
MAC帧格式
以太网中,MAC帧格式如下,最大1518(1500+6+6+2+4)字节、最小64(46+6+6+2+4)字节(从目的地址到校验和的长度)
前导字段 | 帧起始符 | 目的地址 | 源地址 | 类型 | 数据 | 填充 | 校验和 |
---|---|---|---|---|---|---|---|
7字节 | 1字节 | 6字节 | 6字节 | 2字节 | 0~1500字节 | 0~46字节 | 4字节 |
- 前导字段:长度7个字节
- 帧起始符字段:固定格式为10101011,长度1个字节(1个字节=8位)
- 目的地址、源地址字段:6字节,48位
- 类型字段:标识上一层使用什么协议,也可以表示数据字段长度
*类型字段占2个字节(16位),可表示的数为0 ~ 65535。MAC帧最大长度位1500,所以用0 ~ 1500表示长度;1536 ~ 65535用于描述类型值。 - 数据字段:上一层(网络层)的协议数据,长度为0 ~ 1500字节
- 填充字段:确保最小帧长64字节,长度为0 ~ 46字节
- 校验和字段:32位的循环冗余码,CRC-32(稍后会介绍到)
MAC地址
MAC地址,又被叫成硬件地址,填写在MAC帧的目的地址和源地址字段(6字节,48位),由48比特组成。
MAC地址前24位是厂商编号,由IEEE分配给制造商;后24位为序列号,由制造商自行分配;是全球唯一的编号
载波监听多路访问/冲突检测( CSMA/CD)
CSMA/CD是一种争用型的介质访问控制协议。其工作原理是:发送数据前先监听信道是否空闲。若空闲,立即发送数据;在发送数据时,边发送边监听;若监听到冲突,则立即停止发送,等待随机时间再重新尝试。
CSMA/CD是一种解决访问冲突的协议,适合传输非实时数据。在网络负载小的时候,CSMA/CD协议的通信效率很高;当网络负载变大时,发送时间增加,效率下降。
- 多路访问
多路计算机连接在一根总线 - 载波监听(CSMA)
发送数据前检测总线中是否有数据发送。若有,则进入类似退避算法的程序,然后反复进行载波监听;若没有,则运行不同的坚持算法进行发送。
以太网规定的帧间最小间隔为9.6μs。 - 坚持算法
分为以下三类:- 1—持续CSMA。当信道忙或发生冲突时,一直监听,一旦有空闲(在帧间最小间隔时间内没有检测到信道上有冲突)便发送
- 非持续CSMA。发送方并不持续监听信道。冲突时等待随机的一段时间N,再发送
- P——持续CSMA。信道空闲时,发送方按照P概率发送,以1-P概率不发送。若不发送数据,下一个时间间隔 τ \tau τ仍空闲,同理进行发送;若信道忙,则等待下一个时间间隔 τ \tau τ;若冲突等待随机一段时间重新开始。
τ \tau τ为单程网络传输时延
- 冲突检测
即边发送边监听- 冲突检测最长时间为2倍的总线端到端的传播时延( 2 τ 2\tau 2τ), τ \tau τ称为争用期,又叫碰撞窗口。经过争用期还没有检测到碰撞,才能肯定发送不会出现碰撞。
- 10M以太网的争用期为51.2μs。10M/s网络,51.2μs可以发送512bit数据即64字节。所以10M以太网的最小帧长为64字节,小于64字节的数据都会被丢弃。(千兆以太网和万兆以太网的最小帧长为512字节)
- 最 小 帧 长 = 网 络 速 率 × 2 × ( 最 大 段 长 / 信 号 传 播 速 度 ) 最小帧长=网络速率 \times 2 \times (最大段长/信号传播速度) 最小帧长=网络速率×2×(最大段长/信号传播速度)
即 L = R × 2 × d / v 即L=R \times 2 \times d/v 即L=R×2×d/v
- 退避算法
CSMA只能减少冲突,不能完全避免冲突,只有争用期没有检测到碰撞,才能肯定本次传输不会发生碰撞。以太网使用退避算法中的一种——截断的二进制指数退避算法,来解决发送数据的碰撞问题。
发生碰撞的站在信道空闲后并不立即发送数据,而是推迟一个随机时间进入发送流程。减少重传时再次发送碰撞的概率
具体算法如下:- 设定基本退避时间为争用期 2 τ 2\tau 2τ
- 从整数集合[0, 2 k − 1 2^k-1 2k−1]中随机取一个数 r r