首页 > 技术文章 > SDN第二次作业

jjsgxty 2019-11-07 23:49 原文

1. 利用mininet创建如下拓扑,要求拓扑支持OpenFlow 1.3协议,主机名、交换机名以及端口对应正确,请给出拓扑Mininet执行结果,展示端口连接情况

创建拓扑

要求拓扑支持OpenFlow 1.3协议

点击run

展示端口连接情况

2. 直接在Open vSwitch下发流表,实现如下连通性要求,请逐条说明所下发的流表含义

h1 -- h4互通

h2 -- h5互通

h3 -- h6互通

其余主机不通

SDN第二次作业

将三台主机各设在一个vlan网络内(独立的vid),s1的数据包打上vlan tag从端口4向s2转发
动作为push_vlan
在报文外层压入一层vlan tag,需要使用openflow1.1以上版本兼容
ps: set field值为4096+vlan_id,并且vlan优先级为0,即4096-8191,对应的vlan_id为0-4095

sudo ovs-ofctl add-flow -O OpenFlow13 s1 in_port=1,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4

sudo ovs-ofctl add-flow -O OpenFlow13 s1 in_port=2,actions=push_vlan:0x8100,set_field:4098-\>vlan_vid,output:4

sudo ovs-ofctl add-flow -O OpenFlow13 s1 in_port=3,actions=push_vlan:0x8100,set_field:4099-\>vlan_vid,output:4

动作为strip_vlan
剥掉报文内外层vlan tag
s1将接收到的数据包去除vlan tag,然后根据dl_vlan(数据包原始的vlan_id),向指定端口转发
(注意此处也要加上-O OpenFlow13,否则会出现错误***Unknown command: sudo ovs-ofctl add-flow s1 in_port=4,dl_vlan=1,actions=strip_vlan,output:1)

sudo ovs-ofctl -O OpenFlow13 add-flow s1 in_port=4,dl_vlan=1,actions=strip_vlan,output:1

sudo ovs-ofctl -O OpenFlow13 add-flow s1 in_port=4,dl_vlan=2,actions=strip_vlan,output:2

sudo ovs-ofctl -O OpenFlow13 add-flow s1 in_port=4,dl_vlan=3,actions=strip_vlan,output:3

s2同理

sudo ovs-ofctl add-flow -O OpenFlow13 s2 in_port=1,actions=push_vlan:0x8100,set_field:4097-\>vlan_vid,output:4

sudo ovs-ofctl add-flow -O OpenFlow13 s2 in_port=2,actions=push_vlan:0x8100,set_field:4098-\>vlan_vid,output:4

sudo ovs-ofctl add-flow -O OpenFlow13 s2 in_port=3,actions=push_vlan:0x8100,set_field:4099-\>vlan_vid,output:4

sudo ovs-ofctl -O OpenFlow13 add-flow s2 in_port=4,dl_vlan=1,actions=strip_vlan,output:1

sudo ovs-ofctl -O OpenFlow13 add-flow s2 in_port=4,dl_vlan=2,actions=strip_vlan,output:2

sudo ovs-ofctl -O OpenFlow13 add-flow s2 in_port=4,dl_vlan=3,actions=strip_vlan,output:3

3. 直接在Open vSwitch查看流表,提交OVS命令执行结果

查询s1流表
sudo ovs-ofctl -O OpenFlow13 dump-flows s1

查询s2流表
sudo ovs-ofctl -O OpenFlow13 dump-flows s2

4. 提交主机连通性测试结果,验证流表的有效性

5.利用Wireshark抓包,分析验证特定报文

输入sudo wireshark命令出现错误

解决办法⬇⬇
https://blog.csdn.net/pyufftj/article/details/22492543

报文分析

帧头
(1) “72 ec d5 d6 54 58”代表目的MAC地址
(2) “e6 00 77 47 6b 22”代表源MAC地址
(3) “08 00”代表协议类型为IP数据报
IP数据报
45 00 00 54 8e 16 00 00 40 01 d8 8e 0a 00 00 04 0a 00 00 01
(1)“45”:“4”代表IP协议的版本,说明是IPv4;
“5”代表IP包的包头长度为:5*4=20字节
(2)“00”代表服务类型
(3)“00 54”代表IP数据报文总长(包含头部及数据)
(4)“8e 16”、“8e 16”代表认证、标志、段偏移;主要用于数据包的分段
“00 00”代表无偏移字段
(5)“40”代表存活时间是64
(6)“01”这里代表的是传输层的报文协议
(7)“d8 8e”报头确认号
(8)“0a 00 00 04”代表源IP地址10.0.0.4
(9)“0a 00 00 01”代表目的IP地址10.0.0.1

推荐阅读