2019 SDN上机第2次作业

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

(1)编写python代码,具体如下:

from mininet.topo import Topo
 
class Topo2( Topo ):
 
    def __init__( self ):
 
        # Initialize topology
        Topo.__init__( self )

        # add switches and hosts  
        sw1 = self.addSwitch('s1')
        sw2 = self.addSwitch('s2')

        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        h4 = self.addHost('h4')
        h5 = self.addHost('h5')
        h6 = self.addHost('h6')

        # add links
        self.addLink(h1,sw1,1,1)
        self.addLink(h2,sw1,1,2)
        self.addLink(h3,sw1,1,3)
        self.addLink(sw1,sw2,4,4)
        self.addLink(h4,sw2,1,1)
        self.addLink(h5,sw2,1,2)
        self.addLink(h6,sw2,1,3)

topos = { 'mytopo': ( lambda: Topo2() ) }

(2)输入如下命令,创建拓扑

sudo mn --custom ./jjj.py --topo mytopo --switch ovsk,protocols=OpenFlow13

(3)通过net查看网络情况

(4)通过pingall查看连接情况

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

(1)将h1,h2,h3三个主机进入的包转打上vlan tag,转发到s1的四号端口号,in_port是指进来的端口号,actions指的是要进行的动作,set field值为4096+vlan_id,priority是优先级。

(应打开另外一个终端进行以下操作,之前的不可关闭)

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

(2)将从之前打上的包vlan tag的包去除vlan tag,然后根据tag进行转发

sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2
sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=2,actions=pop_vlan,output:3

(3)将h4,h5,h6三个主机进入的包转打上vlan tag,转发到s2的四号端口号,in_port是指进来的端口号,actions指的是要进行的动作,set field值为4096+vlan_id,priority是优先级。

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

(4)将从之前打上的包vlan tag的包去除vlan tag,然后根据tag进行转发

sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=0,actions=pop_vlan,output:1
sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=1,actions=pop_vlan,output:2
sudo ovs-ofctl -O Openflow13 add-flow s1 priority=1,dl_vlan=2,actions=pop_vlan,output:3

具体如下图

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

分别使用以下两个命令查看

sudo ovs-ofctl -O OpenFlow13 dump-flows s1
sudo ovs-ofctl -O OpenFlow13 dump-flows s2

结果如下

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

通过pingall指令查看连接性

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

(1)通过以下指令打开wireshark

sudo wireshark

(2)输入h1 ping h4查看两主机连接情况

(3)抓包

(4)分析

帧头

(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

原文地址:https://www.cnblogs.com/jiang1436/p/11818939.html