1 实验目的
- 掌握OpenDaylight的安装、启动及使用
- 掌握基于OpenDaylight的二层转发原理
2 实验原理
在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析。SDN网络中由于引入了控制器的角色,其二层数据转发的机制与普通二层以太交换机洪泛+MAC地址学习机制存在很大的差异。当源IP要与目的IP通信时,会将ARP请求转发到控制器,由控制器帮助询问目的主机的MAC并将结果返回给源主机。
本实验在SDN环境中配置相同网段的两台主机,通过测试二者之间的数据转发来理解和掌握二层转发机制。
3 实验任务
本实验通过构建OpenDaylight控制器与Mininet模拟器相结合的测试环境,来研究SDN环境下二层网络交换的转发机制和特性。Mininet中构建2个交换机和4个主机,这4个主机属于同网段。相应的网络拓扑如下:
4 实验步骤
4.1搭建环境
创建Mininet虚拟机和任一版本的OpenDaylight桌面版虚拟机(此实验使用氢版本,建议使用锂(Lithium)版本,且虚拟机使用内存为4G+),并启动虚拟机。
4.2启动OpenDaylight
登录OpenDaylight虚拟机,切换到OpenDaylight安装目录。安装目录请根据实际情况决定。
1 |
cd /home/cete/ODL/opendaylight |
启动OpenDaylight:
1 |
./run.sh ##锂版本./bin/karaf |
执行以下命令查看进程,默认监听端口为6633。
1 2 |
ps -ef|grep opendaylight netstat -anp|grep 6633 |
通过浏览器访问http://localhost:8080(锂版本web:http://localhost:8181/index.html)页面。用户名和密码都是admin,登录成功后进入如下页面。
4.3创建拓扑
登录Mininet虚拟机,检查/home/mininet目录下是否有topo-2sw_2host.py实验脚本,如果没有则执行以下步骤创建脚本并脚本内容,如果有,请跳过此步骤。
1 2 |
touch topo-2sw_2host.py vim topo-2sw_2host.py |
本实验拓扑结构的由Python脚本生成,请在topo-2sw_2host.py脚本中添加如下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
"""Custom topology example Two directly connected switches plus two hosts for each switch: host1 --- switch1 --- switch2 --- host3 | | | | host2 host4 """ from mininet.topo import Topo class MyTopo( Topo ): "Simple topology example." def __init__( self ): "Create custom topo." # Initialize topology Topo.__init__( self ) # Add hosts and switches Host1 = self.addHost( 'h1' ) Host2 = self.addHost( 'h2' ) Host3 = self.addHost( 'h3' ) Host4 = self.addHost( 'h4' ) Switch1 = self.addSwitch( 's1' ) Switch2 = self.addSwitch( 's2' ) # Add links self.addLink( Host1, Switch1 ) self.addLink( Host2, Switch1 ) self.addLink( Switch2, Host3 ) self.addLink( Switch2, Host4 ) self.addLink( Switch1, Switch2 ) topos = { 'mytopo': ( lambda: MyTopo() ) } |
执行以下命令启动Mininet,生成测试拓扑结构:
1 |
screen mn --custom /home/mininet/topo-2sw_2host.py --topo mytopo --controller=remote,ip=10.0.0.226,port=6633 --switch ovsk,protocols=OpenFlow10 |
说明
通过screen mn命令启动mininet,这样可以通过ctrl+a+d和screen –r命令进行系统命令行和mininet命令行之前的窗口切换。
请根据实际情况将ip为OpenDaylight的ip,添加protocols参数指定OpenFlow协议版本。
mn为mininet启动命令。
- --mac指定虚拟主机的mac地址顺序编号,若不带此参数则随机编号
- --controller指定of交换机的控制器
- --switch指定虚拟交换机的类型,ovsk表示虚拟交换机为ovs Kernel mode
- --custom指定自定义拓扑文件
- --topo指定加载拓扑的名字
执行ctrl+a+d命令切换到系统命令行。
输入ovs-vsctl show命令查看Mininet是否与OpenDaylight连通。
1 |
ovs-vsctl show |
登录OpenDaylight Web页面查看网络拓扑。
当前网络拓扑如下:
4.4 抓包验证
步骤1.在OpenDaylight虚拟机上执行以下命令开始抓包。
1 |
tcpdump -i any port 6633 -s0 -w 206.pcap |
步骤2.在Mininet命令行中查看当前已生成2个交换机和4个主机。
如果当前是在系统命令行,则执行screen –r命令切换到mininet命令行。执行以下命令查看交换机和主机。
1 |
nodes |
步骤3.在Mininet中执行以下命令测试。
1 |
h1 ping h3 |
步骤4.在OpenDaylight Web页面查看拓扑图。
建议刷新页面更新拓扑图。
步骤5.在OpenDaylight的Web页面查看Troubleshoot选项卡,查看当前两台交换机上已经下发的流表。
交换机S1上的流表如下图所示:
交换机S2上的流表如下图所示:
步骤6.在Mininet中执行ctrl+a+d命令从Mininet命令行切换到系统命令行。
步骤7.执行以下命令查看当前两个交换机上的流表内容
1 2 |
ovs-ofctl dump-flows s1 ovs-ofctl dump-flows s2 |
步骤8.在OpenDayLight中查看采用默认网关配置。
如下图所示:
OpenDayLight虚拟器路由情况:
Mininet虚拟机路由情况:
4.5 分析实验
下面结合抓包文件过滤openflow_v1 && (arp || icmp)来分析基于OpenDaylight的二层转发机制,流程图如下:
1.源主机h1(10.0.0.1)发出ARP请求h3(10.0.0.3)的MAC,交换机SW1并不知道如何转发该包,因此将其通过Packet In消息发送到Controller处理。
2.Controller收到ARP请求后,会要求每一台SW所对应10.0.0.0/8网段的非SW互联端口(只有这些端口是连接主机或传统网络的)发出ARP来请求10.0.0.2的MAC地址。这里Controller并不是简单的将收到ARP原封不动的发出,而是将源IP改为默认网关IP地址,然后发出。
3.只有h3(10.0.0.3)才会响应ARP,它将ARP Response发送到SW2。SW2也不知道如何处理,因此将ARP封装在Packet In中发送到Controller。
4.Controller发现这是ARP响应,并且正是之前10.0.0.1发送的ARP请求,因此它会将该ARP通过OF协议发到SW1,同时指示SW1将其送出的端口(也就是h1对应的端口)。SW1执行该操作。
5.Controller在收到h3的ARP后也得知了10.0.0.3的位置,它根据网络拓扑计算,可以得到全网到达10.0.0.3和10.0.0.1的转发路径,并将流表通过OF Flow Modify消息推送到每一台交换机上。
6.h1收到ARP Response后完成ARP解析过程,然后它构造ICMP PING Request数据包,其中源和目MAC分别为h1和h3的MAC,源和目IP分别为h1和h3的IP。由于SW1和SW2都已经成功的装载了到h3(10.0.0.3)的流表,因此该数据包将被顺利发送到h3。
7.h3收到该ICMP PING Request,源是h1,但是此时它尚未有h1的MAC,于是还要进行一次ARP解析,SW2再次将ARP请求封装成Packet In消息发送Controller。
8.Controller已经得知h1的MAC,可直接响应,并通过OF向SW2返回ARP结果和所需要送出的端口(h2接入的端口)。
9.h3学到ARP后,即可构造ICMP Response包,发送到SW2,SW2根据h1目的地址匹配转发表将其转发到SW1,SW1根据h1目的地址匹配转发表将其发送到h1对应的端口。h1到h3的双向通道至此完全打通。
5 实验结论
本实验基于SDN创新实验平台搭建OpenDaylight和Mininet相结合的测试环境,通过分析同网段两台主机的ping测试流程来掌握基于OpenDaylight的二层转发机制。