一.网络拓扑
二.拓扑建立和Python代码,下发流表等
代码部分:
from mininet.topo import Topo
class MyTopo( Topo ):
"Simple topology example."
def __init__( self ):
# Initialize topology
Topo.__init__( self )
s1 = self.addSwitch('s1')
s2 = self.addSwitch('s2')
s3 = self.addSwitch('s3')
s4 = self.addSwitch('s4')
h1 = self.addHost('h1')
h2 = self.addHost('h2')
h3 = self.addHost('h3')
self.addLink(h1,s1)
self.addLink(s1,s2)
self.addLink(s1,s3)
self.addLink(s2,s4)
self.addLink(s3,s4)
self.addLink(h2,s4)
self.addLink(h3,s4)
topos = { 'mytopo': ( lambda: MyTopo() ) }
import httplib2
import time
class OdlUtil:
url = ''
def __init__(self, host, port):
self.url = 'http://' + host + ':' + str(port)
def install_flow(self, container_name='default',username="admin", password="admin"):
http = httplib2.Http()
http.add_credentials(username, password)
headers = {'Accept': 'application/json'}
flow_name = 'flow_' + str(int(time.time()*1000))
h1h2body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'\
'{"ethernet-type": {"type": "2048"}},'\
'"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.2/32"},'\
'"instructions": {"instruction": [{"order": "0",'\
'"apply-actions": {"action": [{"output-action": {'\
'"output-node-connector": "2"},"order": "0"}]}}]},'\
'"priority": "100","cookie": "1","table_id": "0"}]}'
mh1h2body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'\
'{"ethernet-type": {"type": "2048"}},'\
'"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.2/32"},'\
'"instructions": {"instruction": [{"order": "0",'\
'"apply-actions": {"action": [{"output-action": {'\
'"output-node-connector": "2"},"order": "0"}]}}]},'\
'"priority": "102","cookie": "1","table_id": "0"}]}'
h1h2body2 ='{"flow": [{"id": "2","match": {"ethernet-match":'\
'{"ethernet-type": {"type": "2048"}},'\
'"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.2/32"},'\
'"instructions": {"instruction": [{"order": "0",'\
'"apply-actions": {"action": [{"output-action": {'\
'"output-node-connector": "3"},"order": "0"}]}}]},'\
'"priority": "99","cookie": "2","table_id": "0"}]}'
mh1h2body2 ='{"flow": [{"id": "2","match": {"ethernet-match":'\
'{"ethernet-type": {"type": "2048"}},'\
'"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.2/32"},'\
'"instructions": {"instruction": [{"order": "0",'\
'"apply-actions": {"action": [{"output-action": {'\
'"output-node-connector": "3"},"order": "0"}]}}]},'\
'"priority": "102","cookie": "2","table_id": "0"}]}'
headers = {'Content-type': 'application/json'}
num=0
while num < 4 :
response, content = http.request(uri='http://127.0.0.1:8181/restconf/config/opendaylight
-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/3', body=mh1h2body1, method='PUT',
headers=headers)
time.sleep(0.1)
response, content = http.request(uri='http://127.0.0.1:8181/restconf/config/opendaylight-
inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/3', body=h1h2body1, method='PUT',headers=headers)
response, content = http.request(uri='http://127.0.0.1:8181/restconf/config/opendaylight-
inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/2', body=mh1h2body2, method='PUT',headers=headers)
time.sleep(0.1)
response, content = http.request(uri='http://127.0.0.1:8181/restconf/config/opendaylight-inventory
:nodes/node/openflow:1/flow-node-inventory:table/0/flow/2', body=h1h2body2, method='PUT',headers=headers)
print(content.decode())
odl = OdlUtil('127.0.0.1','8181')
odl.install_flow()
相关图片:
三.任务分工
主要负责搜集相关资料和拓扑的建立,演讲ppt和后期视频的剪辑等。
四.课程总结
主要是学会了一些基本的SDN的网络拓扑知识,学会了在mninet上创建拓扑并通过floodlight验证器正确,用ODL控制器下发流表并通过
OVS命令查看验证,用Postman通过ODL的北向接口下发流表,用Wireshark抓包验证拓扑结构的正确性,学习了实现较简单的负载均衡场景,
了解了几种负载均衡的简单算法以及对负载均衡的优化,收获还是挺大的。