通用網路虛擬化封裝 (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 位元 |
Google Cloud專屬 GENEVE 選項
GENEVE 標頭的選項採用類型長度值 (TLV) 格式。也就是說,每個選項都會編碼為類型 ID、指出值大小的長度欄位,以及值本身。這個格式具有彈性和擴充性,可新增選項,不會中斷現有實作項目。以下各節說明選項的順序和數量。請注意,隨著產品發展,選項數量和順序可能會有所不同。因此,為確保裝置實作方式向前相容,請根據 TLV 欄位剖析 GENEVE 標頭。
以下是 Google Cloud 專屬的 GENEVE 選項:
- 聯播網 ID (聯播網 Cookie)
- 端點 ID (端點 Cookie)
- 付款資料 ID
網路 ID
網路 ID 選項 (也稱為「網路 Cookie」) 可識別與 Google Cloud中 GENEVE 封裝流量相關聯的虛擬網路。這個選項由選項類別 0x0132 (Google) 和類型 1 (網路 ID) 識別。
選項資料包含 32 位元,其中前 28 位元代表不透明的網路 ID。下圖和表格說明其餘 4 位元的用途。
下圖顯示 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=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| 選項類別 | 識別定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 識別類別中的選項類型。值 0x1 代表「聯播網 ID」選項。詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制項標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。網路 ID 酬載為 32 位元 (4 個位元組),因此這個選項的長度設為 1。 | 5 位元 |
| 網路 Cookie | 不透明的網路 Cookie,用於識別虛擬網路。 | 28 位元 |
| R | 保留供日後實作。傳輸時必須設為零 (0),接收時則必須忽略。 | 2 位元 |
| T | 指出封裝封包的 TLS 卸載。未使用。 | 1 位元 |
| D | 表示原始封包的方向。零 (0) 代表原始鏡像虛擬機器 (VM) 上的輸入封包,一 (1) 則代表輸出封包。 | 1 位元 |
端點 ID
端點 ID 選項 (又稱「端點 Cookie」) 可唯一識別擷取點,也就是 VM 上的網路介面控制器。 Google Cloud這個選項由選項類別 0x0132 (Google) 和類型 2 (端點 ID) 識別。選項資料是不透明的 128 位元值。
下圖顯示 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=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| 選項類別 | 識別定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 識別類別中的選項類型。值 0x2 會指定端點 ID 選項。詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制項標記。這些位元在傳輸時必須為零 (0),且在接收時必須忽略。 | 3 位元 |
| Len | 酬載長度,以 4 位元組為單位累計。端點 ID 酬載為 128 位元 (16 位元組),因此這個選項的長度會設為 4。 | 5 位元 |
| 端點 Cookie | 擷取點 (VM NIC) 的不透明 ID。 | 128 位元 |
付款資料 ID
設定檔 ID 選項會識別套用至流量的鏡像安全性設定檔群組。這個選項由選項類別 0x0132 (Google) 和類型 3 (設定檔 ID) 識別。選項資料是 64 位元 ID,對應於安全性設定檔群組中的 data_path_id 欄位。目標裝置可能會根據設定檔群組 ID 強制執行安全性政策。
下圖顯示 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=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖顯示的選項欄位:
| 欄位 | 說明 | 欄位長度 |
|---|---|---|
| 選項類別 | 識別定義選項的機構或實體。
值 0x0132 會將 Google 指定為定義實體。 |
16 位元 |
| 類型 | 識別類別中的選項類型。值 0x3 代表「設定檔 ID」選項。詳情請參閱「通道選項」。 |
8 位元 |
| R | 保留供日後使用的選項控制項標記。這些位元在傳輸時必須為零,且在接收時必須忽略。 | 3 位元 |
| Len | 選項酬載的長度,以 4 位元組為單位遞增。設定檔 ID 酬載為 64 位元 (8 個位元組),因此這個選項的長度設為 2。 | 5 位元 |
| 付款資料 ID | 鏡像安全性設定檔群組的 ID。 | 64 位元 |
網路安全整合服務的 GENEVE 標頭格式
本節說明網路安全整合服務使用的 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
下表說明上圖所示的 IPv4 標頭欄位:
| 欄位 | 說明 |
|---|---|
| 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
本節說明網路安全整合服務 (特別是頻外整合) 使用的 GENEVE 標頭格式。頻帶外整合會使用 GENEVE 通道封裝及傳送鏡像封包。封包會傳送至收集器的內部負載平衡器虛擬 IP 位址 (VIP),並註解 Google Cloud專屬中繼資料,例如網路 Cookie。
頻外整合使用的 Google Cloud特定 GENEVE 選項包括網路 Cookie、端點 Cookie 和設定檔 ID。詳情請參閱 Google Cloud專屬的 GENEVE 選項。
下圖顯示如何在頻外整合中使用 Google Cloud專屬的 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=0| Opt len |O|C| Rsvd | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) = 0 | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option class=0x0132 (Google) | Type=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
頻帶內整合 GENEVE
頻內整合會使用 GENEVE 通道封裝及傳送攔截的封包。生產者的內部負載平衡器虛擬 IP 位址 (VIP) 會接收以 Google Cloud專屬中繼資料 (例如網路 Cookie) 註解的封包。
頻內整合會使用下列 Google Cloud專屬的 GENEVE 選項:網路 Cookie、端點 Cookie 和設定檔 ID。詳情請參閱 Google Cloud專屬的 GENEVE 選項。
頻內整合支援使用邏輯雙向 GENEVE 通道將封包重新注入原始端點,該通道由兩個單向 GENEVE 通道組成。製作人網路設備攔截並檢查封包後,可以捨棄或重新注入封包。如要重新注入封包,設備會執行下列作業:
- 使用原始 GENEVE 標頭 (相同選項) 重新封裝封包。
- 交換外部 IP 標頭中的來源和目的地地址。
- 確認檢查碼正確無誤。
下圖顯示頻內整合如何使用 Google Cloud專屬的 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=0| Opt len |O|C| Rsvd | Protocol type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Virtual network identifier (VNI) = 0 | Rsvd. |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=01 |R|R|R| Len=1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Cookie |R|R|T|D|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=02 |R|R|R| Len=4 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Endpoint Cookie +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Class=0x0132 (Google) | Type=03 |R|R|R| Len=2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Profile ID +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
GENEVE 封裝和 MTU 規定
最大傳輸單位 (MTU) 是乙太網路訊框內可容納的最大 IP 封包大小 (以位元組為單位),包括 IP 標頭、第 4 層通訊協定標頭和第 4 層資料。詳情請參閱「傳輸單位上限」。
在 Google Cloud 網路中,允許的 MTU 為 8896 位元組。不過,如果是網路安全整合服務,則必須保留 396 個位元組,做為 GENEVE 封裝負載。這項保留需求對消費者和生產者網路都有影響:
消費者網路 MTU:消費者網路的 MTU 不得超過 8500 個位元組。這項限制可確保有足夠空間容納 GENEVE 額外負荷,且不會超過 MTU 上限。
生產端網路 MTU:生產端網路的 MTU 必須比消費端網路的 MTU 大至少 396 個位元組。這項配額可容納額外的 GENEVE 封裝。
如果 MTU 限制不足以容納 GENEVE 封裝,封包可能會遭到捨棄。這可能發生在虛擬網路層級或 VM 的作業系統中。