• 使用tcpdump驗證Hub模塊,h1 ping h2、h2和h3的tcpdump抓包結果截圖





  • 使用 tcpdump 驗證Switch模塊,h1 ping h2、h2和h3的tcpdump抓包結果截圖





  • L2_learning模塊代碼流程圖

進階作業

  • 相關代碼
from pox.core import core
import pox.openflow.libopenflow_01 as of
from pox.openflow.of_json import *
from pox.lib.addresses import IPAddr

log = core.getLogger()

class SendFlowInSingle3(object):
    def __init__(self):
    	core.openflow.addListeners(self)

    def _handle_ConnectionUp(self, event):
#設置數據包從端口1進,從端口2和端口3出
        msg = of.ofp_flow_mod() # 消息類型為flowmod,使用ofp_flow_mod()的方法向交換機來下發流表
        msg.priority = 1 #設置msg的優先級
        msg.match.in_port = 1  #匹配入端口,設置在端口1接收數據包
        msg.actions.append(of.ofp_action_output(port=2))  #指定出端口動作
        msg.actions.append(of.ofp_action_output(port=3))  #指定出端口動作
        event.connection.send(msg) 
 
        msg = of.ofp_flow_mod() # 使用ofp_flow_mod()的方法向交換機下發流表
        msg.priority = 1 #設置msg的優先級
        msg.match.in_port = 2  #匹配入端口
        msg.actions.append(of.ofp_action_output(port=1)) #指定出端口動作
        msg.actions.append(of.ofp_action_output(port=3))  #指定出端口動作
        event.connection.send(msg)

        msg = of.ofp_flow_mod()# 使用ofp_flow_mod()的方法向交換機下發流表
        msg.priority = 1 #設置msg的優先級
        msg.match.in_port = 3  #匹配入端口
        msg.actions.append(of.ofp_action_output(port=1))  #指定出端口動作
        msg.actions.append(of.ofp_action_output(port=2)) #指定出端口動作
        event.connection.send(msg)



def launch():
    core.registerNew(SendFlowInSingle3) #注冊SendFlowInSingle3的組件



  • 查看流表

個人總結
在運行SendFlowInSingle3.py時需要把這個文檔弄到pox下,不然會出現錯誤,感覺這次的進階比較難,只做了進階1,還是參考了同學們的代碼和老師的文件以及查找了一些資料大概了解,但是老師發的英文的文章看得有點吃力,這次的實驗主要是學習了pox的工作原理,通過驗證POX的forwarding.hub和forwarding.l2_learning模塊方式來初步學習POX控制器的使用方法,就是進階個人覺得難度比較大。