1 实验目的
了解交换机的MAC地址学习过程;
了解交换机对已知单播、未知单播和广播帧的转发方式。
2 实验原理
MAC(media access control,介质访问控制)地址是识别LAN节点的标识。MAC对设备(通常是网卡)接口是全球唯一的,MAC地址为48位,用12个16进制数表示。前6个16进制数字由IEEE管理,用来识别生产商或者厂商,构成OUI(Organization Unique Identifier,组织唯一识别符)。后6个包括网卡序列号,或者特定硬件厂商的设定值。对于一个网卡来说,MAC地址是它的一个物理地址,是不可变的,而IP地址是它对应的一个逻辑地址,是可以更改的。
我们设想一个模型,有A、B、C、D这四台PC接在一台交换机上, 首先交换机最初加电时它里面的MAC地址表为空,也就是还没学习,在学习的最初状态。首先,比如A发给D一个数据, 这个时候交换机首先在连接A那台PC的端口上学习到A的MAC地址,并且把这个MAC地址记录到交换机里的MAC地址表里, 但是这个时候交换机并不知道D是在哪,因为MAC表里还没有D的MAC. 这个时候怎么办呢?交换机会复制多份这个数据(多帧复制),向交换机的所有端口都转发这个数据(除A接的那个端口外),这个称为泛洪,flooding 。当B和C接到这个数据时,首先检查目的地址,发现不是发给我的,那么就丢弃这个帧。 当D接到这个帧时,发现这是发给自己的,然后D便会发给A数据,这个时候交换机在D的接口又学习到了D的MAC地址 , 这个时候交换机学习到了两条MAC地址。
3 实验任务
本实验通过Mininet模拟二层交换机和两个主机,通过两个主机通信来了解交换机MAC地址学习过程。
本实验Mininet拓扑如下:
4 实验步骤
4.1 搭建环境
步骤1:创建虚网
1 在首页单击“创建虚网”,本次实验虚网名为“Slice5”,虚网名只能包括数字、字母和下划线。
2 单击“下一步”,选择网络拓扑,再单击“下一步”,确认虚网清单。
3 单击“创建”,成功创建虚网。
步骤2:添加控制器
1 单击虚网名(这里是“Slice5”),进入“虚网详情”页。
2 单击“控制器”部分的“”按钮,请根据实际情况选择控制器。由于启动虚网必须要创建一个控制器,此处的控制器选择不影响实验结果(这里选择的是Floodlight控制器),接着按照提示直到创建成功。
步骤3:添加网关
单击“网关”部分的“”按钮,添加网关。
步骤4:创建虚拟机
本实验需要创建一个虚拟机,这里取名为mininet。选择镜像mininet-OF13,这里设置2核CPU,4G内存。
镜像选择:
创建成功后的虚网详情:
步骤5:启动虚网、网关和虚拟机
1 单击页面右上角的“”按钮,启动虚网,虚网启动成功后,控制器也会启动成功。
2 单击“网关”部分的“”按钮,启动网关。
3 选择“虚拟机”部分创建好的虚拟机,单击“”按钮启动。
4.2 实验操作
1在虚拟机上启动Mininet,创建一个线型拓扑(如实验任务中图所示),控制器设置为无。
# screen mn –-topo linear –-mac –-switch ovsk –-controller=none
如下图,mininet搭建好了我们所需的拓扑环境:
2 输入nodes查看全部节点。
3 输入net查看链路信息。
4 输入dump查看节点信息。
5 因为此时交换机s1和交换机s2是两个SDN交换机,而在启动mininet时我们没有指定任何控制器,交换机中没有流表的存在,无法进行转发操作。此时主机h1和主机h2是无法进行通信的。我们需要按ctl+a+d跳出当前mininet窗口,在主窗口命令行中输入如下命令来打开交换机s1和交换机s2的二层。操作完成后,s1和s2就是两台普通的二层交换机了。
# ovs-vsctl del-fail-mode s1
# ovs-vsctl del-fail-mode s2
6 输入screen –r切换至mininet窗口,执行两台主机ping操作。
7 再按ctl+a+d跳出当前mininet窗口,在主窗口命令行中输入如下命令:
# ovs-ofctl dump-flows s1
# ovs-ofctl dump-flows s2
我们可以看到有两条数据帧转发表,但要注意这并不是SDN交换机中的流表。这表明交换机已进行过MAC地址学习,下面我们详细分析一下其原理。
4.3MAC地址学习分析
1 如下图所示,假设交换机A和B的MAC地址表是空的,主机11向主机33发送数据帧。
交换机A接收到数据帧后,执行以下操作:
(1)交换机A学习主机11的MAC地址和端口号,此时交换机A的MAC地址表:
(2)交换机A查看自己的MAC地址表。
(3)如果MAC地址表中有目的主机MAC地址则直接进行数据转发,如果没有则继续执行步骤4。
(4)交换机A向除源数据发送端口外的其他所有端口发送广播。(这里交换机A从端口2和端口3向外发送广播)
交换机B在接收到数据帧后,执行以下操作:
(1)交换机B学习源MAC地址和端口号,此时交换机B的MAC地址表:
(2)交换机B查看自己的MAC地址表。
(3)交换机B向除源数据发送端口外的其他所有端口发送广播。(这里交换机B从端口1和端口2向外发送广播)
主机22查看接收到的数据帧,发现目标MAC地址不是自己,丢弃数据帧。
主机33接收数据帧,主机44丢弃数据帧。
2 假设这时候主机44要给主机11发送数据帧。
交换机B接收到数据帧后,执行以下操作:
(1)交换机B学习主机44的MAC地址和端口号,此时交换机B的MAC地址表:
(2)交换机B查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口3。
交换机A在接收到数据帧后,执行以下操作:
(1)交换机A学习源MAC地址和端口号,此时交换机A的MAC地址表:
(2)交换机A查看自己的MAC地址表,根据MAC地址表中的条目,单播转发数据到端口1。
(3)主机11接收到数据帧。
至此,MAC地址学习过程结束。
5 实验结论
交换机的缓存中有一个MAC地址表,需要转发数据时,交换机会在地址表查询是否有与目的MAC地址对应的表项,如果有,交换机立即将数据报文往该表项中的转发端口发送;如果没有,交换机则会将数据报文以广播的形式发送到除了接收端口外的所有端口,尽最大能力保证目的主机接收到数据报文。因此,交换机地址表的构建和维护决定了数据转发的方向和效率。