瞭解 GENEVE 格式
通用網路虛擬化封裝 (GENEVE) 是一種網路封裝通訊協定,可使用額外的中繼資料封裝原始封包。這項額外的中繼資料有助於實現彈性且可擴充的網路虛擬化。
下圖顯示 GENEVE 封包的標頭格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Ver| Opt len |O|C| Rsvd. | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖所示的 GENEVE 標頭欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| Ver | GENEVE 通訊協定的版本。系統僅支援零 (0) 版本。 詳情請參閱「通道標頭欄位」。 | 2 位元 |
| Opt len | 選項欄位的長度,以 4 位元組的倍數表示,不含 8 位元組的固定通道標頭。 詳情請參閱「通道標頭欄位」。 | 6 位元 |
| O | 控制封包位元。詳情請參閱「通道標頭欄位」。 | 1 位元 |
| C | 關鍵選項位元。詳情請參閱「通道標頭欄位」。 | 1 位元 |
| Rsvd | 保留欄位,傳輸時必須為零 (0),接收時必須忽略。詳情請參閱「通道標頭欄位」。 | 6 位元 |
| 通訊協定類型 | 通訊協定類型允許乙太網路類型:IPv4 (0x0800) 或 IPv6 (0x86DD)。 |
16 位元 |
| 虛擬網路 ID (VNI) | 虛擬網路元素的專屬 ID。 VNI 設為零 (0)。詳情請參閱「GENEVE 選項」。 | 24 位元 |
| Rsvd | 保留欄位,傳輸時必須為零 (0),接收時必須忽略。詳情請參閱「通道標頭欄位」。 | 8 位元 |
ULL 虛擬私有雲網路中 Packet Mirroring 的 GENEVE 選項
GENEVE 標頭的選項採用類型長度值 (TLV) 格式。每個選項都會編碼,包含類型 ID、指出值大小的長度欄位,以及值本身。這個格式具有彈性和擴充性,可新增選項,不會中斷現有實作項目。以下各節說明這些選項。由於選項的數量和順序可能會變更,請根據 TLV 欄位剖析 GENEVE 標頭,確保裝置實作作業向前相容。
ULL Packet Mirroring 專用的 GENEVE 選項如下:
- 聯播網 ID (聯播網 Cookie)
- 時間戳記
- 網路穩定 ID
- 主要 IP 位址
網路 ID
網路 ID 選項 (又稱「網路 Cookie」) 可識別 ULL Packet Mirroring 中,與 GENEVE 封裝流量相關聯的虛擬網路。這個選項由選項類別 0x0132 (Google) 和類型 0x1 (網路 ID) 識別。
如果是 ULL Packet Mirroring,網路 Cookie 會設為零 (0)。選項資料包含 32 位元,前 31 位元為保留位元,最後一個位元則表示原始封包的方向。
ULL Packet Mirroring 使用修改後的網路 ID 選項。在這個版本中,除了方向位元和保留位元之外,所有位元都設為 0。如要進一步瞭解擷取點,請參閱「網路穩定 ID」。
下圖顯示 GENEVE 封包中的選項格式。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| Option 類別 | 定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 用於識別類別中的選項類型。0x1 值代表「Network ID」選項。詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。網路 ID 酬載為 32 位元 (4 個位元組),因此這個選項的長度設為 1。 | 5 位元 |
| 預留數 | 傳輸時必須設為零 (0),接收時則必須忽略。 | 31 位元 |
| D | 指出原始封包的方向。0 代表輸入,1 代表原始鏡像資源上的輸出封包。 | 1 位元 |
時間戳記
時間戳記選項會指出擷取點的原始封包擷取時間 (封包擷取或鏡像處理的 Compute Engine 執行個體)。這個選項由選項類別 0x0132 (Google) 和類型 0x0f (時間戳記) 識別。
下圖顯示 GENEVE 封包中的選項格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x0f |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Timestamp +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| Option 類別 | 定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 識別類別中的選項類型。0x0f 值會指定時間戳記選項。詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。時間戳記酬載為 64 位元 (8 個位元組),因此這個選項的長度設為 2。 | 5 位元 |
| 時間戳記 | 原始封包的擷取時間,以自 Epoch 時間起算的奈秒表示。奈秒精細程度不保證奈秒準確度。 | 64 位元 |
網路穩定 ID
「網路穩定 ID」選項會識別鏡像執行個體的網路。這個選項由選項類別 0x0132 (Google) 和類型 0x10 (網路穩定 ID) 識別。
下圖顯示 GENEVE 封包中的選項格式。網路穩定 ID 包含專案編號和網路 ID。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x10 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Project Number +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Network ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| Option 類別 | 定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 識別類別中的選項類型。這個值
0x10會指定「網路穩定 ID」選項。
詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。網路 ID 酬載為 64 位元 (8 個位元組),因此這個選項的長度設為 4。 | 5 位元 |
| 專案編號 | Google Cloud 專案的專案編號。 | 64 位元 |
| 網路 ID | ULL 虛擬私有雲網路的 ID。 | 64 位元 |
主要 IP 位址
「主要 IP 位址」選項會識別擷取點的 IP 位址 (封包擷取或鏡像處理的 Compute Engine 執行個體)。這個選項是由選項類別 0x0132 (Google) 和類型 0x11 (主要 IP 位址) 識別。
下圖顯示 GENEVE 封包中的選項格式。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=0x11 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Primary IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| Option 類別 | 定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 用於識別類別中的選項類型。值
0x11 指定「主要 IP 位址」選項。 |
8 位元 |
| R | 保留供日後使用的選項控制標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。IP 位址酬載為 32 位元 (4 個位元組),因此這個選項的長度設為 1。 | 5 位元 |
| 主要 IP 位址 | 擷取點的主要 IP 位址 (封包擷取或鏡像處理的 Compute Engine 執行個體 NIC)。 | 32 位元 |
GENEVE 標頭格式
本節說明 Packet Mirroring 針對 ULL 虛擬私有雲網路使用的 GENEVE 標頭格式。
IPv4 標頭
GENEVE 封包格式會在 IPv4 的 UDP 中封裝精簡的通道標頭。小型固定通道標頭提供控制資訊、基本功能和互通性。
下圖顯示 GENEVE 封包的 IPv4 標頭欄位。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version| IHL |Type of service| Total length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Identification |Flags| Fragment offset |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Time to live | Proto=17 (UDP)| Header checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖中 Google Cloud專用的 IPv4 標頭欄位。如要瞭解常見的 IPv4 標頭欄位,請參閱 RFC 8926。
| 欄位 | 說明 |
|---|---|
| Proto=17 (GENEVE 一律為 UDP) | 表示封裝的酬載使用 UDP 通訊協定。 |
| 來源位址 | 本機子網路的閘道 IP 位址。 |
| 目的地地址 | 客戶擁有的負載平衡器 VIP。 |
UDP 標頭
UDP RFC 0768 標頭會封裝資料,同時維持乙太網路和 IP 位址的無連線語意。此外,也會為執行等價多路徑 (ECMP) 的路由器提供熵。
下圖顯示封裝在 UDP 中的 GENEVE 封包標頭格式。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source port = <hash> | Dest port = 6081 (Geneve) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| UDP length | UDP checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖所示的 UDP 標頭欄位:
| 欄位 | 說明 |
|---|---|
| 來源通訊埠 | 整個 16 位元範圍的不透明雜湊。屬於單一封裝流程 (雙向) 的所有封包,其值都相同。 |
| 目的地通訊埠 | GENEVE 流量的指定目的地通訊埠編號,設為 6081。 |
| UDP 長度 | UDP 資料包的總長度,包括 UDP 標頭和封裝的 GENEVE 封包。 |
| UDP 核對和 | UDP 資料電報的檢查碼值,用於偵測錯誤。 |
GENEVE 選項
ULL 虛擬私有雲網路 Packet Mirroring 使用的 Google Cloud專屬 GENEVE 選項包括網路 Cookie、時間戳記、網路穩定 ID、主要 IP 位址和公平順序處理時間戳記。詳情請參閱「ULL 虛擬私有雲網路中 Packet Mirroring 的 GENEVE 選項」。
下圖顯示 Google Cloud專屬 GENEVE 選項如何用於 ULL 虛擬私有雲網路的 Packet Mirroring。
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Cookie |D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=0x0f |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Timestamp +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=0x10 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Project Number +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Network ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=0x11 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Primary IP Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=0x13 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Fair order processing timestamp +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
上圖中的 Opt len 代表選項欄位的長度,以 4 位元組的倍數表示。這個長度不包括 8 位元組的固定通道標頭。詳情請參閱「通道標頭欄位」。
GENEVE 封裝和 MTU 規定
最大傳輸單位 (MTU) 是指乙太網路框架內可容納的最大 IP 封包大小 (以位元組為單位),包括 IP 標頭、第 4 層通訊協定標頭和第 4 層資料。詳情請參閱「傳輸單位上限」。
ULL 虛擬私有雲網路的 MTU 上限為 1500 個位元組。不過,ULL Packet Mirroring 需要 308 個位元組,才能處理 GENEVE 封裝負載。為確保鏡像流量能完整傳送至收集器執行個體,收集器所在的網路 MTU 至少須為 1808 位元組 (標準流量 1500 位元組,加上 GENEVE 封裝負載 308 位元組)。
如果 MTU 限制不足以容納 GENEVE 封裝,封包可能會遭到捨棄。這可能發生在虛擬網路層級或作業系統中。