第三章 数据链路层
一、数据链路层概述
- 链路就是从一个结点到相邻节点的一段物理线路,中间没有其他任何的交换节点
- 数据链路是指把实现通信协议的硬件和软件加到链路上,就构成了数据链路
- 数据链路层以帧为单位传输数据和处理数据
数据链路层最重要的三个问题:封装成帧,差错检测,可靠传输
二、封装成帧
- 封装成帧是指链路层把上层交付的协议数据单元添加帧头帧尾使之成为帧
-
帧头和帧尾中含有重要的控制信息
-
帧头和帧尾的作用之一就是帧定界:便于下层提取帧。但并不是所有数据链路层协议都有帧定界标志
-
- 透明传输是指数据链路层对上层交付的数据没有任何限制,就好像数据数据链路不存在
- 面向字节的物理链路使用字节填充或字符填充法实现透明传输
- 面对比特的物理链路使用比特填充法实现透明传输
HDLC协议为了实现透明传输,采用零比特填充法(每五个连续的1后面插入一个比特0)
- 为了提高帧的传输效率,应该使得帧的数据部分长度尽可能的大一些
- 考虑到差错控制等多种因素,每一种数据链路层协议都规定了帧的数据部分长度上限,即最大传送单元MTU
三、差错控制
实际传输过程中不是理想的,比特传输中可能会产生错误,例如1变成0,0变成1。这称为比特差错
使用差错检测码来监测数据在传输过程中是否产生比特差错,是数据链路层所要解决的问题
3.1 奇偶校验
定义:在待发送的数据后面添加一位奇偶校验位,使得整个数据(包括校验位)中1的个数为奇数或者偶数
缺点:
- 若奇数个位发生误码,奇偶校验发生变化,可以检查出误码
- 若偶数个位发生误码,奇偶校验不发生变化,不能检查出误码
- 漏检率高,数据链路层很少使用
3.2 循环冗余校验CRC
定义
- 收发双方约定一个生成多项式G(x)
- 发送方基于待发送的数据和生成多项式计算出差错冗余码,将其添加到待传输数据后面一起传输
- 接收方通过生成多项式计算数据是否产生误码
生成多项式举例:
常用CRC生成多项式:
算法要求必须包含最低项
CRC算法特点:
- 检错码只能检测出帧传输过程中是否产生差错,但并不能定位差错,因此无法纠正错误
- 循环冗余校验具有较好的检错能力,虽然计算复杂,但可以使用硬件进行实现,适合广泛用于数据链路层
四、可靠传输
4.1基本概念
- 使用差错检测技术,接收方的数据链路层就可以检测出是否在传输过程中产生误码
- 数据链路层向上层传输的服务类型
- 不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做
- 可靠传输服务:实现发送端发生什么接收端就接收到什么
- 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现误码,也由上层进行处理
- 无线链路易受干扰,误码率较高,因此要求数据链路层必须向上层提供可靠传输服务
- 比特差错只是传输差错的一种
4.2可靠传输实现机制
三种可靠传输实现机制原理并不局限于数据链路层中,可以应用到计算机网络体系的各层协议中
4.2.1停止-等待协议SW
实现过程:
- 发送方每次发送完一个分组就停止发送,等待接受方确认(如果没有误码发送ACK帧,如果存在误码就发送NAK)收到ACK就发送下一分组,收到NAK就重新发送当前分组。
- 为了防止接收方收不到数据分组就不发送ACK或NAK,就在发送方设置一个超时计时器(计时器重传时间选为略大于收发双方平均往返时间)若超过所设置的重传时间就重新发送原来数据分组
- 为了避免分组重复这种传输错误,必须每个分组带上序号,但由于停止等待协议的特殊性,只要保证发送序号只要跟上次发送的数据分组序号不同即可,所以只需要一个比特来进行编号
- 为了发送方判断所接收的ACK分组是否重复可以给ACK分组编号,所用比特数与数据分组编号所用比特数量相同,数据链路层一般不会出现ACK分组迟到情况,因此数据链路层实现停止等待协议不需要给ACK分组编号
4.2.2回退N帧协议GBN
协议实现过程
- 发送方按照规定的发送窗口连续发送一组帧
- 接收方按照分组编号按序接收,若编号不匹配则直接丢弃
累计确认:接收方不一定要对收到的数据分组逐个发送确认,可以在收到几个数据分组后,按序对最后一个数据分组发送确认。ACKn表示序号为n以及以前的数据分组都正确接收
由于回退N帧的特性,当通信线路质量不好时,信道利用率并不比停止等待协议利用率高
4.2.3选择重传协议SR
在回退N帧协议中,一个数据分组产生误码就会导致后续多个数据不能被接收从而被丢弃,这必然导致发送方对其的超时重传,这是对通信原理的极大浪费。
为了提高传输效率,选择重传协议的接收窗口WR不在等于1(应大于1),以便于接收方先收下失序到达但无误码并且序号落在接收窗口内的内些数据分组,等到所缺分组齐全再一并送交上层。
注:选择重传协议为了发送方仅重传出现差错的分组,接收方不在采用累计确认,而是需要对每一个正确接收的分组进行逐一确认
五、点对点协议PPP
点对点协议是目前使用最广泛的点对点数据链路层协议
5.1 PPP协议的标准方法构成
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP 用于建立、配置以及测试数据链路的链接
- 网络控制协议NCPs 其中的每一个协议支持不同的网络层协议
5.2 PPP协议帧格式
-
标志(F) 字段:PPP帧的定界符,取值为0x7E
-
地址(A)字段:取值为0xFF,预留
-
控制(C)字段:取值为0x03,预留
-
协议(P)字段:指明帧的数据部分送给那个协议处理
-
取值0x0021表示:帧的数据部分为IP数据报
-
取值0xC021表示:帧的数据部分为LCP分组
-
取值0x8021表示:帧的数据部分为NCP分组
-
-
帧检验序列(FCS)字段:CRC计算出的校验位
5.3 透明传输
数据链路层应保证数据传输的透明性
5.3.1 面对字节的异步链路:字节填充法
实现方法:在数据部分中插入转义字符
5.3.2 面对比特的同步链路:比特填充法
实现方法:对数据部分进行扫码,发现每五个连续的1,则立即在后面插入一个比特0
5.4 差错检查
PPP协议使用的CRC生成多项式为:
FCS计算范围:
接收方每收到一个PPP帧就对其进行CRC检验,若正确则接收;反之,丢弃这个帧。所以使用PPP协议的数据链路层对上层提供的是不可靠传输服务
5.5 工作状态
六、媒体接入控制
6.1基本概念
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC
随着技术发展,交换技术的成熟以及成本降低,具有更高性能的使用点对点链路和链路层交换机的交换式局域网在有限领域已经完全取代了共享式局域网,但由于无线信道的广播天性,无线局域网仍使用的是共享媒体技术
6.2静态划分信道
信道复用
-
复用是通信技术中重要概念。复用就是通过一条物理线路同时传递多路用户信号
-
当网络中传输媒体的传输容量大于多条单一信道传输的总通信量时,可以利用复用技术在一条物理线路上建立多条通信信道来充分利用传输媒体的带宽
-
常用的信道复用技术有:频分复用FDM,时分复用TDM,波分复用WDM,码分复用CDM。
6.2.1频分复用FDM
基本介绍:
将用于传输信道的总带宽划分为若干个子频带(或子信道),每个子信道传输一路信号,同时保证信号传输互不影响,各个子信道之间设立隔离带
发送端:通过对多路信号采用不同频率进行调制的方法,使调制后的各路信号在频率位置上错开,以达到多路信号同时在一个信道内传输的目的
接收端:通过分用器将各类信号分开,并将合成的复用信号恢复成原始的多路信号
频分复用的所有用户同时占用不同的频带资源并行通信
6.2.2时分复用TDM
- 时分复用是将时间划分成为一段段等长的时分复用帧,每一个时分复用帧用户在每一个时分复用帧中占用固定序号的时隙
- 每一个用户所占的时隙是周期性出现
- 时分复用的用户在不同时间占用相同的频带带宽
6.2.3波分复用WDM
- 波分复用就是光的频分复用,使用一根光纤来同时传输多个光载波信号
- 光信号传输一段距离后悔衰减,所以要用 掺铒光纤放大器 放大光信号
6.2.4码分复用CDM
复用与多址的区别
- 复用是将单一媒体的频带资源划分很多的子信道,子信道之间相互独立互不干扰,从媒体整体资源上来看,每个子信道只占用该媒体频带带宽资源的一部分
- 多址(也可称为多点接入)处理的是动态分配信道给客户。这在用户仅仅暂时性的占用信道中的应用是必须的,基本上所有的移动通信系统基本上属于这种情况。相反,在信道永久分配给用户的应用中,多址是不需要的。
码分复用特点:
- 与频分复用和时分复用不同,码分复用每一位用户可以在同样时间内使用相同的频带进行通信
- 各用户之间使用经过特殊挑选的不同码型,所以相互之间不会造成干扰
- 码分复用最初用于军事通信,所以有较高的抗干扰能力
码分复用实现方式:
6.3随机接入-CSMA/CD协议(总线型局域网使用协议)
载波监听多址接入/碰撞检测CSMA/CD:
-
多址接入MA:多个站连接在一条总线上,竞争使用总线
-
载波监听CS:每个站在发送帧之前先检测一下总线上是否有其他站点在发送帧
- 若检测到总线空闲96比特时间,则发送帧
- 若检测到总线忙,则继续检测并等待总线转为空闲96比特时间,然后发送帧
-
碰撞检测CD:每一个正在发送帧的站点边发送边检测碰撞
- 一旦发现总线上出现碰撞,则立即停止发送,退避一段随机时间后再次发送
- 以太网还采用一种叫做强化碰撞的措施:当发送帧的站点一旦检测到碰撞,除立即停止发送帧以外,还要继续发送32比特或48比特的认为干扰信号,以便于有更多的碰撞信号使得所有站点检测出碰撞
CSMA/CD协议——争用期(碰撞窗口)
CSMA/CD协议——最小帧长
若发送的帧长较小,可能导致发送方在发送过程中未检测出碰撞,而传播过程中遭遇碰撞导致失效,接收方将其丢弃,但发送方在发送过程中检测不到碰撞,从而认为已经正常发出。
- 以太网规定的最小帧长为64字节,即512比特(512比特时间为争用期)
- 若发送数据非常少,可以加入一些填充字节,使得帧长不小于64字节
- 以太网的最小帧长确保了主机可以帧发送完成前检测是否碰撞
- 若争用期没有检测碰撞,那后续数据一定不会发生碰撞
- 若争用期发生碰撞就立即停止发送,那么发送的数据一定小于64字节,那么小于64字节的帧都是由于碰撞而导致的无效帧
CSMA/CD协议——最大帧长
若发送方的发送帧较长,可能导致长时间占用总线或接收方缓存区无法保存,所以要规定发送的最大帧长
CSMA/CD协议——截断二进制指数退避算法
- 若连续发生多处碰撞,就表明可能有较多主机参与竞争信道,使用此退避算法可以使重传需要推迟的平均时间随重传次数而增大,因此减少发生碰撞的概率,有利于整个系统的稳定
- 当重传16次仍不能成功,表明同时发送帧的主机太多,以至于连续发生碰撞,则丢弃该帧,并向高层报告
CSMA/CD 协议工作——信道利用率
CSMA/CD 协议工作——帧发生流程
CSMA/CD 协议工作——帧接收流程
CSMA/CD 协议的重要特性
- 使用 CSMA/CD 协议的以太网不能进行全双工通信而只能进行双向交替通信(半双工通信)。
- 每个站在发送数据之后的一小段时间内,存在着遭遇碰撞的可能性。
- 这种发送的不确定性使整个以太网的平均通信量远小于以太网的最高数据率。
6.4随机接入-CSMA/CA协议(无线型局域网使用协议)
载波监听多址接入/碰撞避免CSMA/CA
无线局域网中不能使用碰撞检测CD的原因
- 由于无线信道的传输条件特殊,其信号强度的动态范目非常大,无线网卡上接收到的信号强度往往会远远小于发送信号的强度(可能相差百万倍)。如果要在无线网卡上实现撞检测CD,对硬件的要求非常高。
- 即使能够在硬件上实现无线局域网的碰撞检测功能,但由于无线电波传播的特殊性(存在隐蔽站问题),进行碰撞检测的意义也不大。
隐蔽站问题:
无线局域网内存在ABC三台主机,a可以覆盖到b,但无法覆盖到c;c可以覆盖到b,但无法覆盖到a;当a,c都给b发送帧时就会产生碰撞,所以a/c互相为隐蔽站
帧间间隔IFS
CSMA/CA协议工作原理
源站为什么在检测到信道空闲后还要再等待一段时间DIFS?
考虑到可能有其他的站有高优先级的帧要发送。若有,就要让高优先级帧先发送
目的站为什么正确接收数据帧后还要等待一段时间SIFS才能发送ACK帧?
SIFS是最短的帧间间隔,用来分隔开属于一次对话的各帧,在这段时间内,一个站点应当能够从发送方式切换到接收方式
CSMA/CA协议的退避算法
使用退避算法时机:
- 在发送数据帧之前检测到信道处于忙状态时;
- 在每一次重传一个数据帧时;
- 在毎一次成功发送后要连续发送下一个帧时(这是为了避免一个站点长时间占用信道)
退避算法:
算法实例:
CSMA/CA协议的信道预约和虚拟载波监听
七、MAC地址、IP地址以及ARP协议
- MAC地址是以太网的MAC子层所使用的地址;属于数据链路层
- IP协议是TCP/IP体系结构中网际层所使用的地址
- ARP协议属于TCP/IP体系中的网际层,其作用是已知设备所分配的IP地址,使ARP协议可以通过IP地址获取到设备的MAC地址
7.1 MAC地址
- MAC地址一般被固化在网卡的电可擦可编程只读存储器中,因此MAC地址也称为硬件地址
- MAC地址有时也被称为物理地址
- 每个网络适配器都有全球唯一的MAC地址,而交换机和路由器往往拥有更多的网络接口,所有拥有更多的MAC地址。所以严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识
IEEE 802局域网MAC规范
-
IEEE 802局域网的MAC地址格式
-
扩展的唯一标识符EUI—48
- MAC地址第一个字节中最后一个比特为1是多播地址,为0是单播地址
- MAC地址第一个字节中倒数第二比特位1是本地管理,为0是全球管理
- 判断是否为多播帧可以看第一位十六进制是否可以整除2,不能则为多播地址
-
IEEE 802局域网的MAC地址发送顺序
- 字节发送顺序:第一字节到第六字节
- 字节内比特发送顺序:b0到b7
-
单播、组播、广播
- 单播:主机之间一对一的通讯模式,网络中的交换机和路由器对数据只进行转发不进行复制。
- 组播:主机之间一对一组的通讯模式,也就是加入了同一个组的主机可以接受到此组内的所有数据,网络中的交换机和路由器只向有需求者复制并转发其所需数据。
- 广播:主机之间一对所有的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要)
7.2 IP地址
IP地址是因特网上主机和路由器所使用的地址,用于标识两部分信息
-
网络编号:标识因特网上数以万计的网络
-
主机编号:标识同一网络上不同主机或路由器各接口
数据包转发过程中IP地址与MAC地址的变化情况
-
数据包转发过程中源IP和目的IP不改变
-
数据包转发过程中源MAC和目的MAC地址逐链个链路改变
7.3 ARP协议
ARP:地址解析协议。
每台电脑都有一张ARP高速缓存表,里面记录着ip地址 与MAC地址的对应关系
ARP工作过程:
- 源主机在自己的ARP高速缓存表中查找目的主机的ip地址所对应的MAC地址,若找到则直接发送,若找不到就发送ARP请求(封装在广播MAC帧中)
- 目的主机收到ARP请求后,将源主机的ip地址与mac地址记录在自己的ARP高速缓存表中,然后发送ARP相应(封装在单播mac帧中),ARP响应包中含有目的主机的ip和mac地址
- 源主机收到ARP响应,将目的ip和mac地址记录到ARP高速缓存表中,然后可以正常发送mac帧
ARP作用范围:逐段链路或逐个网络使用
ARP表中的IP地址与MAC地址的对应关系记录,是会定期自动删除的,因为IP地址与MAC地址的对应关系不是永久性的
八、集线器与交换机区别
九、以太网交换机自学习和转发帧的流程
- 以太网交换机工作在数据链路层(也包括物理层)
- 以太网交换机收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,从而通过该接口转发帧
以太网交换机自学习和转发帧的流程
- 收到帧后进行登记。登记内容为帧的源MAC地址以及进入交换机的接口号
- 根据帧目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况
- 明确转发:交换机知道应当从那个接口转发该帧
- 盲目转发:交换机不知道应当从那个端口转发帧,只能通过除进入交换机的接口外其他所有接口进行转发(也称为泛洪)
- 明确丢弃:交换机知道不应该转发该帧,将其丢弃
- 帧交换表中的每条记录都有自己的有效时间,到期删除,原因:
- 交换机的网口改接了另一台主机
- 主机更换了网卡
十、以太网交换机的生成树协议STP
十一、虚拟网络VLAN
11.1 概述
- 以太网交换机工作在数据链路层(也包括物理层)
- 使用一个或者多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域
- 随着交换式以太网规模的扩大,广播域相应扩大
- 巨大的广播域会带来很多弊端:
- 广播风暴:会浪费网络资源和各主机的cpu资源
- 难以管理和维护
- 潜在的安全问题
- 虚拟局域网VLAN是一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求
11.2 VLAN实现机制
IEEE 802.1Q帧
-
IEEE 802.1Q帧对以太网的MAC帧格式进行了扩展,插入了四字节的VLAN标记
-
VLAN标记的最后12比特称为VLAN标识符VID,他惟一的标志了以太网帧属于哪一个VLAN
- VID取值范围是0-4095
- 0和4095都不用来标识VLAN
-
802.1Q帧是有交换机来处理的,而不是用户主机来处理
- 当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称“打标签”。
- 当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称“去标签"。
交换机的端口类型
端口类型:
- Access
- Trunk
- Hybrid(华为私有)
Access端口
- Access端口一般用于链接用户计算机
- Access端口只能属于一个VLAN
- Access端口的PVID值与端口所属VLAN的ID相同
- Access端口接收处理方法
- 一般只接受“未打标签”的普通以太网MAC帧。根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的VID取值与端口的 PVID取值相等。
- Access端口发送处理方法
- 若帧中的VID与端口的PⅥD相等,则“去标签”并转发该帧;否则不转发。
Trunk端口
- Trunk端口一般用于交換机之间或交换机与路由器之向的互连
- Trunk端口可以属于多个VLAN
- 用户可以设置 Trunki端口的PVID值。默认情況下, Trunk端口的PVID值为1
- Trunk端口发送处理方法:
- 对VID等于PVID的帧,“去标签”再转发;
- 对VID不等于PVID的帧,直接转发;
- Trunk端口接收处理方法:
- 接收“末打标签”的帧,根据接收帧的端口的PVID给帧“打标签”,即插入4字节VLAN标记字段,字段中的ⅥD取值与端口的PVID取值相等。
- 接收“已打标签的帧”