Open vSwitch中的報文跟蹤

2021-09-24 23:00:12 字數 2642 閱讀 4243

open vswitch (ovs)是一種可程式設計的軟體交換機,可以在每個報文級別執行操作。本文件介紹如何使用跟蹤工具了解資料報在通過資料平面時發生了哪些處理。

ovs-vswitchd(8)手冊頁描述了ofproto/trace命令,在open vswitch中跟蹤的基本用法。對於能夠在ovn 邏輯交換機中跟蹤資料報,類似於ofproto/trace的工具,請參見ovn-trace(8)_。

為了理解該工具,讓我們使用以下流flow作為例子:

table=3,ip,tcp,tcp_dst=80,action=output:2

table=2,ip,tcp,tcp_dst=22,action=output:1

table=0,in_port=3,ip,nw_src=192.0.2.0/24,action=resubmit(,2)

table=0,in_port=3,ip,nw_src=198.51.100.0/24,action=resubmit(,3)

:

如果無法使用"真實"的ovs環境,可以使用ovs-sandbox,如官方文件:/tutorials/ovs-advanced中所述,它也提供了額外的跟蹤示例。

第一行在table 3中新增了乙個規則,該規則在匹配目標埠為80(http)的tcp/ip報文。如果報文匹配,則動作是將報文輸出到openflow 埠2上。

第二行類似,但是匹配的目的地埠為22(ssh)。如果報文匹配,動作是將報文輸出到openflow 埠1。

接下來的兩行與源ip位址匹配。如果匹配,則報文被重新提交到指定的表table,其由動作中的resubmit的引數確定。

現在,讓我們看看來自ip位址192.0.2.2,目的埠號為22的報文是否真正轉到openflow 埠1:

flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=22,tcp_flags=0

bridge("br0")

-------------

0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768

resubmit(,2)

2. tcp,tp_dst=22, priority 32768

output:1

final flow: unchanged

megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=22

datapath actions: 1

第一行是trace命令。br0是報文所要經過的網橋。以下引數描述報文本身。例如,nw_src欄位與ip源位址匹配。所有的報文字段都很好描述在ovs-fields(7)_手冊頁中。

第二行顯示由之前命令列描述的報文中抽象出來的流。未指定的報文字段歸零。

接下來的幾行顯示了報文通過br0網橋的旅程。我們看到了,在table 0 中,字段匹配的openflow流flow,及其優先順序,然後是它的動作。在當前的情況下,我們看到與此報文匹配的流flow將報文重新提交到table 2中。"resubmit"動作導致在openflow表 table 2中進行第二次查詢,即以下以"2"開頭的幾行。在第二次查詢中,我們看到與報文匹配的流flow將報文輸出到openflow的埠 #1。

總之,跟蹤流flow條目及其動作直到最後的決定是可能的。最後,跟蹤工具顯示megaflow資訊,其包含了所有相關的匹配字段,以及最後的資料路徑動作。

讓我們看看以上的報文但是tcp目的埠修改為80之後會發生什麼情況:

flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=80,tcp_flags=0

bridge("br0")

-------------

0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768

resubmit(,2)

2. no match.

drop

final flow: unchanged

megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=0x40/0xffc0

datapath actions: drop

在第二部分的幾行中,在表table 0 中,你可以看到報文匹配規則的源ip位址,所以它被重新提交到表table 2,如前所示。但是,它不符合table 2中的任何規則。當報文與流表中的任何規則都不匹配,稱為表未命中。openvswitch交換機的未命中行為可配置,這取決於正在使用的openflow版本。在此示例中,預設動作是丟棄此報文。

Open vSwitch的相關原理與配置

在前面我們介紹了傳統裝置與sdn裝置的設計區別,這裡首先總結這兩種裝置的工作方式 所有裝置執行相同的協議,通過協議資訊交流生成 表。這裡就具體的裝置來說 1 hub 集線器 基於物理埠進行 所採用的策略就是洪氾 flood 2 l2 switch 二層交換機 基於mac位址進行 能夠將mac位址與埠...

java socket報文通訊 報文的封裝

什麼是報文這裡我就不在闡述了,不清楚的朋友可以自己去查資料。我們今天要談的報文主要友以下幾個部分組成 3位同步校驗位 8位報文長度 報文頭 報文體 32位 md5校驗位 基本格式如下 0x110x120x1300000232020420141223 14122301000815217010001張三...

Vlan 中 Tag Untag 報文處理

為了理解vlan內報文的 就必須要知道交換機對於不同vlan報文的tag untag的處理原則。首先,需要明確一點就是,在交換機的內部,為了快速高效的處理,報文都是帶tag 的。其實,這點很好理解,因為交換機上很可能會配置多個vlan,那不同vlan流量區分只有依靠tag標籤。下面從報文入和報文出兩...