1.数据链路概述

链路:一个节点到相信节点的一段物理线路,中间没有任何的交换节点。

数据链路:把实现通信协议的软件和硬件加到链路上,就构成了数据链路。

数据链路层是以帧为单位传输和处理数据的。

2.封装成帧

定义:数据链路层给上层交付的协议数据添加帧头和帧尾使之成为帧。

帧头和帧尾中包含重要的控制信息,作用是帧定界。

透明传输:指数据链路层对上层交付的传输数据没有任何限制,就好像数据链路层不存在一样(即保证接收方接到的数据是完整的数据)。

面向字节的物理链路使用字节填充的方法实现透明传输。

帧头帧尾有标志位用来划分一个个帧,如果帧内部恰好也出现了标志位,则在第一次扫描时在标志位前面加一个转义字符帮助区分哪个是真正的帧头。考虑到转义字符也可能在帧内部出现,因此在转义字符前也加转义字符。接收方接到消息后但凡看到转义字符开头就会去掉转义字符并且对其后一个字符不做特殊处理

面向比特的物理链路使用比特填充的方法实现透明传输。

零比特填充:在发送前,对帧的数据部分进行扫描,每5个连续的比特1后就插入1个比特0,防止其与首部尾部的标志位混淆。接收方接收时将每5个连续的比特1后面的0剔除即可

提高帧的传输效率:提高帧的数据部分极可能大一些。

3.差错控制

比特差错:比特在传输的过程中可能出现差错,1变成0,0变成1.

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BER。

使用差错检测码来检测数据在传输过程中是否产生了比特差错,是数据链路层所要解决的重要问题之一。

奇偶校验:在待发送的数据后面添加1位奇偶校验位,使整个数据(包括所添加的校验位在内)中"1"的个数为奇数(奇校验)或为偶数(偶校验)

例如:发送数据001

若是奇校验,则在数据后添加0,使其成为0001,1的个数为奇数。如果传输过程中发生了1位误码,则1的个数会变成偶数,据此判断是否发生误码;但是若发生了2个误码,1的个数依然为奇数,因此检查不出来
若为偶校验,则在数据后添加1,使其成为1001,1的个数为偶数,其他情况与奇校验类似。

循环冗余校验CRC:

1.双方生成一个生成多项式。

2.发送方基于待发送的数据和生成多项式计算出差错检测码【冗余码】,将其添加到待传输数据的后面一起传输

3.接收方通过生成多项式来计算收到的数据是否产生了误码

例:

1.检错码只能检测出帧在传输过程中出现了差错,但并不能定位错误,因此无法纠正错误。
2.要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行前向纠错。但纠错码的开销比较大,在计算机网络中较少使用。
3.循环冗余校验CRC有很好的检错能力(漏检率非常低)),虽然计算比较复杂,但非常易于用硬件实现,因此被广泛应用于数据链路层。
4.在计算机网络中通常采用我们后续课程中将要讨论的检错重传方式来纠正传输中的差错或者仅仅是丢弃检测到差错的帧,这取决于数据链路层向其上层提供的是可靠传输服务还是不可靠传输服务。

4.可靠传输

4.1可靠传输的基本概念

可靠传输定义:想办法实现发送端发送什么接收端就接受什么,当产生误码后让发送端重新发送。

不可靠传输的定义:仅仅丢弃有误码的帧,其他什么都不做。

  • 一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理
  • 无线链路易受干扰,误码率比较高,因此要求数据链路层必须向上层提供可靠传输服务
  • 比特差错只是传输差错中的一种,从整个计算机网络体系结构来看,传输差错还包括分组丢失、分组失序以及分组重复
  • 分组丢失、分组失序以及分组重复这些传输差错,一般不会出现在数据链路层,而会出现在其上层
  • 可靠传输服务并不仅局限于数据链路层,其他各层均可选择实现可靠传输
  • 可靠传输的实现比较复杂,开销也比较大,是否使用可靠传输取决于应用需求

4.2可靠传输的基本机制—停止等待协议

通俗的来讲就是发送端发送了数据后,当接收端接受到数据并给发送端发送一个确认码ack后,发送端才能接着发送数据。

官方定义:发送方发送数据DATA,接收方接收时进行差错检测
①如果没有出现误码,则接收信息并返回**ACK确认分组给发送方,发送方收到ACK后,一次通信结束
②如果出现误码,则
丢弃信息并返回NAK**拒绝分组给发送方,发送方收到NAK后,重传DATA,直至出现步骤①的情况

1.如果DATA传送过程中丢失了,即接收端一直等DATA,发送端一直等ACK,怎么办呢?

用到一个超市重传机制,当发送端发送数据后,接收端开始计时,当计时的时间超过规定的时间后,发送端重新发送数据DATA。

2.如果ACK发送中丢失了,即接收方收不到ACK就将数据重新发送,而数据实际上接收方已经有了,因此重复接收,并返回ACK,造成错误,怎么办?

可以对每次发的DATA都加上序号,这样接收端就可以判断当前的数据是否有接收过,从而决定其去留

3.如果发送端发送DATA 0,如果ACK由于某些原因使其到达接收端的时间变长了,那么根据超时重传,DATA 0会再次发送,而此时ACK到达,则发送方会认为这是后一次DATA 0的确认分组,于是马上发送DATA 1。而第二次发送的DATA 0此时返回ACK,发送方误以为是DATA 1的ACK,因此又会发送DATA2,而实际上DATA 1的是否误码等情况还不知道,因此出现了错误,这种情况怎么办?

ACK加上编号。则每个ACK的相互作用就不会互串了。【对于数据链路层点对点信道,往返时间比较固定,不会出现确认迟到的情况,因此可以不给确认分组编号】

效率:

4.3可靠传输的基本机制—回退N帧协议

相对停止-等待协议多个窗口的概念
接收窗口尺寸只能等于1,因此接收方只能按序接收正确到达的数据分组

4.4可靠传输的基本机制—选择重传协议

与回退N帧相比,接收窗口允许多个,且发送窗口最大情况有所变化

5.点对点协议 ppp

对点协议(Point-to-Point Protocol,PPP)是目前使用最广泛的点对点数据链路层协议。

点对点协议ppp的两种应用

透明传输

1.面向字节的异步链路使用字节填充来实现透明传输。

如PPP帧的标志字段取值为7E(16进制),如果数据中出现7E则需要在数据前插入转义字符7D(16进制),并将原来的7E减20(16进制),所以7E在数据中最终会变成7D5E
如果数据中有转义字符7D怎么办呢?可以在转义字符7D前再加一个转义字符7D,并将数据的7D减20(16进制),于是转义字符7D在数据中最终会变成7D5D
数据中出现的每一个ASCII码控制字符【数值小于20(16进制)的字符】,则在该字符前插入一个7D,同时将该字符的编码加上20(16进制)
接收方只需要反变换即可恢复出原来的帧的数据部分

2.面向比特的同步链路使用零比特填充来实现透明传输

6.媒体接入控制

6.1媒体接入控制的基本概念

核心定义

媒体接入控制(Medium Access Control, MAC)是数据链路层的子层,负责管理多个网络设备对共享传输媒体(如总线、无线信道)的访问权限,核心目标是避免多设备同时发送数据导致的信号碰撞(Collision),确保数据高效、有序传输。

6.2媒体接入控制一静态划分信道

1.频分复用FDM——将信道频带划分为多个子频带,每个设备占用一个子频带

2.时分复用TDM——将时间划分为固定时隙,每个设备按分配的时隙发送数据

3.波分复用WDM——波分复用其实就是光的频分复用。经过光调制,分别将光载波变换到不同波长

4.码分复用CDMA——每个设备分配唯一的码片序列,信号叠加后通过码片序列解码区分

6.3随机接入一CSMA/CD协议(有线网络)

随机接入:多个主机连接到一根总线上,当信息同一时间传送相遇时就会发生碰撞。
如何协调各主机的工作,使信息避免碰撞是很重要的

96比特时间是指发送96比特所需要的时间,也称为帧间最小间隔。其作用是是接收方可以检测出一个帧的结束,同时也使得其他站点都能有机会平等竞争信道并发送帧

最小帧长:假设A向D发送帧,如果帧很短的话,在2 τ 内就会将帧发送完毕,帧发送完毕后不会进行碰撞检测,而此时依然有发生碰撞的可能。所以必须保证在2 τ 2τ时间内帧不会被发送完,在这段时间里能够保持碰撞检测(最小帧长是64字节)

最大帧长:当帧过长时,其他线路会迟迟得不到资源,同时也可能导致接收方缓冲区溢出,因此帧的最大长度也有规定。(最大帧长时512字节)。

退避算法:当帧发送碰撞后会停止发送,隔一段时间后再次发送,而具体隔多少时间再发送需要根据退避算法得出。

6.4随机接入一CSMA/CA协议(无线网络)

802.11无线局域网使用CSMA/CA协议,在CSMA的基础上增加了一个碰撞避免CA功能,而不再实现碰撞检测功能

由于不可能避免所有的碰撞,并且无线信道误码率较高802.11标准还使用了数据链路层确认机制(停止-等待协议)来保证数据被正确接收。

为什么不能用 CSMA/CD?

无线网有两个致命问题,导致冲突没法检测

  1. 隐藏终端问题:A 和 C 都能和 B 通信,但 A 和 C 互相看不见。A 给 B 发数据时,C 检测不到 A 的信号,以为线路空闲,也给 B 发数据,就会和 A 的信号冲突。
  2. 信号衰减问题:设备发送数据时,自己的发射信号会盖住接收信号,没法同时监听冲突。

所以无线网的思路是:从根源上避免冲突,而不是等冲突发生再处理

  1. 载波监听(先听)和 CSMA/CD 一样,发言前先听,看有没有人在说话(设备检测信道是否空闲)。

    • 信道忙 → 等待。
    • 信道空闲 → 不是马上发,而是进入下一步。
  2. 发送预告(RTS/CTS 握手)这是 CSMA/CA 的核心步骤,相当于 “举手申请发言”:

    • 发送方先给接收方发一个 RTS 帧(请求发送):“我要给你发数据了,麻烦你确认一下”。
    • 接收方收到后,回复一个 CTS 帧(允许发送):“收到,现在信道是你的,你可以发了”。
    • 这个 RTS/CTS 会被周围所有设备听到,大家就知道 “这段时间有人要传数据,我先别发”。
  3. 发送数据 + 确认(ACK)

    • 发送方收到 CTS 后,才正式发送数据。
    • 接收方收到完整数据后,必须回复一个 ACK 帧(确认收到)。
    • 如果发送方没收到 ACK,就认为数据可能丢了(比如意外冲突),随机等待后重新走流程。

核心特点

  • 冲突避免:通过 RTS/CTS 握手,提前预约信道,从根源减少冲突。
  • “先预约后发送”:不允许冲突发生,靠握手机制规避风险。
  • 需要确认:必须等接收方的 ACK,确保数据传输成功。
  • 典型应用:WiFi 网络(802.11 协议族)。

7.MAC 地址,IP 地址,ARP 协议

MAC地址:在局域网中硬件地址又称物理地址和MAC地址。

  • MAC地址一般被固化在网卡(网络适配器)的电可擦可编程只读存储器EEPROM中,因此MAC地址也被称为硬件地址
  • MAC地址有时也被称为物理地址。但是MAC地址不属于物理层而是属于数据链路层

MAC的地址格式:48 位(6 字节),常用十六进制表示,如 00-1A-2B-3C-4D-5E

单播地址,广播地址,多播地址

单播地址、广播地址与多播地址

单播MAC地址即明确的目的MAC地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此地址与自身MAC地址进行匹配,若相同则接收,不同则丢弃
广播MAC地址为FF-FF-FF-FF-FF-FF,将此地址填入帧的目的地址栏中,接收到该帧的主机检索该地址发现是广播地址,因此接收该帧
MAC地址中第一字节后4比特为(1,3,5,7,9,B,D,F)时,MAC地址是多播地址。将此地址填入帧的目的地址栏中,接收到该帧的主机将此多播地址与自己多播组列表中的地址进行逐一配对,如果有匹配的项,则接收,否则丢弃


IP地址:IP地址是TCP/IP体系结构的网际层所使用的的地址,用于标识主机或路由器接口在网络中的位置。

组成:

网络编号:标识因特网上数以百万计的网络

主机编号:标识同一网络上不同主机(或路由器各接口)

版本

IPv4:32 位,点分十进制表示,如 192.168.1.1

IPv6:128 位,十六进制表示。

ip地址可因网络序号和主机序号的字节数分为ABCDE五类。

MAC地址不具备区分不同网络的功能,而IP地址可以通过网络号做到

如果只是一个单独网络,不接入因特网,则使用MAC地址就足够了(这不是一般用户的应用方式)
如果主机所在的网络要接入因特网,则IP地址和MAC地址都需要使用。

路由器上有路由表,记录了要到目的IP地址,先要走哪些路(即下一跳位置)。

ARP协议:根据已知的 IP 地址获取对应的 MAC 地址

  • 数据的发送需要经过链路,仅仅知道IP地址是无法在数据链路层实现传输的,因此我们需要得到IP地址与MAC地址的对应关系,即地址解析。
  • 每台主机都会有一个ARP高速缓存表,记录有IP地址与MAC地址的对应关系

初始ARP高速缓存表为空,假设此时B知道C的IP地址,准备发送信息,但是由于不知道C的MAC地址,因此无法封装数据帧,所以此时会广播一个ARP请求报文(封装在MAC帧中,目的地址为广播地址FF-FF-FF-FF-FF-FF),内容如下:

  • 我的IP地址是:xxx ;我的MAC地址是:XXX;我想知道C主机的MAC地址是多少?这个广播帧会被该广播域的所有主机收到
  • A主机收到后交由上层处理,发现B问的不是他,所以不予理会
  • C收到后交由上层处理,发现这个IP地址正是自己,因此首先将B的MAC地址和IP地址的对应关系记录到自己的高速缓存表中,接着返回给ARP响应报文(封装在MAC帧中,目的地址为B的MAC地址),其中包含自己的MAC地址
  • ARP高速缓存条目有静态与动态两种类型
  • 动态代表是通过广播自动获取的条目,生命周期默认为两分钟
  • 静态是手工设置的条目,不同操作系统下的生命周期不同。
  • ARP协议只能在一段链路或一个网络上使用

8.集线器交换机的区别

集线器:多个设备连入同一局域网,实现设备间数据互通。但是他是半双工的,通俗的来讲像大喇叭,一个人说话所有人都听到,同时只能一个人说(半双工),容易撞话。

交换机:将多台设备接入局域网,通过识别 MAC 地址实现数据定向转发。像智能电话总机,知道分机号对应哪条线,直接接通双方,可以多对同时通话。此外交换机还有交换机自学习和转发帧的功能。

交换模式

  • 直通式交换机:查完目的MAC地址(6B)就立刻转发。延迟小,可靠性低,无法支持具有不同速率的端口的交换。

  • 存储转发式交换机:将帧放入高速缓存,并检查否正确,正确则转发,错误则丢弃。延迟大,可靠性高,可以支持具有不同速率的端口的交换。

方面 集线器(Hub) 交换机(Switch)
工作层次 物理层 数据链路层(含物理层)
智能程度 无脑中继,不分析数据 学习 MAC 地址表,智能转发
数据帧处理 将电信号放大并向所有其他端口转发(广播到所有端口) 检查帧的目的 MAC,查表后只转发到目标端口(单播)
带宽共享 所有端口共享同一带宽(冲突域一个) 每个端口独享带宽(全双工,无冲突)
冲突域 一个冲突域(用 CSMA/CD 检测冲突) 每个端口是一个独立的冲突域(或全双工下无冲突)
广播域 一个广播域 默认一个广播域(除非划分 VLAN)

9.以太网交换机自学习和转发成帧的流程

自学习过程:

A先向B发送一帧,从端口1进入交换机。
交换机收到帧后,查找交换表,找不到MAC地址为B的表项。
交换机将该帧的源地址A和端口1(A,1)写入交换表,并向除端口1外的所有端口广播这个帧(该帧就是从端口1进入的,因此不应该将它再从端口1转发出去)。
C和D丢弃该帧,因为目的地址不对。只有B才收下这个目的地址正确的帧。
B通过端口3向A发送一帧,交换机查找交换表后,发现有表项 (A,1),将该帧从端口1转发给A。同时,将该帧的源地址B和端口 3 (B,3) 写入交换表,表明以后如有发送给B的帧,应该从端口3转发出去。
经过一段时间,只要主机C和D也向其他主机发送帧,交换机就会把C和D及对应的端口号写入交换表。这样,转发给任何主机的帧,都能很快地在交换表中找到相应的转发端口。

转发帧过程

收到一个帧后:

  1. 检查目的 MAC 地址。

  2. 查 MAC 地址表:

    • 表中有该目的 MAC:且对应端口 ≠ 接收端口,则只从该端口转发出去(单播)。

    • 表中无该目的 MAC:向所有其他端口广播该帧(泛洪),等目标主机回应时学习其 MAC。

    • 如果目的 MAC 是广播地址FF:FF:FF:FF:FF:FF),向所有其他端口广播。

    • 如果目的 MAC 对应的端口 = 接收端口(即源和目的在同一端口),则丢弃该帧(过滤),因为目标与来源在同一网段,不需要经过交换机转发。

10.以太网交换机的生成树协议 STP

为什么需要 STP?

  • 以太网交换机多端口互连时,为了防止单点故障,常增加冗余链路。

  • 但冗余链路会形成环路,导致:

    1. 广播风暴(广播帧环路无限转发)。

    2. MAC 地址表不稳定(同一 MAC 出现在不同端口,表项不断刷新)。

    3. 重复帧

STP 的作用

STP(Spanning Tree Protocol,IEEE 802.1D)在具有物理环路的交换网络中,通过软件阻塞某些端口,构建一个逻辑上无环的树形拓扑(生成树),同时保留冗余链路,当活动链路故障时,可激活备用链路。

STP 基本工作过程

  1. 选举根桥(Root Bridge):

    • 所有交换机比较 Bridge ID(优先级 + MAC 地址),最小的为根桥。

  2. 每个非根桥选举根端口(Root Port):

    • 选择到根桥路径开销最小的端口,如果开销相同,比较上行交换机的 Bridge ID、端口 ID 等。

  3. 每个网段选举指定端口(Designated Port):

    • 每个物理网段选择一个指定端口,用于转发数据,该端口属于该网段到根桥路径开销最小的交换机。

  4. 阻塞剩余端口

    • 既不是根端口也不是指定端口的端口被置为阻塞状态(Blocking),不转发数据帧,但会接收 BPDU。

11.虚拟局域网 VLAN 概述 + 实现机制

VLAN:一种将局域网内的设备划分成与物理位置无关的逻辑组的技术,这些逻辑组具有某些共同的需求,每个VLAN就是一个独立的广播域。

为什么需要VLAN?

随着交换式以太网规模的扩大,广播域相应扩大,而巨大的广播域会带来很多弊端

广播风暴

如数台交换机连接了数台主机,当主机A要向主机B发送数据帧,此时各交换机的MAC表均为空,因此帧每到一个交换机就会进行泛洪,由于网络巨大,因此泛洪的范围也巨大

难以管理和维护

潜在的安全风险

VLAN 实现机制

1. VLAN 的划分方法

  • 基于端口:交换机的某个端口属于某个 VLAN(最常用)。

  • 基于 MAC 地址:根据源 MAC 划分 VLAN。

  • 基于 IP 子网:根据源 IP 地址划分。

  • 基于协议:根据网络层协议类型划分。

  • 基于策略:组合多种条件。

2. 帧标记(VLAN Tagging)

  • 问题:跨交换机的同一 VLAN 主机通信时,如何让对端交换机知道帧属于哪个 VLAN?

  • 解决方案:IEEE 802.1Q 标准,在以太网帧的源 MAC 地址类型/长度字段之间插入 4 字节的 VLAN Tag

    • 其中 12 位 VLAN ID(1~4094),表示 VLAN 编号。

    • 支持 Native VLAN(不打标记,默认为 VLAN 1)。

3. 端口类型

  • Access 端口

    • 连接主机或不属于任何 VLAN 的设备。

    • 发送时剥离 VLAN Tag(主机不认识 Tag),接收时打上该端口的 PVID(Port VLAN ID)。

  • Trunk 端口

    • 连接交换机之间或交换机与路由器。

    • 允许多个 VLAN 的帧通过,并保留 VLAN Tag。

    • 可设置允许通过的 VLAN 列表。

  • Hybrid 端口(华为设备常用):

    • 可同时处理 Tag 和 Untag 帧,灵活控制哪些 VLAN 带 Tag 转发,哪些不带。

4. VLAN 间路由

  • 不同 VLAN 之间不能直接通信(二层隔离)。

  • 需要三层设备(路由器或三层交换机)进行路由。

  • 方法:

    • 单臂路由:路由器的一个物理接口通过多个子接口(802.1Q)连接 Trunk,每个子接口对应一个 VLAN。

    • 三层交换机 SVI:为每个 VLAN 创建虚拟接口(VLAN Interface),并配置 IP 作为该 VLAN 的网关,利用三层交换机的路由模块转发。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐