查看原文
其他

37张图详解MAC地址、以太网、二层转发、VLAN

Fox PHP开发者 2022-09-07

目录

MAC 地址

每个网卡或三层网口都有一个 MAC 地址, MAC 地址是烧录到硬件上,因此也称为硬件地址。MAC 地址作为数据链路设备的地址标识符,需要保证网络中的每个 MAC 地址都是唯一的,才能正确识别到数据链路上的设备。

MAC 地址由 6 个字节组成。前 3 个字节表示厂商识别码,每个网卡厂商都有特定唯一的识别数字。后 3 个字节由厂商给每个网卡进行分配。厂商可以保证生产出来的网卡不会有相同 MAC 地址的网卡。

MAC地址

现在可以通过软件修改 MAC 地址,虚拟机使用物理机网卡的 MAC 地址,并不能保证 MAC 地址是唯一的。但是只要 MAC 地址相同的设备不在同一个数据链路上就没问题。为了查看方便, 6 个字节的 MAC 地址使用十六进制来表示。每个字节的 8 位二进制数分别用 2 个十六进制数来表示,例如我的网卡 MAC 地址是 E0-06-E6-39-86-31

什么是字节?什么是比特?

比特,英文名 bit ,也叫_位_。二进制中最小单位,一个比特的值要么是 0 要么是 1

字节,英文名 Byte 。一个字节由八个比特构成。

MAC 地址怎么使用?

最常用的以太网和无线局域网,都是使用 MAC 地址作为地址标识符进行通信的。

以太网

有线局域网中普遍使用以太网,以太网标准简单,传输速率高。常见的网络拓扑结构如下图。

以太网

什么是网络拓扑?

网络的连接和构成的形态称为网络拓扑。它不仅可以直观的看到网络物理连接方式,还可以表示网络的逻辑结构。

以太网数据格式

当今最常用的以太网协议标准是 ETHERNET II 标准。ETHERNET II 标准定义的数据帧格式如下图。

以太网帧格式
  • 前导码( Preamble )

前导码由 7 个字节组成,每个字节固定为 10101010 。之后的 1 个字节称为帧起始定界符,这个字节固定为 10101011 。这 8 个字节表示以太网帧的开始,也是对端网卡能够确保与其同步的标志。帧起始定界符的最后两位比特被定义为 11 ,之后就是以太网数据帧的本体。

前导码
  • 目的地址( Destination Address )目的地址由 6 个字节组成,用来标识数据帧的目的设备,类似于快递的收件人地址。

  • 源地址( Source Address )源地址由 6 个字节组成,用来标识数据帧的始发设备,类似于快递的发件人地址。

  • 类型( Type )类型字段由 2 个字节组成。类型字段是表明上一层(即网络层)的协议类型,可以让接收方使用相同的协议进行数据帧的解封装。

  • 数据( Data )帧头后就是数据。一个数据帧所能容纳的最大数据范围是 46 ~ 1500 个字节。如果数据部分不足 46 个字节,则填充这个数据帧,让它的长度可以满足最小长度的要求。

  • FCS( Frame Check Sequence )FCS 由 4 个字节组成,位于数据帧的尾部,用来检查帧是否有所损坏。通过检查 FCS 字段的值将受到噪声干扰的错误帧丢弃。

最小的数据帧是多少字节?

数据帧的各字段加起来一共是 64 字节,其中数据是 46 字节。再加上前导码就是 72 字节。因此最小的数据帧是 72 字节。在传输过程中,每个数据帧还有 12 字节的数据帧间隙,所以最小的可传输数据帧长度是 84 字节,即 672 比特。

交换机二层转发原理

交换机有多个网络端口,它通过识别数据帧的目标 MAC 地址,根据 MAC 地址表决定从哪个端口发送数据。MAC 地址表不需要在交换机上手工设置,而是可以自动生成的。

交换机二层转发

交换机是如何添加、更新、删除 MAC 地址表条目的?

在初始状态下,交换机的 MAC 地址表是空的,不包含任何条目。当交换机的某个端口接收到一个数据帧时,它就会将这个数据帧的源 MAC 地址、接收数据帧的端口号作为一个条目保存在自己的 MAC 地址表中,同时在接收到这个数据帧时重置这个条目的老化计时器时间。这就是交换机自动添加 MAC 地址表条目的方式。

自动添加MAC地址表条目

在新增这一条 MAC 地址条目后,如果交换机再次从同一个端口收到相同 MAC 地址为源 MAC 地址的数据帧时,交换机就会更新这个条目的老化计时器,确保活跃的的条目不会老化。但是如果在老化时间内都没收到匹配这个条目的数据帧,交换机就会将这个老化的条目从自己的 MAC 地址表中删除

老化条目被删除

还可以手动在交换机的 MAC 地址表中添加静态条目。静态添加的 MAC 地址条目优先动态学习的条目进行转发,而且静态条目没有老化时间,会一直保存在交换机的 MAC 地址表中。

如何使用 MAC 地址表条目进行转发?

当交换机的某个端口收到一个单播数据帧时,它会查看这个数据帧的二层头部信息,并进行两个操作。一个操作是根据源 MAC 地址和端口信息添加或更新 MAC 地址表。另一个操作是查看数据帧的目的 MAC 地址,并根据数据帧的目的 MAC 地址查找自己的 MAC 地址表。在查找 MAC 地址表后,交换机会根据查找结果对数据帧进行处理,这里有 3 中情况:

  1. 交换机没有在 MAC 地址表中找到这个数据帧的目的 MAC 地址,因此交换机不知道自己的端口是否有连接这个 MAC 地址的设备。于是,交换机将这个数据帧从除了接收端口之外的所有端口泛洪出去。
泛洪
  1. 交换机的 MAC 地址表中有这个数据帧的目的 MAC 地址,且对应端口不是接收到这个数据帧的端口,交换机知道目的设备连接在哪个端口上,因此交换机会根据 MAC 地址表中的条目将数据帧从对应端口单播转发出去,而其它与交换机相连的设备则不会收到这个数据帧。
转发
  1. 交换机的 MAC 地址表中有这个数据帧的目的 MAC 地址,且对应端口就是接收到这个数据帧的端口。这种情况下,交换机会认为数据帧的目的地址就在这个端口所连接的范围内,因此目的设备应该已经收到数据帧。这个数据帧与其它端口的设备无关,不会将数据帧从其它端口转发出去。于是,交换机会丢弃数据帧。
丢弃

单播:主机一对一的发送数据。单播地址是主机的 MAC 地址。
广播:向局域网内所有设备发送数据。只有全 1 的 MAC 地址为广播 MAC 地址,即 FF-FF-FF-FF-FF-FF
泛洪:将某个端口收到的数据从除该端口之外的所有端口发送出去。泛洪操作广播的是普通数据帧而不是广播帧。

单播
广播

VLAN

广播域是广播帧可以到达的区域。换句话说,由多个交换机和主机组成的网络就是一个广播域。网络规模越大,广播域就越大,泛洪流量也越来越大,降低通信效率。在一个广播域内的任意两台主机之间可以任意通信,通信数据有被窃取的风险。

泛洪攻击

为了解决广播域扩大带来的性能问题和安全性降低问题, VLAN 技术应运而生。VLAN 技术能够在逻辑上把一个物理局域网分隔为多个广播域,每个广播域称为一个虚拟局域网(即 VLAN )。每台主机只能属于一个 VLAN ,同属一个 VLAN 的主机通过二层直接通信,属于不同 VLAN 的主机只能通过 IP 路由功能才能实现通信。通过划分多个 VLAN ,从而减小广播域传播的范围,过滤多余的包,提高网络的传输效率,同时提高了网络的安全性。

VLAN

VLAN 原理

VLAN 技术通过给数据帧插入 VLAN 标签(又叫 VLAN TAG)的方式,让交换机能够分辨出各个数据帧所属的 VLAN 。VLAN 标签是用来区分数据帧所属 VLAN 的,是 4 个字节长度的字段,插入到以太网帧头部上。VLAN 标签会插入到源 MAC 地址后面, IEEE 802.1Q 标准有这个格式定义和字段构成说明。

VLAN TAG
  • TPID (标签协议标识符):
    长度 2 个字节,值为 0x8100 ,用来表示这个数据帧携带了 802.1Q 标签。不支持 802.1Q 标准的设备收到这类数据帧,会把它丢弃。

  • TCI (标签控制信息):
    长度 2 个字节,又分为三个子字段,用来表示数据帧的控制信息:

  • 优先级( Priority ):长度为 3 比特,取值范围 0 ~ 7 ,用来表示数据帧的优先级。取值越大,优先级越高。当交换机发送拥塞是,优先转发优先级高的数据帧。

  • CFI (规范格式指示器):长度为 1 比特,取值非 0 即 1 。

  • VLAN ID ( VLAN 标识符):长度为 12 比特,用来表示 VLAN 标签的数值。取值范围是 1 ~ 4094

划分 VLAN 后,交换机如何处理广播报文?

交换机上划分了多个 VLAN 时,在交换机接收到广播数据帧时,只会将这个数据帧在相同 VLAN 的端口进行广播

广播帧在相同VLAN内广播

划分 VLAN 后,交换机如何处理目的 MAC 地址不在 MAC 地址表中的单播数据帧?

交换机上划分了多个 VLAN 时,当交换机接收到一个目的 MAC 地址不存在于自己 MAC 地址表中的单播数据帧时,只会将这个数据帧在相同 VLAN 的端口进行泛洪

单播帧在相同VLAN内泛洪

划分 VLAN 后,不同 VLAN 的主机能否通信?

划分多 VLAN 的环境中,即使交换机 MAC 地址表里保存了某个数据帧的目的 MAC 地址条目,若这个目的 MAC 地址所对应的端口与数据帧的入端口在不同的 VLAN 中,交换机也不会通过 MAC 地址表中的端口发送数据帧。

不同VLAN的主机不能通信

小结:在不使用路由转发的前提下,交换机不会从一个 VLAN 的端口中接收到的数据帧,转发给其它 VLAN 的端口。

怎么区分不同的 VLAN ?

通过 VLAN ID 进行区分,例如 VLAN 10 和 VLAN 20 就是不同的 VLAN 。

VLAN 技术有哪些好处?

  • 增加了广播域的数量,减小了每个广播域的规模,也减少了每个广播域中终端设备的数量;

  • 增强了网络安全性,保障网络安全的方法增加了;

  • 提高了网络设计的逻辑性,可以规避地理、物理等因素对于网络设计的限制。

划分 VLAN

我们可以使用不同的方法,把交换机上的每个端口划分到某个 VLAN 中,以此在逻辑上分隔广播域。

交换机通常会使用基于端口划分 VLAN 的方法。在交换机上手动配置,绑定交换机端口和 VLAN ID 的关系。

优点:配置简单。想要把某个端口划分到某个 VLAN 中,只需要把端口的 PVID (端口 VLAN ID )配置到相应的 VLAN ID 即可。

缺点:当终端设备移动位置是,可能需要为终端设备连接的新端口重新划分 VLAN 。

除了这种方法外,还可以使用基于 MAC 地址划分 VLAN基于 IP 地址划分 VLAN基于协议划分 VLAN基于策略划分 VLAN 等方法来划分 VLAN。

PVID :接口默认 VLAN ID ,是交换机端口配置的参数,默认值是 1 。

跨交换机 VLAN 原理

终端设备不会生成带 VLAN 标签的数据帧,它们发出的数据帧叫做无标记帧( Untagged )。它们连接的交换机会给无标记帧打上 VLAN 标签。交换机通过每个端口的 PVID ,判断从这个接口收到的无标记帧属于哪个 VLAN ,并在转发时,插入相应的 VLAN 标签,从而将无标记帧变为标记帧( Tagged )。

当两台交换机通过端口连接时,收到的数据帧是标记帧还是无标记帧?交换机端口会如何处理呢?

跨交换机的VLAN

交换机根据连接的设备类型,判断各个接口收到的数据帧是否打标,来配置交换机接口的类型。

  • 如果交换机接口收到无标记帧,由交换机根据这个接口所在 VLAN 为数据帧打上 VLAN 标签;同时接口发送数据帧时,也不携带 VLAN 标签。应该把这类接口配置为 Access (接入)接口, Access 接口连接的链路称为 Access 链路。

  • 如果交换机接口收到多个 VLAN 的流量,也就是收到了标记帧;同时为了让对端设备能够区分不同 VLAN 的流量,通过接口发出的流量会打上 VLAN 标签。应该把这类接口配置为 Trunk (干道)接口,相应的链路称为 Trunk 链路。

跨交换机发送数据

跨交换机VLAN实例

主机 A 以主机 F 的 MAC 地址作为目的 MAC 地址封装了一个数据帧,从网卡发送出去。

交换机 A 在 Access 接口收到数据帧。查询 MAC 地址表,发现数据帧的目的地址是与交换机 B 相连的 Trunk 接口。于是交换机给数据帧打上 Access 接口的 PVID 配置,即给数据帧打上 VLAN 10 的标签,并从 Trunk 接口转发给交换机 B 。

交换机 B 在 trunk 接口收到数据帧。查看 MAC 地址表,发现是 VLAN 10 的数据帧,目的地址设备是连接在 VLAN 10 的一个 Access 接口上。于是去掉数据帧的 VLAN 标签,并从这个 Access 接口转发给主机 F 。

模拟实验

Access 接口和 Trunk 接口的配置

实验拓扑图

Access接口和Trunk接口配置的拓扑图

实验要求

  • 将 SW 1 (即交换机 1)和 SW 2 (即交换机 2)相连的接口配置为 Trunk 接口,允许传输 VLAN 5 的数据;

  • 将 PC (即主机) 与 SW 相连接口配置为 Access 接口,接口的 PVID 配置为 VLAN 5 。

实验步骤

  1. SW 1 上的配置如下:
SW1配置
  1. 检查 SW 1 的接口配置,使用命令 display vlan 查看接口 VLAN 情况。
检查VLAN配置

Hybrid 接口的配置

三种接口类型特点:

  • Access 接口:这种接口只能属于一个 VLAN,只能接收和发送一个 VLAN 的数据。通常用于连接终端设备,比如主机或服务器等。

  • Trunk 接口:这种接口能够接收和发送多个 VLAN 的数据,通常用于连接交换机。

  • Hybrid 接口:这种接口能够接收和发送多个 VLAN 的数据,可用于交换机的链路,也可用于终端设备。与 Trunk 接口的区别是,发送数据时 Trunk 接口只会摘掉 PVID 标签,而 Hybrid 接口能够不携带 VLAN 标签发送多个 VLAN 数据。

实验拓扑图

Hybrid接口配置的拓扑图

实验要求

  • 新建 3 个 VLAN ,PC 1 属于 VLAN 2 ,PC 2 属于 VLAN 3 ,Server 1 (即服务器 1)属于 VLAN 10 ;

  • 通过 Hybrid 接口实现 VLAN 2 和 VLAN 3 不能互通,但 VLAN 2 和 VLAN 3 都能与 VLAN 10 进行通信。

实验步骤

  1. SW 1 的 E0/0/2 接口,只允许通过 VLAN 2 , PC 1 又需要访问 VLAN 10 ,但是无法识别 VLAN 标签信息,因此配置 Hybrid 的 PVID 为 VLAN 2 ,同时放通 VLAN 2 和 VLAN 10 。E0/0/3 接口配置同理。E0/0/1 接口需要放通 VLAN 2 、 VLAN 3 和 VLAN 10 的流量,对端交换机又需要识别 VLAN 标签,因此以带 VLAN 标签的形式放通 VLAN 2 、 VLAN 3 和 VLAN 10 的流量。SW 1 上的配置如下:
SW1配置
  1. SW 2 的 E0/0/1 接口配置和 SW 1 的 E0/0/1 接口同理。SW 2 的 E0/0/10 接口,只允许通过 VLAN 10 , Server 1 又需要放通 VLAN 2 和 VLAN 3 的流量,因此配置 Hybrid 的 PVID 为 VLAN 10 ,同时放通 VLAN 2 、 VLAN 3 和 VLAN 10 。SW2 上的配置如下:
SW2配置
  1. 检查 VLAN 10 信息,分别在 SW 1 和 SW 2 上使用命令 display vlan 10 查看配置是否正确。
查看SW1的VLAN 10信息
查看SW2的VLAN 10信息

结尾

Access 接口接收数据帧处理过程

Access接口接收数据帧流程图

Access 接口发送数据帧处理过程

Access接口发送数据帧流程图

Trunk 接口接收数据帧处理过程

Trunk接口接收数据帧流程图

Trunk 接口发送数据帧处理过程

Trunk接口发送数据帧流程图

**参考资料:

图解TCP/IP - 竹下隆史

网络基础 - 田果

路由与交换技术 - 刘丹宁

- EOF -

推荐阅读  点击标题可跳转

1、这次答应我,一举拿下 I/O 多路复用!

2、百亿级流量的百度搜索中台,是怎么做可观测性建设的?

3、Facebook 工程师总结的 14 种算法面试模式


看完本文有收获?请分享给更多人

推荐关注「PHP开发者」,提升PHP技能

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存