数据链路层简述
数据链路层
概述
链路(Link)就是从一个结点到相邻结点的一段物理线路,中间没有任何其他的交换结点
数据链路(Data Link)是指把实现通信协议的硬件和软件加到链路上,就构成数据链路
数据链路层以帧为单位传输和处理数据
使用点对点信道的数据链路层
几个重要问题
封装成帧
数据链路层给上层交付的协议数据单元添加帧头和帧尾使之成为帧。
- 帧头和帧尾中包含有重要的控制信息。
以太网V2的MAC帧
6字节 | 6字节 | 2字节 | 46-1500字节 | 4字节 |
---|---|---|---|---|
目的地址 | 源地址 | 类型 | 数据载荷 | FCS |
PPP帧的格式
1字节 | 1字节 | 1字节 | 2字节 | <=1500字节 | 2字节 | 1字节 |
---|---|---|---|---|---|---|
标志 | 地址 | 控制 | 协议 | 数据载荷 | FCS | 标志 |
- 帧头和帧尾可以进行帧定界
透明传输
透明传输指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样。
- 面向字节的物理链路使用字节填充的方法实现透明传输。
- 面向比特的物理链路使用比特填充的方法实现透明传输。
当物理链路提供的是面向字符的传输服务时(物理链路以字符为单位传输数据),帧定界可以使用某个特殊的不可打印的控制字符作为帧定界符。ASCⅡ码是7位编码,一共可以组成128个不同的ASCⅡ码,其中可以打印的95个,不可打印的控制字符33个。由于帧定界符使用专门的控制字符,因此传输的数据不能出现这些控制字符,否则会出现帧定界错误。在传输文本文件时没有问题,但涉及图片媒体等文件可能会出现这类字符。帧开始符SOH,帧结束符EOT。
解决透明传输:
- 发送端的数据链路层在数据中出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是 1B)。
- 字节填充(byte stuffing)或字符填充(character stuffing)——接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。
- 如果转义字符也出现数据当中,那么应在转义字符前面插入一个转义字符。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
为了提高帧的传输效率,应当使帧的数据部分的长度尽可能大。考虑到差错控制等因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU
差错检测
实际的通信链路都不是理想的,比特在传输过程中可能会产生差错:1可能会变成0,0也可能会变成1。称为比特差错。
在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER
误码率与信噪比有很大的关系。高信噪比对应低误码率。
使用差错检测码来检测数据在传输过程中是否产生了比特差错。
奇偶校验
- 在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中“1”的个数为奇数或偶数。
- 如果有奇数个位发生误码,则奇偶性发生变化,可以检查出误码;
- 如果有偶数个位发生误码,则奇偶性不发生变化,不能检查出误码(漏检);
循环冗余校验CRC
-
收发双方约定好一个生成多项式;
常用生成多项式
- CRC-16
- CRC-CCITT
- CRC-32
-
发送方基于待发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到待传输数据的后面一起传输;
-
接收方通过生成多项式来计算收到的数据是否产生了误码。余数为0,判断无误码;否则判断有误码。
例如:
待发送信息:101001
生成多项式为:1101
余数:001
发送信息:101001001
检错码只能检测出帧在传输过程中出现了差错,但不能定位差错,因此无法纠正错误。
若想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。纠错码开销较大,较少使用。
循环冗余校验CRC有很好的检错能力,漏检率非常低,虽然计算较复杂,但易于用硬件实现,被广泛应用于数据链路层。
帧检验序列 FCS
-
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。
-
循环冗余检验 CRC 和帧检验序列 FCS并不等同。CRC 是一种常用的检错方法,而 FCS 是添加在数据后面的冗余码。也可以用其他检错方法得到冗余码。
仅用循环冗余检验 CRC 差错检测技术只能做到无差错接受(accept)。凡是接受的帧(即不包括丢弃的帧),我们都能以非常接近于 1 的概率认为这些帧在传输过程中没有产生差错。也就是说:凡是接收端数据链路层接受的帧都没有传输差错(有差错的帧就丢弃)。要做到“可靠传输”(即发送什么就收到什么)就必须再加上确认和重传机制。
可靠传输
不可靠传输服务:丢弃检测到差错的帧。
可靠传输服务:检错重传,发送端发送什么,接收端就收到什么。
一般情况下,有线链路的误码率较低,为了减小开销,不要求数据链路层向上提供可靠传输服务。可靠传输的问题由上层处理。
无线链路易受干扰,误码率较高,因此要求数据链路层向上层提供可靠传输服务。
比特差错只是传输差错的一种。传输差错还包括分组丢失,分组失序,分组重复。这些一般出现在数据链路层的上层。可靠传输服务不仅局限于数据链路层,其他各层也可选择实现可靠传输。
点对点协议PPP
点对点协议PPP是目前使用最广泛的点对点数据链路层协议。
一般的因特网用户都要通过连接到某个因特网服务提供商ISP,例如中国移动,中国联通,中国电信,才能接入因特网。这些ISP已经从以太网管理结构申请到了一批IP地址。用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机。
用户计算机与ISP进行通信时,一般都是用PPP协议,PPP over Ethernet,简称为PPPoE。
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由三部分构成:
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP,用于建立,配置以及测试数据链路的连接,可以实现身份验证和欠费管理
- 一套网络控制协议NCPs,其中的每个协议支持不同的网络层协议
PPP协议的帧格式
F | A | C | P | 帧的数据部分 | FCS | F |
---|---|---|---|---|---|---|
1字节 | 1字节 | 1字节 | 2字节 | 不超过1500字节 | 2字节 | 1字节 |
标志字段(Flag):PPP帧的定界符,取值为0x7E
地址字段(Address):取值为0xFF,预留,目前无用
控制字段(Control):取值为0x03,预留,目前无用
协议字段(Protocol):指明帧的数据部分送交哪个协议处理
- 取值0x0021表示帧的数据部分为IP数据报
- 取值0xC021表示帧的数据部分为LCP分组
- 取值0x8021表示帧的数据部分为NCP分组
帧检验序列字段(FCS):CRC计算出的校验位
PPP协议的透明传输
0x7E(01111110)
面向字节的异步链路采用插入转义字符的字节填充法
发送方:
- 出现的每个7E(定界符)字节转变为2字节序列(7D,5E)
- 出现的每个7D(转义字符)字节转变成2字节序列(7D,5D)
- 出现的每一个ACSII码控制字符(数值小于0x20的字符),则在该字符前面插入一个7D字节,同时同时将该字符的编码加上0x20
接收方:进行反变换即可恢复出原来的帧的数据部分
面向比特的同步链路采用插入比特0的比特填充法
发送方:
对帧的数据部分进行扫描,只要发现5个连续的比特1,则立即填充1个比特0。
接收方:
对帧的数据部分进行扫描,只要发现5个连续的比特1,则把其后的1个比特0删除。
点对点协议的工作状态
使用广播信道的数据链路层
以太网的媒体接入控制协议CSMA/CD
802.11局域网的媒体接入控制协议CSMA/CA
虚拟局域网VLAN
使用一个或多个以太网交换机互连起来的交换式以太网,其所有站点都属于同一个广播域。随着交换式以太网规模的扩大,广播域相应扩大。巨大的广播域会带来很多弊端:
- 广播风暴:浪费网络资源和各主机的CPU资源
- 难以管理和维护
- 潜在的安全问题
TCP/IP协议栈中的很多协议都会使用广播:地址解析协议ARP,路由信息协议RIP,动态主机配置协议DHCP
所以需要将较大的广播域分割为较小的广播域。
- 使用路由器可以隔离广播域。路由器默认不对广播数据进行转发,但路由器的成本较高
- 虚拟局域网VLAN:将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有共同的需求。
虚拟局域网VLAN的实现机制
虚拟局域网技术在交换机上实现的,需要交换机能够实现两大功能:处理带有VLAN标记的帧,即892.1Q帧;交换机的各端口可以支持不同的端口类型,不同端口类型的端口对帧的处理方式不同。
IEEE 802.1Q帧
IEEE 802.1Q帧对以太网的MAC帧格式进行了拓展,插入了4字节的VLAN标记。
VLAN标记的最后12比特为VLAN标识符VID,唯一地标识了以太网帧属于哪个VLAN。VID的取值范围是0-4095,0和4095都不用来表示VLAN,因此用于表示VLAN的VID的有效取值范围是1-4094.
802.1Q帧是由交换机来处理的,而不是由用户主机来处理的。当交换机收到普通的以太网帧时,会将其插入4字节的VLAN标记转变为802.1Q帧,简称”打标签“。当交换机转发802.1Q帧时,可能会删除其4字节VLAN标记转变为普通以太网帧,简称”去标签“。
交换机的端口类型
有三种:
- Access
- 一般用于连接用户计算机;Access端口只能属于一个VLAN;端口的PVID值与端口所属VLAN的ID相同,默认为1
- 接收处理的方法:一般只接受”未打标签“的普通以太网MAC帧。根据接收帧的端口的PVID给帧”打标签“,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等
- 发送处理方法:若帧中的VID与端口的PVID相等,则”去标签“并转发该帧;否则不转发
- Trunk
- 一般用于交换机之间或交换机与路由器之间的互连;可以属于多个VLAN;用户可以设置Trunk端口的PVID值,默认为1
- 发送处理方法:对VID等于PVID的帧,”去标签“再转发;对VID不等于PVID的帧,直接转发
- 接收处理方法:接收”未打标签“的帧,根据接收帧的端口的PVID给帧”打标签“,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等;接收”已打标签“的帧
- Hybrid
- 既可用于交换机之间或交换机与路由器之间的互连,也可用于交换机与用户计算机之间的互连;可以属于多个VLAN;用户可以设置PVID值,默认为1
- 发送处理方法:查看帧的VID是否在端口的”去标签“列表中:若存在,则”去标签“后再转发;若不存在,则直接转发
- 接收处理方法:接收”未打标签“的帧,根据接收帧的端口的PVID给帧”打标签“,即插入4字节VLAN标记字段,字段中的VID取值与端口的PVID取值相等;接收”已打标签“的帧
互连设备
网桥和交换机
在数据链路层扩展局域网是使用网桥。
- 网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发。
- 网桥具有过滤帧的功能。当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口。
网桥的自学习和转发帧的步骤
- 网桥收到一帧后先进行自学习。查找转发表中与收到帧的源地址有无相匹配的项目。如没有,就在转发表中增加一个项目(源地址,进入的接口和时间)。如有,则把原有的项目进行更新。
- 转发帧。查找转发表中与收到帧的目的地址有无相匹配的项目。
- 如没有,则通过所有接口(除进入网桥的接口)广播。
- 如有,则按转发表中给出的接口进行转发。
- 若转发表中给出的接口就是该帧进入网桥的接口,则丢弃该帧。
网桥在转发表中登录三个信息
源地址,进入的接口和时间。
因为以太网的拓扑可能经常发生变化,站点也可能会更改适配器,即改变了站点的地址。此外,以太网上的工作站并非总是接通电源的。把每个帧达到网桥的时间登记下来,就可以在转发表中只保留网络拓扑的最新状态信息。这样就使得网桥中的转发表能反映当前网络的最新拓扑状态。
值得注意的是,网桥与交换机的区别在与市场,而不在与技术。交换机对网络进行分段的方式与网桥相同,交换机就是一个多端口的网桥。确切地说,高端口密度的网桥就称为局域网交换机。
交换机与网桥的真正区别主要在于现代的交换机与旧式网桥的区别上。
交换机与网桥的区别
局域网交换机的基本功能与网桥一样,具有帧转发、帧过滤和生成树算法功能。但是,交换机与网桥相比还是存在以下不同:
1、交换机工作时,实际上允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。即网桥一般分有两个端口,而交换机具有高密度的端口。
2、分段能力的区别
由于交换机能够支持多个端口,因此可以把网络系统划分成为更多的物理网段,这样使得整个网络系统具有更高的带宽。而网桥仅仅支持两个端口,所以,网桥划分的物理网段是相当有限的。
3、传输速率的区别
交换机与网桥数据信息的传输速率相比,交换机要快于网桥。
4、数据帧转发方式的区别
网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列FCS后,才开始转发该数据帧。交换机具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据以前,不需要在接收完整个数据帧和经过32bit循环冗余校验码CRC的计算检查后的等待时间。
集线器和交换机
集线器
使用集线器的以太网在逻辑上是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议,只能工作在半双工模式,收发帧不能同时进行;集线器只工作在物理层,它的每个接口仅简单地转发比特,不进行碰撞检测;集线器一般都有少量的容错能力和网络管理功能。例如,若网络中某个网卡出了故障,不停地发送帧。此时,集线器可以检测到这个问题,在内部断开与出故障网卡的连线,使整个以太网仍然能正常工作。
集线器HUB在物理层扩展以太网。
以太网交换机
以太网交换机通常有多个接口。每个接口都可以直接与一台主机或另一个以太网交换机相连。一般都工作在全双工方式。以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信,无碰撞。以太网交换机一般都具有多种速率的接口,例如:10Mb/s,100Mb/s,1Gb/s,10Gb/s接口的多种组合。以太网交换机工作在数据链路层,收到帧后,在帧交换表中查找帧的目的MAC地址所对应的接口号,然后通过该接口转发帧。以太网交换机是一种即插即用设备,其内部的帧交换表是通过自学习算法自动地逐渐建立起来的。
帧的两种转发方式:
- 存储转发
- 直通交换:采用基于硬件的交叉矩阵。交换时延非常小,但不检查帧是否有差错。
以太网交换机自学习和转发帧的流程
- 收到帧后进行登记。登记的内容为帧的源MAC地址及进入交换机的接口号
- 根据帧的目的MAC地址和交换机的帧交换表对帧进行转发,有以下三种情况
- 明确转发:交换机知道应当从哪个接口转发该帧
- 盲目转发:交换机不知道应当从哪个端口转发帧,只能将其通过除进入交换机的接口外的其他所有接口转发,即泛洪
- 明确丢弃:转发端口与源端口相同,则将帧丢弃
帧交换表中的每条记录都有自己的有效时间,到期删除。因为交换机的接口可能改接了另一台主机;主机可能更换了网卡。
以太网交换机的生成树协议STP
为提高以太网的可靠性,可添加冗余链路,但是冗余链路会形成网络环路,网络环路会带来以下问题:
- 广播风暴:大量消耗网络资源,使得网络无法正常转发其他数据帧
- 主机收到重复的广播帧:大量消耗主机资源
- 交换机的帧交换表震荡
为了可以在增加冗余链路来提高网络可靠性的同时,又避免网路环路带来的各种问题,以太网交换机使用生成树协议。
不论交换机之间采用怎样的物理连接,交换机都能自动计算并构建一个逻辑上没有环路的网络,其逻辑拓扑结构必须是树型的;最终生成的树型逻辑拓扑要确保联通整个网络;当首次连接交换机或网络物理拓扑发生变化时,交换机都将进行生成树的重新计算。
区别
集线器扩大了广播域,扩大了碰撞域。
交换机扩大了广播域,隔离碰撞域。
参考