此为中国大学MOOC上温州大学所开设的SDN软件定义网络课程配套实验。
镜像地址:https://pan.baidu.com/s/1qYN_MtUboPmruHda1DgrTA 提取码:mhfi
实验指导书地址:链接:https://pan.baidu.com/s/1XpDrV2car4qH-sXJq1zbPA 提取码:s8un
一、前置知识:
POX 控制器部分组件说明:
-
- forwarding.hub:该组件每个交换机添加洪泛通配符规则,将所有交换机等效于 ethernet 集线器。
- forwarding.l2_learning:该组件使 opennflow 交换机实现 L2 链路层上的地址学习 (类似网桥)。但当该组件学习地址学习时,向流表下发的规则会尽可能的准确, 而不仅仅是 L2 层的地址。例如不同的 TCP 连接将产生不同的表项。
- forwarding.l2_pairs:类似于 forwarding.l2_learning,l2_pairs 让交换机进行地址学 习,但该组件是尽可能的简化规则学习,所有安装的表项时只使用 L2 层信息(如 Mac 地址)。
- forwarding.l3_learning:组件并不是一个完整的 Router,该组件是可 POX 的 packet library(代码)的一个实现样例,可以构造 ARP 请求和回复。l3_learning 关心 IP从哪来,但并不关心 IP 的填充域,如子网等。
二、实验步骤:
实验一 使用tcpdump验证Hub模块
1、创建拓扑。 拓扑包含1台控制器,1台交换机,3台主机,控制器默认监听6633端口,开启h1,h2,h3的终端
2、拓扑如下
3、启动POX的forwarding.hub模块,并且以DEBUG模式来运行查看日志
命令:./pox.py log.level --DEBUG forwarding.hub
调用组件模块用.
4、在h3(10.0.0.3)主机上进行抓包,并使用h2 ping h1
发现h3也抓的到h2 ping h1的包,说明交换机是hub模式。
实验二 使用tcpdump验证Switch模块
1、启动forwarding.l2_learning模式
2、开启h3终端,进行抓包,使用h2 ping h1
h2 ping h1
h3终端显示
可以看到h3只抓到了h2 ping h1的第一个包,后面的包全部抓不到,这就符合交换机的Switch模式。至于为什么第一个包抓的到,我们开启wireshark对抓包进行分析
当交换机收到h2 ping h1的第一个ICMP包时,发送了packet_in消息给控制器,控制器回复packet_out消息,在packet_out消息中动作为Output to switch port,就是将数据包从某个端口发出,端口号为65531,其十六进制为0xfffb,我们到/home/ubuntu/openflow/include/openflow/openflow.h中查看此端口号的意义
查明此端口意义是将此数据包进行泛洪,所以交换机就会将此数据包就行泛洪,所以h3也能捕获到h2 ping h1的第一个数据包。
3、对交换机s1进行流表项查询,验证是l2_leanring模式
由于流表项规则中包含了比较详细的标识(含有IP地址),不仅仅是L2地址,所以能判断是l2_learning模式。
4、重新载入l2_pairs模块,再观察交换机s1流表项
载入l2_pairs模块后,交换机s1流表项:
规则只包含L2层的信息,可以验证这是l2_pairs模式。