1. 数据链路层概述
数据链路层(Data Link Layer)是计算机体系结构中的其中一层,在数据链路层中使用的信道可以分为两种:
(1)点对点信道:一对一的通信方式(2)广播信道:一对多的通信方式
从整个互联网来看,局域网属于数据链路层的范围,因此,在数据链路层中探讨的问题主要以局域网作为研究对象。
1.1 数据链路和帧的概念
(1)链路的概念
链路 (link) 是一条无源的点到点的物理线路段,中间没有任何其他的交换结点,一条链路只是一条通路的一个组成部分,通常也称作物理链路。
(2)数据链路的概念
数据链路 (data link) 除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上(使用适配器——网卡来实现这些协议的硬件和软件,一般的适配器都包括了数据链路层和物理层这两层的功能),就构成了数据链路,通过数据链路也称作逻辑链路。
(3)传输单元帧的概念
常常在两个对等的数据链路层之间画出一个数字管道,而在这条数字管道上传输的数据单位是帧,数据链路层不必考虑物理层如何实现比特传输的细节,甚至还可以更简单地设想好像是沿着两个数据链路层之间的水平方向把帧直接发送到对方。
2. 数据链路层的基本问题
在数据链路层中存在着许多的协议,但这些协议有三个共同的基本问题:(1)封装成帧(2)透明传输(3)差错检测
2.1 封装成帧
封装成帧 (framing) 就是在一段数据的前后分别添加首部和尾部,然后就构成了一个帧(数据的传输单元),首部和尾部的一个重要作用就是进行帧定界(即确定帧的界限),一个帧的长度 = 帧的数据部分长度 + 帧首部长度 + 帧尾部长度,而每一种链路层协议都规定了所能传送的帧的数据部分长度上限——最大传送单元MTU(Maximum Transfer Unit)。
2.2 透明传输
对于封装好的帧,当进行数据传输时,如果数据部分是由可打印的 ASCII 码组成的文本文件时,帧定界可以使用特殊的帧定界符,此时控制字符 SOH (Start Of Header) 放在一帧的最前面,表示帧的首部开始,另一个控制字符 EOT (End Of Transmission) 表示帧的结束。
但是,如果数据部分时非ASCII码的文本文件(二进制代码的程序或图像)时,可能存在数据中的某个字节的二进制代码恰好和 SOH 或 EOT 一样,这时数据链路层就会错误地“找到帧的边界”,由此数据传输的结果识别错误,数据链路层对用户而言不再透明(传输的内容受到阻碍),为此,需要制定一些方案来确保透明传输。
一种解决的方法是字节填充 (byte stuffing) 或字符填充 (character stuffing)。 发送端的数据链路层在数据部分出现控制字符“SOH”或“EOT”的前面插入一个转义字符“ESC”(其十六进制编码是1B)。接收端的数据链路层在将数据送往网络层之前删除插入的转义字符。如果转义字符也出现在数据部分,那么应在转义字符前面插入一个转义字符 ESC。当接收端收到连续的两个转义字符时,就删除其中前面的一个。
2.3 差错检测
在数据的传输过程中,可能发生比特差错,即二进制流中的1 可能会变成 0, 而 0 也可能变成 1的情况。而在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率 BER (Bit Error Rate),误码率与信噪比有很大的关系。
为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施,在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC的检错技术。
循环冗余检验的原理
(1)发送端
在发送端,先把数据划分为组。假定每组 k 个比特。在每组 M 后面再添加供差错检测用的 n 位冗余码,然后一起发送出去。在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence),这里FCS = CRC冗余码(不是等于CRC)。
(2)冗余码计算
用二进制的模 2 运算(异或思想)进行 2n 乘 M 的运算,这相当于在 M 后面添加 n 个 0。得到的 (k + n) 位的数除以事先选定好的长度为 (n + 1) 位(生成多项式)的除数 P,得出商是 Q 而余数是 R,余数 R 比除数 P 少 1 位,即 R 是 n 位。将余数 R 作为冗余码拼接在数据 M 后面,一起发送出去。
(3)接收方
若得出的余数 R = 0,则判定这个帧没有差错,就接受 (accept)。若余数 R ≠ 0,则判定这个帧有差错,就丢弃。这种检测方法并不能确定究竟是哪一个或哪几个比特出现了差错。
3. 使用点对点信道的数据链路
3.1 PPP协议简介
对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。
3.2 PPP协议的组成
PPP 协议有三个组成部分:
(1)一个将 IP 数据报封装到串行链路的方法。
(2)链路控制协议 LCP (Link Control Protocol)。
(3)网络控制协议 NCP (Network Control Protocol)。
3.3 PPP协议的帧格式
PPP 帧的首部和尾部分别为 4 个字段和 2 个字段。标志字段 F = 0x7E (符号“0x”表示后面的字符是用十六进制表示。十六进制的 7E 的二进制表示是 01111110)。地址字段 A 只置为 0xFF。地址字段实际上并不起作用。控制字段 C 通常置为 0x03。PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
3.4 PPP协议的透明传输
(1)字符填充
当PPP协议使用异步传输(字符内同步,字符间异步)时,在透明传输问题上使用字节填充方法。
(2)零比特填充
当PPP协议使用同步传输(一连串的比特连续传送)时,在透明传输问题上使用零比特填充方法。在发送端,只要发现有 5 个连续 1,则立即填入一个 0,确保数据部分不会出现连续的6个1,这时可以用连续的6个1作为帧定界符。在接收端对帧中的比特流进行扫描,先找到帧定界符(连续的6个1),然后在数据部分,每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
3.5 PPP协议的工作状态
4. 使用广播信道的数据链路层
4.1 局域网的概念
局域网是一个单位所拥有的网络,在地理范围和站点数目上均有限。局域网具有广播功能,从一个站点可很方便地访问全网,局域网上的主机可共享连接在局域网上的各种硬件和软件资源。
局域网的网络拓扑
在局域网上使用一对多的广播通信方式(即共享信道的方式)存在这样的问题,若多个设备在共享的广播信道上同时发送数据,则会造成彼此干扰,导致发送失败。因此,为了避免发生冲突,在技术上具体的实现方式可分为两种:
(1)静态划分信道
频分复用时分复用波分复用码分复用(2)动态媒体接入控制(多点接入)
随机接入受控接入(轮询)由于静态划分信道的成本代价较高,因此不适合局域网,而目前使用较多的技术方式主要是随机接入。
4.2 局域网实例——以太网
(1)以太网的两个标准
DIX Ethernet V2 是世界上第一个局域网产品(以太网)的规约。IEEE 802.3 是第一个 IEEE 的以太网标准。其中,IEEE 802.3将局域网的数据链路层拆成两个子层,分别是逻辑链路控制 LLC (Logical Link Control)子层和媒体接入控制 MAC (Medium Access Control)子层,
由于 TCP/IP 体系经常使用的局域网是 DIX Ethernet V2 而不是 802.3 标准中的几种局域网,因此现在 802 委员会制定的逻辑链路控制子层 LLC(即 802.2 标准)的作用已经不大了,很多厂商生产的适配器上就仅装有 MAC 协议而没有 LLC 协议。
4.3 适配器的作用
网络接口板又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),或“网卡”,适配器所实现的功能包括了数据链路层和物理层两个层次,具体重要功能如下:
(1)进行串行/并行转换(主机内并行,网络中串行)
(2)对数据进行缓存(数据率不匹配,需要缓存)
(3)在计算机的操作系统安装设备驱动程序
(4)实现以太网协议
4.4 CSMA/CD协议
最初的以太网是将许多计算机都连接到一根总线上,易于实现广播通信,当初认为这样的连接方法既简单又可靠,因为总线上没有有源器件。另外,在以太网上发送的数据都使用曼彻斯特Manchester编码(自动同步)。
为了实现一对一通信,将接收站的硬件地址写入帧首部中的目的地址字段中。仅当数据帧中的目的地址与适配器的硬件地址一致时,才能接收这个数据帧。
然而,在总线上发送数据的过程中,存在着一个严重的问题,即若多台计算机或多个站点同时发送时,会产生发送碰撞或冲突,导致发送失败。
为了避免同时发送数据产生碰撞而导致数据丢失的问题,总线上一般采用CSMA/CD(载波监听多点接入/碰撞检测)协议。
(1)CSMA/CD的含义
“载波监听”是指每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。“多点接入”表示许多计算机以多点接入的方式连接在一根总线上。总线上并没有什么“载波”,因此,“载波监听”就是用电子技术检测总线上有没有其他计算机发送的数据信号。“碰撞检测”就是计算机边发送数据边检测信道上的信号电压大小。当几个站同时在总线上发送数据时,总线上的信号电压摆动值将会增大(互相叠加)。(2)CSMA/CD 协议工作流程
碰撞检测的理解可以将信道看成平静的水面,在信道某处发生的碰撞看作有一颗石头在该处落入了水面,这时激起了涟漪,涟漪向周围扩散,当扩散到某结点处时被检测到(前提是该结点开启了检测功能)。
碰撞检测的时间在发送数据前+发送数据时(正在发送数据的过程中)这两个时间段需要进行碰撞检测,确认数据的碰撞情况。
碰撞检测的原因假设现在有A先向B发送了数据,在A发送了数据后的一段时间里(此时数据未到达B,同时A还没有停止发送数据),B刚好需要向A发送数据,这时B开启碰撞检测,但此时在信道中由于没有碰撞发生(只有A发送的数据),信号电压是正常的,因此B认为此时可以发数据,于是发出数据。在一段时间后,A发送的数据与B发送的数据发送了碰撞,此时,如果A没有开启碰撞检测,那么A会认为数据已经发给了B,而实际上数据已经因为碰撞而丢失,因此,在发送数据前和发送数据过程中需要检测碰撞。
由于在发送的过程中因为信号传播时延对载波监听产生了影响,因此A 需要单程传播时延的 2 倍的时间,才能检测到与 B 的发送产生了冲突
争用期最先发送数据帧的站,在发送数据帧后至多经过时间 2 (两倍的端到端往返时延)就可知道发送的数据帧是否遭受了碰撞。以太网的端到端往返时延 2 称为争用期,或碰撞窗口。经过争用期这段时间还没有检测到碰撞,才能肯定这次发送不会发生碰撞。
截断二进制指数算法发生碰撞的站在停止发送数据后,要推迟(退避)一个随机时间才能再发送数据,算法的步骤如下:
其中协议规定基本退避时间为64个字节。
最短有效帧长如果发生冲突,就一定是在发送的前 64 字节之内,由于一检测到冲突就立即中止发送,这时已经发送出去的数据一定小于 64 字节,因此,以太网规定了最短有效帧长为 64 字节,凡长度小于 64 字节的帧都是由于冲突而异常中止的无效帧。
人为干扰信号当发送数据的站一旦发现发送了碰撞时,除了立即停止发送数据外,还需要再继续发送32比特或48比特的人为干扰信号,以便让所有用户都知道发生了碰撞。
5. 使用集线器的星形拓扑
传统以太网最初是使用粗同轴电缆,后来演进到使用比较便宜的细同轴电缆,最后发展为使用更便宜和更灵活的双绞线。采用双绞线的以太网采用星形拓扑,在星形的中心则增加了一种可靠性非常高的设备,叫做集线器 (hub)。
使用集线器的以太网在逻辑上仍是一个总线网,各工作站使用的还是 CSMA/CD 协议,并共享逻辑上的总线。集线器很像一个多接口的转发器,工作在物理层,简单地转发比特,不进行碰撞检测。
6. 以太坊的MAC层
6.1 MAC层的硬件地址
在局域网中,硬件地址又称为物理地址,或 MAC 地址,IEEE 802 标准规定 MAC 地址字段可采用 6 字节 ( 48位) 或 2 字节 ( 16 位) 这两种中的一种。以48位的MAC地址为例,一个地址块可以生成 224 个不同的地址。这种 48 位地址称为 MAC-48,它的通用名称是 EUI-48。
6.2 MAC帧的格式
常用的以太网 MAC 帧格式有两种标准,一种是DIX Ethernet V2 标准,另一种是IEEE 的 802.3 标准,最常用的 MAC 帧是以太网 V2 的格式。
7. 扩展的以太网
7.1 在物理层扩展
(1)使用光纤扩展
(2)使用集线器扩展
优点使原来属于不同碰撞域的以太网上的计算机能够进行跨碰撞域的通信扩大了以太网覆盖的地理范围。
缺点碰撞域增大了,但总的吞吐量并未提高。如果不同的碰撞域使用不同的数据率,则不能用集线器将它们互连起来。
7.2 在数据链路层扩展
(1)使用网桥扩展
网桥工作在数据链路层,它根据 MAC 帧的目的地址对收到的帧进行转发和过滤,当网桥收到一个帧时,并不是向所有的接口转发此帧,而是先检查此帧的目的 MAC 地址,然后再确定将该帧转发到哪一个接口,或把它丢弃。
(2)使用交换机扩展
以太网交换机实质上就是一个多接口的网桥,通常都有十几个或更多的接口,每个接口都直接与一个单台主机或另一个以太网交换机相连,并且一般都工作在全双工方式,以太网交换机具有并行性,能同时连通多对接口,使多对主机能同时通信。相互通信的主机都是独占传输媒体,无碰撞地传输数据。
以太网交换机的交换方式
以太网交换机的自学习功能
7.3 虚拟局域网
虚拟局域网 VLAN 是由一些局域网网段构成的与物理位置无关的逻辑组,而这些网段具有某些共同的需求。每一个 VLAN 的帧都有一个明确的标识符,指明发送这个帧的计算机是属于哪一个 VLAN。虚拟局域网其实只是局域网给用户提供的一种服务,而并不是一种新型局域网。
虚拟局域网使用的以太网帧格式
8. 数据链路层的问题思考
(1)简述一下CSMA/CD协议 ★★★★
CSMA/CD协议,全称为载波监听多点接入/碰撞检测协议,是数据链路层中用于广播信道的一种协议。由于广播信道是共享的,因此,网络中结点发送数据时可能会出现数据碰撞的情况,这时需要网络中的结点都遵循CSMA/CD协议,以此解决碰撞问题,其原理在于发送数据前和发送数据时对信道不断地进行检测,当检测到碰撞时,则停止发送数据,并根据相关算法选择合适的时间再次发送,以此确保数据发送的有效性。
(2)网卡是什么?功能?★★★
网卡是电脑主机箱中的一块网络接口板,又称为通信适配器 (adapter) 或网络接口卡 NIC (Network Interface Card),其功能是:
进行串行/并行转换(主机内并行,网络中串行)对数据进行缓存(数据率不匹配,需要缓存)在计算机的操作系统安装设备驱动程序实现以太网协议(3)一个主机将两个端口接到网络上是否会提升吞吐量?为什么?★★
以总线型以太网为例,此时,局域网的碰撞域不变,总的吞吐量并未提高。
