任务目的

1、了解交换机的MAC地址学习过程。
2、了解交换机对已知单播、未知单播和广播帧的转发方式。

任务环境

设备名称 软件环境(镜像) 硬件环境
主机 Ubuntu 14.04桌面版
Mininet 2.2.0
CPU:1核 内存:2G 磁盘:20G
注:系统默认的账户为root/[email protected],openlab/[email protected]

任务内容

通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换机MAC地址学习过程。

实验原理

MAC(media access control,介质访问控制)地址是识别LAN节点的标识。MAC对设备(通常是网卡)接口是全球唯一的,MAC地址为48位,用12个16进制数表示。前6个16进制数字由IEEE管理,用来识别生产商或者厂商,构成OUI(Organization Unique Identifier,组织唯一识别符)。后6个包括网卡***,或者特定硬件厂商的设定值。对于一个网卡来说,MAC地址是它的一个物理地址,是不可变的,而IP地址是它对应的一个逻辑地址,是可以更改的。说到MAC地址表,就不得不说一下交换机的工作原理了,因为交换机是根据MAC地址表转发数据帧的。在交换机中有一张记录着局域网主机MAC地址与交换机接口的对应关系的表,交换机就是根据这张表负责将数据帧传输到指定的主机上的。交换机在接收到数据帧以后,首先、会记录数据帧中的源MAC地址和对应的接口到MAC表中,接着、会检查自己的MAC表中是否有数据帧中目标MAC地址的信息,如果有则会根据MAC表中记录的对应接口将数据帧发送出去(也就是单播),如果没有,则会将该数据帧从非接受接口发送出去(也就是广播)。下图详细讲解交换机传输数据帧的过程。
Openlab实验平台实验--Mininet Mac地址学习实验
1、主机A会将一个源MAC地址为自己目标MAC地址为主机B的数据帧发送给交换机。

2、交换机收到此数据帧后,首先将数据帧中的源MAC地址和对应的接口(接口为f
0/1)记录到MAC地址表中。

3、然后交换机会检查自己的MAC地址表中是否有数据帧中的目标MAC地址的信息,如果有,则从MAC地址表中记录的接口发送出去;如果没有,则会将此数据帧从非接收接口的所有接口发送出去(也就是除了f0/1接口)。

4、这时,局域网的所有主机都会收到此数据帧,但是只有主机B收到此数据帧时会响应这个广播,并回应一个数据帧,此数据帧中包括主机B的MAC地址。

5、当交换机收到主机B回应的数据帧后,也会记录数据帧中的源MAC地址(也就是主机B的MAC地址),这时,再当主机A和主机B通信时,交换机根据MAC地址表中的记录,实现单播了。

当局域网存在多个交换机互联的时候,交换机的MAC地址表记录过程如下图所示。
Openlab实验平台实验--Mininet Mac地址学习实验
1、主机A将一个源MAC地址为自己,目标MAC地址主机C的数据帧发送给交换机。

2、交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播出去,主机B和交换机2都会收到此数据帧。

3、交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。

4、主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机2都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。

5、这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f0/1。

从上面的两幅图可以看出,交换机具有动态学习源MAC地址的功能,并且交换机的一个接口可以对应多个MAC地址,但是一个MAC地址只能对应一个接口。本次实验将通过Mininet来验证交换机的MAC地址学习功能。

注意:交换机动态学习的MAC地址默认只有300S的有效期,如果300S内记录的MAC地址没有通信,则会删除此记录。

实验步骤

一、MAC地址学习操作

步骤1. 登录Mininet虚拟机,执行以下命令创建一个线型拓扑,控制器设置为无。
$ sudo mn --topo linear --mac --switch ovsk --controller=none
Openlab实验平台实验--Mininet Mac地址学习实验
步骤2. 执行 nodes 命令查看全部节点,如下图所示。
Openlab实验平台实验--Mininet Mac地址学习实验
步骤3. 执行 net 命令查看链路信息,如下图所示。
Openlab实验平台实验--Mininet Mac地址学习实验
步骤4. 执行 dump 命令查看节点信息,如下图所示。
Openlab实验平台实验--Mininet Mac地址学习实验
步骤5. 再打开一个终端(Terminal窗口2),执行如下命令来打开交换机s1和交换机s2的二层。
$ sudo ovs-vsctl del-fail-mode s1
$ sudo ovs-vsctl del-fail-mode s2
说明:因为交换机s1和交换机s2是两个SDN交换机,在启动Mininet时没有指定任何控制器,交换机中没有流表的存在,无法进行转发操作。主机h1和主机h2无法进行通信。执行上述命令后,s1和s2就是两台普通的二层交换机了。

步骤6. 在Terminal窗口1中,执行如下命令进行两台主机Ping操作。

h1 ping h2
Openlab实验平台实验--Mininet Mac地址学习实验

步骤7. 在Terminal窗口2中执行如下命令,查看流表项。
$ sudo ovs-ofctl dump-flows s1
$ sudo ovs-ofctl dump-flows s2
Openlab实验平台实验--Mininet Mac地址学习实验
由上图可以看到有两条数据帧转发表,但并不是SDN交换机中的流表。这表明交换机已进行过MAC地址学习。

二、MAC地址学习分析
步骤1. 如下图所示,假设交换机A和B的MAC地址表是空的,主机11向主机33发送数据帧。
Openlab实验平台实验--Mininet Mac地址学习实验
步骤2. 交换机A接收到数据帧后,执行以下操作。
(1) 交换机A学习主机11的MAC地址和端口号,此时交换机A的MAC地址表如下图所示。

Openlab实验平台实验--Mininet Mac地址学习实验
(2) 交换机A查看自己的MAC地址表。

(3) 如果MAC地址表中有目的主机MAC地址则直接进行数据转发,如果没有则继续执行步骤4。
(4) 交换机A向除源数据发送端口外的其他所有端口发送广播(这里交换机A从端口2和端口3向外发送广播)。

步骤3. 交换机B在接收到数据帧后,执行以下操作。
(1) 交换机B学习源MAC地址和端口号,此时交换机B的MAC地址表如下图所示。

Openlab实验平台实验--Mininet Mac地址学习实验
(2) 交换机B查看自己的MAC地址表。

(3) 交换机B向除源数据发送端口外的其他所有端口发送广播(这里交换机B从端口1和端口2向外发送广播)。

步骤4. 主机22查看接收到的数据帧,发现目标MAC地址不是自己,丢弃数据帧。
步骤5. 主机33接收数据帧,主机44丢弃数据帧。
步骤6. 假设这时候主机44要给主机11发送数据帧。
步骤7. 交换机B接收到数据帧后,执行以下操作。
(1) 交换机B学习主机44的MAC地址和端口号,此时交换机B的MAC地址表如下图所示。

Openlab实验平台实验--Mininet Mac地址学习实验
(2) 交换机B查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口3。

步骤8. 交换机A在接收到数据帧后,执行以下操作。
(1) 交换机A学习源MAC地址和端口号,此时交换机A的MAC地址表,如下图所示。

Openlab实验平台实验--Mininet Mac地址学习实验
(2) 交换机A查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口1。

(3) 主机11接收到数据帧。至此,MAC地址学习过程结束。

相关文章: