Mininet MAC地址学习实验

3 输入net查看链路信息 。
4 输入dump查看节点信息 。
5 因为此时交换机s1和交换机s2是两个SDN交换机,而在启动Mininet时我们没有指定任何控制器,交换机中没有流表的存在,无法进行转发操作 。此时主机h1和主机h2是无法进行通信的 。我们需要按ctl+a+d跳出当前Mininet窗口 , 在主窗口命令行中输入如下命令来打开交换机s1和交换机s2的二层 。操作完成后,s1和s2就是两台普通的二层交换机了 。
Shell
# ovs-vsctl del-fail-mode s1
# ovs-vsctl del-fail-mode s2
6 输入screen –r切换至mininet窗口,执行两台主机ping操作 。
7 再按ctl+a+d跳出当前mininet窗口 , 在主窗口命令行中输入如下命令:
Shell
# 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地址表 。

Mininet 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地址查位置,根据MAC地址表中的条目,单播转发数据到端口1 。
(3)主机11接收到数据帧 。
至此,MAC地址学习过程结束 。
5 实验结论
交换机的缓存中有一个MAC地址表 , 需要转发数据时,交换机会在地址表查询是否有与目的MAC地址对应的表项,如果有通过mac地址查位置 , 交换机立即将数据报文往该表项中的转发端口发送;如果没有,交换机则会将数据报文以广播的形式发送到除了接收端口外的所有端口 , 尽最大能力保证目的主机接收到数据报文 。因此,交换机地址表的构建和维护决定了数据转发的方向和效率 。
【Mininet MAC地址学习实验】本文到此结束,希望对大家有所帮助!

猜你喜欢