基本要求(一)
1.搭建所示SDN拓扑,协议使用Open Flow 1.0,并连接Ryu控制器,通过Ryu的图形界面查看网络拓扑。
构建拓扑
连接ryu控制器
通过Ryu的图形界面查看网络拓扑,在浏览器中输入127.0.0.1:8080
2.阅读Ryu文档的The First Application一节,运行当中的L2Switch,h1 ping h2或h3,在目标主机使用 tcpdump 验证L2Switch,分析L2Switch和POX的Hub模块有何不同。
L2Switch
运行L2Switch.py
重新构建拓扑,并对h2、h3节点进行抓包
h1 ping h2
h1 ping h3
ryu下查看流表
pox下查看流表
对比可得,ryu下查不到流表,而在pox下可查看流表。
3.编程修改L2Switch.py,另存为L2xxxxxxxxx.py,使之和POX的Hub模块的变得一致?
L2212006156
运行L2212006156并查看流表
进阶要求(二)
1.阅读Ryu关于simple_switch.py和simple_switch_1x.py的实现,以simple_switch_13.py为例,完成其代码的注释工作,并回答下列问题:
simple_switch_13
a)代码当中的mac_to_port的作用是什么?
保存mac地址到交换机端口的映射
b)simple_switch和simple_switch_13在dpid的输出上有何不同?
simple_switch是直接输出dpid,而simple_switch_13是在dpid前端填充0直至满16位
c)相比simple_switch,simple_switch_13增加的switch_feature_handler实现了什么功能?
switch_feature_handler的作用是:将缺失流表项添加到流表中,当封包没有匹配到流表项时,就触发packet_in
d)simple_switch_13是如何实现流规则下发的?
在接收到packetin事件后,首先获取包学习,交换机信息,以太网信息,协议信息等。
如果以太网类型是LLDP类型,则不予处理。
如果不是,则获取源端口目的端口,以及交换机id,先学习源地址对应的交换机的入端口,再查看是否已经学习目的mac地址,如果没有则进行洪泛转发。
如果学习过该mac地址,则查看是否有buffer_id,如果有的话,则在添加流动作时加上buffer_id,向交换机发送流表。e)switch_features_handler和_packet_in_handler两个事件在发送流规则的优先级上有何不同?
switch_features_handler下发流表的优先级比_packet_in_handler高。
个人总结(三)