2015年8月24日 星期一

頻寬對Flow entry match的影響(測試中)

頻寬對Flow entry match的影響


Link頻寬限制對封包match是否會有影響?
在此做個小實驗探討一下
探討的情境概念圖如下 (這邊用個4 Switch的小拓樸就好)





情境探討

Host A 傳送封包到 Server A
Switch 1 對於該封包 設有往Switch 2以及 Switch3傳送的2條Flow entry (優先權相同)
Switch 1 - Switch 2的頻寬已滿,無法使用
Switch 1 - Switch 3的頻寬尚有
如果封包先match到往Switch2的Flow entry,頻寬已滿的情形下,封包是否會改走另一條Entry呢?又或者是等待Link釋出頻寬?或是直接DROP封包?


拓樸程式碼

(這邊也是用addHost的方式來當作Server)
(注意縮排對齊,python對縮排很計較統一性,請統一用Tab或空白)
#!/usr/bin/python
#coding:utf-8

#匯入可能用到的模組
from mininet.cli import CLI
from mininet.log import setLogLevel, info,error
from mininet.net import Mininet
from mininet.link import Link, TCLink, Intf
from mininet.topolib import TreeTopo
from mininet.util import quietRun
from mininet.node import RemoteController, OVSKernelSwitch


#把定義放在函數裡 Main的部分只要執行函數
def emptyNet():

    net = Mininet( controller=RemoteController )     #增加遠端的Controller

    info( '*** Adding controller\n' )                #設定Controller的參數(名稱、IP、Port)
    net.addController( 'c0',
                   controller=RemoteController, 
                   ip = "127.0.0.1", 
                   port=6633 )

    info( '*** Adding hosts\n' )
    #---------Add Host---------
    host_1 = net.addHost( 'host_1', 
                  ip='10.0.1.1', 
                  mac='00:00:00:00:00:01',
                  defaultRoute='via 10.0.1.254')


    info( '*** Adding servers\n' )
    #---------Add server(use host)---------
    server_1 = net.addHost( 'server_1', 
                  ip='10.0.4.1', 
                  mac='00:00:00:00:01:01',
                  defaultRoute='via 10.0.2.254')


       
    info( '*** Adding switch\n' )
    switch_1 = net.addSwitch( 'switch_1' )
    switch_2 = net.addSwitch( 'switch_2' )
    switch_3 = net.addSwitch( 'switch_3' )
    switch_4 = net.addSwitch( 'switch_4' )

    
    info( '*** Creating links\n' )
    #---------switch to switch---------
    net.addLink( switch_1, switch_2, cls=TCLink, bw=0.00002 ) #把SW1-SW2假定頻寬已滿(頻寬不能為0),這邊就設20bit
    net.addLink( switch_1, switch_3, cls=TCLink, bw=10) #設定頻寬為10 MB
    net.addLink( switch_2, switch_4, cls=TCLink, bw=10)
    net.addLink( switch_3, switch_4, cls=TCLink, bw=10)
  
    
    #---------host to switch---------
    net.addLink( host_1, switch_1 )


    #---------server to switch---------
    net.addLink( server_1, switch_4 )


   
    info( '*** Starting network\n')
    net.start()                        #啟動net

    info( '*** Running CLI\n' )
    CLI( net )                        #等待輸入命令

    info( '*** Stopping network' )
    net.stop()                        #關閉net

if __name__ == '__main__':
    setLogLevel( 'info' )
    emptyNet()                        #呼叫拓樸建立
    


本來想把頻寬設成0,當作已滿的頻寬,不過似乎不能這樣做阿XD
如果設定成0的話,會出現*** Error: "rate" is required.,接著會似乎會強制預設成10 MB
這邊就把頻寬設超小當作爆頻寬

查詢一下網路連接狀態
mininet> net

獲得的資訊是這樣
host_1 host_1-eth0:switch_1-eth3
server_1 server_1-eth0:switch_4-eth3
switch_1 lo:  switch_1-eth1:switch_2-eth1 switch_1-eth2:switch_3-eth1 switch_1-eth3:host_1-eth0
switch_2 lo:  switch_2-eth1:switch_1-eth1 switch_2-eth2:switch_4-eth1
switch_3 lo:  switch_3-eth1:switch_1-eth2 switch_3-eth2:switch_4-eth2
switch_4 lo:  switch_4-eth1:switch_2-eth2 switch_4-eth2:switch_3-eth2 switch_4-eth3:server_1-eth0
c0

用圖來表示的話,長這樣

(還有一條 server_1 server_1-eth0:switch_4-eth3,雖然說連線並不存在,不過目前不太清楚意義就是了)

查詢一下Flow table的狀態(有Contoller)
sh ovs-ofctl dump-flows switch_1

結果如圖


這時候Host A並沒有辦法連到Server A






(SDN Hub有內建wireshark,這邊先準備好,確認等等封包是走哪裡來的
$ sudo wireshark &

接下來我們加入flow entry,讓他有 1-2-4以及1-3-4兩組路徑(priority一樣)





沒有留言:

張貼留言