# P4 03 ## F74089020 龍帆軒 ### OVS Controller OVS全名 Openvswitch,是一個開源的交換器,也是實現網路虛擬化 SDN 的重要基礎,設計 OpenvSwitch 的目的是為了解決實體交換器存在的局限性,比實體交換器更低的成本和更高的工作效率,而 Openvswitch 本身佔用的資源也非常小,可以根據自己的選擇靈活的配置,可以對封包進行接收分析處理同時還支援標準的管理介面和協議,如 NetFlow,sFlow,SPAN,RSPAN 等。而OVS controller可以控制多個都是openflow協議下的交換器。 **Netflo**w: 一種網路監測功能,可以收集進入及離開網路界面的IP封包的數量及資訊。 **sFlow**: 運用取樣通訊協定並著重於處理個別資料封包,因此可以識別個別檔案是否已損壞或包含惡意程式碼。 **SPAN**:全名The Switched Port Analyzer,獲得了源埠的MAC位址後,會將流經該MAC位址的所有資料直接發往目標埠。 **RSPAN**:Remote SPAN,當某些源口做為目標口出現時,不處於同一交換機上 ![](https://i.imgur.com/OEszSCr.png) 圖(一) : OVS 模組架構圖   ![](https://i.imgur.com/3Plvtjd.png) 圖(二) : ICMP protocol ICMP 全名 Internet Control Message Protocol是網際網路協定套組的核心協定之一。它用於網際網路協定(IP)中傳送控制訊息,提供可能發生在通訊環境中的各種問題回饋。 ### P4入門 ![](https://i.imgur.com/xpVx2uU.gif) 圖(三)封包結構   P4中有5個語言組件: **Headers、parsers、Tables、Action、control program**。 **headers**:headers有分為兩種,一種是packet header另一種是metadata。 **Parsers**:一個p4程式往往定義了許多headers,但不是全部的headers都會對封包進行操作。Parser的工作就是會產生哪些封包進行了操作的intermediate representation。 **Tables**:當table中的欄位與封包配對成功時,就會執行相對應的工作。如果沒也成功配對則會標記成miss。 **Actions**:主要分為primitive action與compound action。Primitive actions包括封包的修改、基本運算、hash運算等等。Compound actions通常都由用戶自己定義。 ![](https://i.imgur.com/TzKlwdU.png) 圖(四) : p4 程式結構   ### 進行簡單的P4 實驗 要進行basic forwarding ,就是將ipv4封包往前傳送 使用的topology為下圖 ![](https://i.imgur.com/1hQ68ap.png) 編譯basic.p4 輸入```make run``` ![](https://i.imgur.com/chcy6U5.png) 圖(三) : makefile 檔案 看到最後一行include了utils資料夾裡的makefile 可以看到執行的是一個寫好的script Script會執行一個由python寫好的run_topology.py ![](https://i.imgur.com/JzU0oiL.png) 圖(四) : 找到make run 程式碼對應的動作 ```make run```指令將會 1. 編譯basic.p4 2. 建立mininet,其中有4個host,各自連接一個switch 3. Host的IP分別為10.0.1.1, 10.0.2.2, 10.0.3.3,10.0.4.4 ![](https://i.imgur.com/rASiHG6.png) 圖(五) : 執行完make run 這時候看到使用的switch已經不是上次的預設ovs switch ![](https://i.imgur.com/rPhVwTL.png) 圖(六) : configuredP4Runtime switch 此時如果輸入```h1 ping h2``` 成功的話會顯示道有收到封包 ![](https://i.imgur.com/gvGCRzC.png) 圖(七) : 成功收到封包 失敗就不會顯示 ![](https://i.imgur.com/S1S8wAz.png) 圖(八) : 沒有收到封包 ###### tags: `P4`