實驗5:開源控制器實踐——POX


實驗5:開源控制器實踐——POX

forwarding.hub模塊

h1 ping h2時,h3處同樣收到icmp報文

image-20211006180714469

h1 ping h3時,h2處同樣收到icmp報文

image-20211006180748171

由於hub模塊采用洪泛轉發,所以在ping特定主機時,交換機會向所有端口洪泛轉發,故可以在另一台主機處也會收到icmp報文。

forwarding.l2_learning

h1 ping h2時,h2處收到icmp報文,h3處則沒有

image-20211006180859172

h1 ping h3時,h3處收到icmp報文,h2處則沒有

image-20211006180947859

可以看到,交換機對進來的包進行了學習,所以從相應的端口發出,故只有目的主機可以抓取到報文

L2_learning模塊程序流程圖

image-20211008110643643

進階要求

創建拓撲,並刪除流表,使得所有主機無法ping通

image-20211007132910591

創建文件SendFlowInSingle3.py

from pox.core import core
import pox.openflow.libopenflow_01 as of
from pox.openflow.of_json import *


def _handle_ConnectionUp(event):
    msg = of.ofp_flow_mod()
    msg.priority = 1
    msg.match.in_port = 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()
    msg.priority = 1
    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()
    msg.priority = 1
    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.openflow.addListenerByName("ConnectionUp", _handle_ConnectionUp)

命令行輸入./pox.py SendFlowInSingle3

查看流表,並測試pingall

image-20211008101855762

看到流表下發成功,以及所有節點ping通,沒有出現丟包

總結

本次作業難度較以往提升,一個是需要學習POX控制器,另外是需要對流表有一定的熟悉。本次實驗遇到了兩個難題,如下:

  • 在使用POX組件進行流表下發時,發現無法下發流表,詢問同學之后了解到在生成拓撲時,需要指定openflow協議為1.0,才可以成功下發流表,但是一開始使用miniedit進行拓撲搭建時,又遇到POX端口沖突的情況。
  • 在編寫代碼進行流表下發時,按照老師pdf的通過匹配目的IP,進行流表下發,但是之后遇到問題,拓撲還是無法ping通。懷疑問題在於arp報文沒有洪泛轉發,但是不了解如何進行流表下發,使得arp報文可以進行洪泛轉發。最后直接編寫代碼,分別將交換機三個端口輸入的包向其他兩個端口發送出去,使得拓撲可以ping通。

經過本次實驗,發現自己對於流表的了解還不夠,之后還需再多閱讀相關材料,進行學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM