概述
- 除了必须建立一条物理线路(物理层的功能)之外,还必须有一些规程或协议来控制这些数据的传输,以保证被传输数据的正确性
- 设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向它的上一层—网络层提供高质量的服务
- 就像我们修好了路,还得制定一些交通法规,使路上行驶的车辆必须按照一定的规则行驶,否则可能会经常出现交通事故
-
结构
局域网中,数据链路层分为LLC子层(Logical Link Control)/ MAC子层(MediumAccess Control)
- MAC子层的目的主要是解决多路通信的介质争用和寻址,所以其主要适用于广播型链路和点对多点链路
- MAC子层接受物理层的服务,为LLC子层服务
MAC子层
- 控制不同用户数据传输中对物理层传输介质的访问,其中包括介质访问时的寻址(这里是通过MAC地址进行的),以及解决可能发生的介质访问冲突
- 与各种传输介质访问有关的问题都放在“MAC子层
- 数据帧的封装/卸装
- 帧的寻址和识别
- 帧的接收与发送
- 帧的差错控制
- 介质访问冲突控制等
LLC子层
- 负责数据链路层中逻辑链路,与传输介质访问无关的问题都集中在LLC子层来解决
- 逻辑链路的建立和释放
- 控制信号交换
- 数据流量控制
- 解释上层通信协议传来的命令并且产生响应
- 给数据帧加上传输序列号
- 数据传输差错控制,如数据发生错误、重复收到相同的数据、接收数据的顺序与传送的顺序不一致等
主要功能
相对于物理链路而言,数据链路一般是非永久存在的(但局域网中的数据链路是永久的),仅当有数据传输时建立并存在,在数据传输完后自动拆除。数据链路是由数据链路层中的LLC子层通过相应的通信规程(也就是通常所说的协议)建立并管理的。
数据链路管理
- 数据链路分为点对点链路和点对多点链路
- 点对点:PPP协议 PPPOE(基于以太网的点对点协议)
- 点对多点:以太网协议、WLAN协议,HDLC(高级数据链路控制)协议。
根据数据链路层协议的不同,所建立的数据链路类型也会有不同,数据链路层提供的服务类型:
- 有确认的 面向连接服务
- 必须先建立好双方通信连接
- 必须要求对方确认后才进行
- 存在三个阶段,即数据链路建立、数据传输、数据链路释放等阶段
- 是独占链路的,只有在当前数据传输完成,释放了链路后,其他用户才可能与同一个接收端进行数据传输
- 也可确认接收端正确地接收了发送来的数据,而且是按数据帧发送顺序接收,每一帧只接收了一次,因为它规定接收端在接收到每一个数据帧(每个帧都有编号)后必须对发送端进行确认
- LLC子层主要提供的就是 有确认的 面向连接的 服务, 包括链路建立,链路保持,链路释放
- 有确认的无连接服务
- 它在进行数据传输前是不需要建立专门的数据链路的,自然也不需要在数据传输结束后释放数据链路
- 无确认的无连接服务
- 有确认的 面向连接服务
网络层传输的包,在数据链路层中传输的是“帧”,在物理层传输的是比特流
- 发送端数据包 到达数据链路层后加上数据链路层的协议头和协议尾就构成了一个数据帧
- 最大的帧 为 MTU 以太网中为 1500字节
- 接收端的物理层把比特流向数据链路层传输,将比特流封装成数据帧
- 帧同步的方式
- 字节计数法(用特殊字符设定开始, 并从数据中获取帧长度,获得完整的帧)
- 字符填充的首尾定界符法(特殊字符设定 开始和介绍)
- 比特填充的首尾定界符法(用 一串特定的 比特流传输)
- 违法编码法(用违法的编码 界定首位)
差错控制
- 如果有帧出现了错误怎么办?如果有帧丢失了怎么办?
- 校验码 : PCC CRC
- 差错纠正: 反馈检测法 自动重发请求 纠错码 等
流量控制
- 原因
- 发送端的数据发送速度与接收端的数据接收速度要匹配,否则接收端来不及接收就会造成数据在传输过程中的丢失
- 发送端的数据发送速度要与线路上的承载速率(带宽)
- 许多高层协议中也提供流量控功能,只不过流量控制的对象不同而已
- 数据链路层的流量控制是针对链路两端的点对点控制
- 而传输层则是直接针对通信双方的端到端系统
- 方案
- 基于反馈
- 空闲重发方案(也可以实现差错校验),就是接收端在接收到一个数据帧后,要向发送端发送一个确认帧,表示发送端可以继续向它发送数据了。这种方案也称“停-等”方案
- 问题: 就是在数据帧或确认帧丢失时,双方会无休止等待,采用定时器可以解决
- 基于速率
- 是基于窗口滑动机制的速率控制方案,规定发送端一次可以发送多少个数据帧,限制了发送端的数据传输速率,无需确认帧
- 基于反馈
差错控制
- 分为差错检测功能和差错纠正功能
差错检测
- PCC 奇偶校验码
- 在原信息代码的最后添加一位用于奇校验或偶校验的代码,让传输的帧中“1”的个数固定为奇数或偶数
- 奇偶校验方法只可以用来检查单个码元错误,检错能力较差,所以一般只用于本身误码率较低的环境
CRC 循环冗余校验检错
反馈检测法
- 接收端将接收的数据 原封不动 发回来 用于校验
- 信道利用率 低
- 空闲重发请求方案(ARQ法)
- 接收端则根据检错码对数据帧进行差错检测;若发现错误,就返回请求重发的响应,发送端收到请求重发的响应后,便重新传送该数据帧
- 仅需返回少量控制信息
- 又称停-等(Stop and Wait)法,该方案规定发送端每发送一帧后就要停下来,然后等待接收端发来的确认信息
- 在计时器超时时,发送端也会重发对应的帧。
- 缺点就是每传送一个数据帧都要有一个等待时间(称为占空时间),信道的有效利用率低
- 连续重发请求方案(ARQ法)
- 可以连续发送一系列数据帧(也不总是不断地发送,具体可以连续发送多少个帧,要视双方的缓存空间大小,即窗口大小而定)
- 发送端同样可以对传输出错的数据帧(如接收端返回了否认帧,或者响应计时器超时的帧)进行重发
- 需要在发送端设置一个较大的缓冲存储空间(称为重发表),用以存放若干待确认的数据帧
- 出现差错时:
- 回退N帧:
- 如果发送端一共发送了n个数据帧,但收到接收端发来的ACK确认帧中少了某一个或几个帧的ACK确认帧
- 则发送端可以判断接收端最后一个正确接收的帧编号,然后从缓存空间的重发表中重发所收到的最后一个ACK帧序号以后的所有帧
- 很多数据帧前的某个数据帧或确认帧发生了差错,就得重新发送所有数据帧,这样又使传输效率降低。
- 选择重发策略:
- 当接收端发现某帧出错后,其后继续送来的正确帧虽然不能立即递交给接收端的“网络层”,但接收端仍可接收下来,先存放在一个缓冲区中,同时通过向发送端发送NAK否认帧,要求发送端重新传送出错的那一帧
- 但要求发送端和接收端都有足够大的缓冲区空间,以便存储多个帧的重发表和预提交数据帧。
- 回退N帧:
- 海明纠错码
- 可以有多个校验位,具有检测并纠正一位错误代码功能的纠错码,所以它也仅用于信道特性比较好的环境中
流量控制
- 一些差错控制方案本身就具有一定的流量控制功能(空闲重发,连续重发),最终一次能发送多少个帧,是由双方缓存空间大小决定的。这就是本节后面将要提到的“窗口大小”。
- 数据链路层的流量控制方案主要有两种:
- 一种是适用于面向字符的异步通信协议(如RS—232)中的简单流量控制方案—XON/XOFF(继续/停止)方案
- 当接收端认为不能继续接收数据时(也就是接收端的缓存空间满了或者接近满时),接收端会向发送端发送一个XOFF控制字符
- 这样就会使得信道的利用率大打折扣
- 另一种是适用于大量数据通信环境中的“滑动窗口机制”
- “滑动窗口机制”中的“窗口”是指发送端和接收端的缓存空间大小
- 发送端在收到确认帧后会删除原来保存在缓存中的待重发帧
- 缓存空间越大,用于帧编号的位数就要越多,如1位可以表示2个帧(也就是窗口大小为2)
- 一种是适用于面向字符的异步通信协议(如RS—232)中的简单流量控制方案—XON/XOFF(继续/停止)方案
数据链路层中常见的协议
- 面向字符的链路层协议
- 数据帧中的数据都被看作字符序列(所以称之为面向字符的同步传输),所有的控制信息也都是字符形式(当然数据的表示形式还是二进制的比特流)
- IBM BSC
- 一次可以传送由若干个字符组成的数据块
- 同时规定了十种特殊字符作为这个数据块的开始与结束标志
- DEC DDCMP
- SLIP
- PPP
面向比特的链路层协议
网卡(也叫网络适配器)
- 有线/WLAN 网卡
- 网桥
- 早期的两端口二层网络设备,被交换机替代
- 交换机
- 具有多个交换端口
- 数据转发效率更高(集线器是广播,而交换机读取mac地址 通信)
- 更强的MAC地址自动学习能力
- 相对于集线器而言:
- 在OSI中的工作层次不同,集线器仅在物理层
- 集线器广播发送,而交换机不是
- 集线器共享一个带宽,而交换机不是
- 原理
- 有用于数据帧转发的MAC地址与端口的映射表(CAM表)
- 通过 静态配置、动态学习 获得CAM表
