• SDN期末作业


    SDN期末作业

    一、项目描述
    负载均衡程序

    二、个人分工
    代码实现:林俊辰、黄逸飞
    文档收集:郭圳源
    视频拍摄:叶文滔
    三、代码演示及过程描述
    from mininet.topo import Topo

       class MyTopo( Topo ):
      "Simple topology example."
    
        def __init__( self ):
    
        # Initialize topology
        Topo.__init__( self )
        
        sw1 = self.addSwitch('s1')
        sw2 = self.addSwitch('s2')
        sw3 = self.addSwitch('s3')
        sw4 = self.addSwitch('s4')
    
        h1 = self.addHost('h1')
        h2 = self.addHost('h2')
        h3 = self.addHost('h3')
        h4 = self.addHost('h4')
    
        self.addLink(h1,sw1,1)
        self.addLink(sw1,sw2,2,1)
        self.addLink(sw1,sw4,3,2)
        self.addLink(sw1,sw3,4,1)
        self.addLink(sw2,sw4,2,1)
        self.addLink(sw3,sw4,2,3)
        self.addLink(sw4,h2,4)
        self.addLink(sw4,h3,5)
        self.addLink(sw4,h4,6)
        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))

        h1h4body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'   
                '{"ethernet-type": {"type": "2048"}},'
                 '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "4"},"order": "0"}]}}]},'
                '"priority": "101","cookie": "1","table_id": "0"}]}'    
    
         mh1h4body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
                '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "4"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "1","table_id": "0"}]}'
    
         h1h4body2 ='{"flow": [{"id": "5","match": {"ethernet-match":'   
               '{"ethernet-type": {"type": "2048"}},'
                 '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "2"},"order": "0"}]}}]},'
                '"priority": "100","cookie": "5","table_id": "0"}]}'
    
          mh1h4body2 ='{"flow": [{"id": "5","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
                '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "2"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "5","table_id": "0"}]}'
    
    h1h4body3 ='{"flow": [{"id": "6","match": {"ethernet-match":'           
               '{"ethernet-type": {"type": "2048"}},'
               '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "3"},"order": "0"}]}}]},'
                '"priority": "99","cookie": "6","table_id": "0"}]}'
    
     mh1h4body3 ='{"flow": [{"id": "6","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
                '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.4/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "3"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "6","table_id": "0"}]}'        
    
         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": "4"},"order": "0"}]}}]},'
                '"priority": "101","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": "4"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "1","table_id": "0"}]}'
    
        h1h2body2 ='{"flow": [{"id": "5","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": "5","table_id": "0"}]}'
    
    mh1h2body2 ='{"flow": [{"id": "5","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": "5","table_id": "0"}]}'
    
    h1h2body3 ='{"flow": [{"id": "6","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": "6","table_id": "0"}]}'
    
    mh1h2body3 ='{"flow": [{"id": "6","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": "6","table_id": "0"}]}'
        h1h3body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'   
                '{"ethernet-type": {"type": "2048"}},'
                 '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "4"},"order": "0"}]}}]},'
                '"priority": "101","cookie": "1","table_id": "0"}]}'    
    
        mh1h3body1 ='{"flow": [{"id": "1","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
               '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "4"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "1","table_id": "0"}]}'
    
               h1h3body2 ='{"flow": [{"id": "5","match": {"ethernet-match":'   
               '{"ethernet-type": {"type": "2048"}},'
                '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "2"},"order": "0"}]}}]},'
                '"priority": "100","cookie": "5","table_id": "0"}]}'
    
              mh1h3body2 ='{"flow": [{"id": "5","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
             '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "2"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "5","table_id": "0"}]}'
    
                h1h3body3 ='{"flow": [{"id": "6","match": {"ethernet-match":'           
               '{"ethernet-type": {"type": "2048"}},'
               '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "3"},"order": "0"}]}}]},'
                '"priority": "99","cookie": "6","table_id": "0"}]}'
    
                mh1h3body3 ='{"flow": [{"id": "6","match": {"ethernet-match":'  
               '{"ethernet-type": {"type": "2048"}},'
                '"ipv4-source":"10.0.0.1/32","ipv4-destination": "10.0.0.3/32"},'
                '"instructions": {"instruction": [{"order": "0",'
                '"apply-actions": {"action": [{"output-action": {'
                '"output-node-connector": "3"},"order": "0"}]}}]},'
                '"priority": "102","cookie": "6","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/1', body=mh1h4body1, method='PUT',headers=headers)
    
    
        time.sleep(0.1)
    
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1', body=h1h4body1, method='PUT',headers=headers)
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/5', body=mh1h4body2, 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/5', body=h1h4body2, 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/6', body=mh1h4body3, 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/6', body=h1h4body3, 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/1', body=mh1h2body1, method='PUT',headers=headers)
    
    
        time.sleep(0.1)
    
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1', body=h1h2body1, method='PUT',headers=headers)
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/5', 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/5', body=h1h2body2, 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/6', body=mh1h2body3, 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/6', body=h1h2body3, 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/1', body=mh1h3body1, method='PUT',headers=headers)
    
    
        time.sleep(0.1)
    
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1', body=h1h3body1, method='PUT',headers=headers)
            response, content = http.request(uri='http://127.0.01:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/5', body=mh1h3body2, 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/5', body=h1h3body2, 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/6', body=mh1h3body3, 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/6', body=h1h3body3, method='PUT',headers=headers)
           print(content.decode())
           odl = OdlUtil('127.0.0.1', '8181')
           odl.install_flow()
    

    代码大概思路:

    主机h1发往主机h2h3h4,只在途中经过交换机1的时候进行择路(拿h1与h2举例)
    假设在0~1秒有10个包经过,s1的端口2的权重为102,1秒后,s1的端口2的权重为101,s1的端口3的权重为102,1秒后,s1的端口2的权重为101,s1的端口2的权重为100,s1的端口4的权重为102,1秒后,s1的端口4的权重为99,这样循环。。。。。

    四、课程感想
    计算机的各个领域是相互贯通的,要联系学习,增强自主学习能力和查阅资料能力、动手能力。

    了解了
    什么是 SDN ,SDN 的基本思想、特点
    有哪些控制器,控制层和数据层的通信标准协议
    分布式控制器的几种扩展方式
    ODL设计的三个层次
    SDN 的应用领域
    openflow多级流表机制的优点
    ryu控制器
    onos控制器
    opendaylight控制器

    接触了
    SDNLAB 等几个优质的学习网站
    网络相关知识

    学会了
    安装mininet
    用字符命令生成拓扑并测试连通性
    用可视化界面生成拓扑并测试连通性
    用Python脚本生成Fat-tree型的拓扑
    安装floodlight
    生成拓扑并连接控制器floodlight,利用控制器floodlight查看图形拓扑
    利用字符界面下发流表,通过测试联通性,来验证openflow的hardtime机制
    利用OVS命令下发流表,实现VLAN功能
    利用OVS命令查看流表
    Wireshark抓包验证
    借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发的流表
    利用ODL下发组表、流表,实现建议负载均衡
    利用Wireshark验证负载均衡的实现
    学会了p4语言

  • 相关阅读:
    题解 CF36B【Fractal】
    21清北学堂腾飞营游记
    canvas小试牛刀
    ES度量聚合(ElasticSearch Metric Aggregations)总结
    Mybatis中设计模式的运用
    Mybatis源码-SqlSession(二)
    Mybatis源码-sqlSessionFactory(一)
    Redis6.0多线程模型总结
    RocketMQ中的CommitLog、ConsumeQueue、indexFile、offsetTable以及多种偏移量对比
    SpringBoot——自动配置原理
  • 原文地址:https://www.cnblogs.com/piep/p/8343097.html
Copyright © 2020-2023  润新知