---
# System prepended metadata

title: P4 03
tags: [P4]

---

# 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`