2019 SDN上機第6次做業

2019 SDN上機第6次做業

1.實驗拓撲

實驗拓撲

python腳本

from mininet.topo import Topo
class MyTopo(Topo):
    def __init__(self):
        Topo.__init__(self)
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        h4 = self.addHost('h4')
        h5 = self.addHost('h5')
        h6 = self.addHost('h6')
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        self.addLink(h1, s1, 1, 1)
        self.addLink(h2, s1, 1, 2)
        self.addLink(h3, s1, 1, 3)
        self.addLink(s1, s2, 4, 4)
        self.addLink(h4, s2, 1, 1)
        self.addLink(h5, s2, 1, 2)
        self.addLink(h6, s2, 1, 3)
topos = {'mytopo': (lambda: MyTopo())}

輸入命令執行文件建立拓撲

sudo mn --custom ex.py --topo mytopo --controller=remote,ip=127.0.0.1,port=6633 --switch ovsk,protocols=OpenFlow13
python

鏈接ryu

編寫shell腳本 並執行
curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "in_port":1
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4096            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "in_port":2
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },

        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4097            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "in_port":3
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4098            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "dl_vlan": "0"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 1
        }
    ]
}' http://localhost:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "dl_vlan": "1"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 2
        }
    ]
}' http://localhost:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 1,
    "priority":1,
    "match":{
        "dl_vlan": "2"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 3
        }
    ]
}' http://localhost:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "in_port":1
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4096            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "in_port":2
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4097            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add


curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "in_port":3
    },
    "actions":[
        {
            "type": "PUSH_VLAN",     # s1將從主機發來的數據包打上vlan_tag
            "ethertype": 33024       # 幀類型0x8100(=33024): 表示IEEE 802.1Q的VLAN數據幀
        },
        {
            "type": "SET_FIELD",
            "field": "vlan_vid",     # 設置VLAN ID
            "value": 4098            # 設置vlan_id的值
        },
        {
            "type": "OUTPUT",
            "port": 4
        }
    ]
}' http://127.0.0.1:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "dl_vlan": "0"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 1
        }
    ]
}' http://localhost:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "dl_vlan": "1"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 2
        }
    ]
}' http://localhost:8080/stats/flowentry/add

curl -X POST -d '{
    "dpid": 2,
    "priority":1,
    "match":{
        "dl_vlan": "2"
    },
    "actions":[
        {
            "type": "POP_VLAN",     # 給進入交換機的包去除 vlan_tag
        },
        {
            "type": "OUTPUT",
            "port": 3
        }
    ]
}' http://localhost:8080/stats/flowentry/add

查看流表

用pingall查看連通性

3、對比兩種方法,寫出你的實驗體會

原來的方法沒有容錯率,只要錯了一小步就得從新開始,而使用ryu更容易理解而且在後面代碼中能夠修正一些錯誤,方便又實用。shell

相關文章
相關標籤/搜索