識別符號定位器定址 (ILA)

引言

識別符號定位器定址 (ILA) 是一種用於 IPv6 的技術,它區分網路節點的位置和身份。地址的一部分表示節點不可變的身份,另一部分表示節點可動態變化的位置。識別符號定位器定址可用於高效實現網路虛擬化中的疊加網路以及移動性用例的解決方案。

ILA 可以被認為是無需封裝即可實現疊加網路的一種方式。這是透過在資料包遍歷網路時對目的地址執行網路地址轉換來實現的。對網路而言,經過 ILA 轉換的資料包與任何其他 IPv6 資料包無異。例如,如果傳輸協議是 TCP,則經過 ILA 轉換的資料包看起來就像另一個 TCP/IPv6 資料包。這樣做的優點是 ILA 對網路是透明的,因此網路中的最佳化,如 ECMP、RSS、GRO、GSO 等,都可以正常工作。

ILA 協議在 Internet-Draft draft-herbert-intarea-ila 中有描述。

ILA 術語

  • 識別符號

    一個數字,用於標識網路中可定址節點,與其位置無關。ILA 識別符號是六十四位的值。

  • 定位器

    路由到物理主機的網路字首。定位器提供被定址節點的拓撲位置。ILA 定位器是六十四位的字首。

  • ILA 對映

    ILA 識別符號到定位器(或到定位器和元資料)的對映。ILA 域維護一個數據庫,其中包含域中所有目的地的對映。

  • SIR 地址

    由 SIR 字首(高六十四位)和識別符號(低六十四位)組成的 IPv6 地址。SIR 地址對應用程式可見,併為它們提供了一種獨立於位置定址節點的方式。

  • ILA 地址

    由定位器(高六十四位)和識別符號(低六十四位)組成的 IPv6 地址。ILA 地址永遠不會對應用程式可見。

  • ILA 主機

    能夠進行傳送或接收端 ILA 轉換的終端主機。

  • ILA 路由器

    執行 ILA 轉換並轉發轉換後資料包的網路節點。

  • ILA 轉發快取

    一種 ILA 路由器,僅維護對映的工作集快取。

  • ILA 節點

    能夠執行 ILA 轉換的網路節點。可以是 ILA 路由器、ILA 轉發快取或 ILA 主機。

操作

ILA 有兩個基本操作

  • 將 SIR 地址轉換為 ILA 地址。這在進入 ILA 疊加層時執行。

  • 將 ILA 地址轉換為 SIR 地址。這在從 ILA 疊加層出站時執行。

ILA 既可以部署在終端主機上,也可以部署在網路中的中間裝置上;分別由“ILA 主機”和“ILA 路由器”提供。這兩種部署點的配置和資料路徑有所不同。

下圖說明了資料包透過 ILA 的流程,並展示了 ILA 主機和路由器。

 +--------+                                                +--------+
 | Host A +-+                                         +--->| Host B |
 |        | |              (2) ILA                   (')   |        |
 +--------+ |            ...addressed....           (   )  +--------+
            V  +---+--+  .  packet      .  +---+--+  (_)
(1) SIR     |  | ILA  |----->-------->---->| ILA  |   |   (3) SIR
 addressed  +->|router|  .              .  |router|->-+    addressed
 packet        +---+--+  .     IPv6     .  +---+--+        packet
                /        .    Network   .
               /         .              .   +--+-++--------+
 +--------+   /          .              .   |ILA ||  Host  |
 |  Host  +--+           .              .- -|host||        |
 |        |              .              .   +--+-++--------+
 +--------+              ................

傳輸校驗和處理

當地址被 ILA 轉換時,偽首部中包含轉換後地址的封裝傳輸校驗和在傳輸過程中可能會變得不正確。這對於處理校驗和的中間裝置(包括網絡卡中的校驗和解除安裝)來說是個問題。有三種處理方法:

  • 不採取任何措施 允許校驗和在傳輸過程中不正確。在接收方驗證校驗和之前,

    必須完成 ILA 到 SIR 地址的轉換。

  • 調整傳輸校驗和

    執行 ILA 轉換時,會解析資料包,如果發現傳輸層校驗和,則會根據轉換後的地址進行調整,以反映正確的校驗和。

  • 校驗和中性對映

    當地址被轉換時,其差異可以透過資料包中被校驗和覆蓋的其他部分進行抵消。使用識別符號的低十六位。此方法是首選,因為它不需要解析 IP 頭之外的資料包,並且在大多數情況下,調整可以預先計算並隨對映儲存。

請注意,校驗和中性調整會影響識別符號的低十六位。當在出口處進行 ILA 到 SIR 地址轉換時,低位會恢復到原始值,從而恢復識別符號的原始傳送狀態。

識別符號型別

ILA 定義了用於不同用例的各種識別符號型別。

定義的型別有

0: 介面識別符號

1: 本地唯一識別符號

2: IPv4 地址的虛擬網路識別符號

3: IPv6 單播地址的虛擬網路識別符號

4: IPv6 組播地址的虛擬網路識別符號

5: 非本地地址識別符號

在當前核心 ILA 實現中,只支援本地唯一識別符號 (LUID)。LUID 允許使用通用、無格式的 64 位識別符號。

識別符號格式

核心 ILA 支援識別符號中兩個可選的格式化欄位:“C-bit”和“識別符號型別”。這些欄位的存在由配置決定,如下所示。

如果識別符號型別存在,它佔據識別符號的三個最高位。可能的值在上表中給出。

如果 C-bit 存在,它用於指示已完成校驗和中性對映。C-bit 只能在 ILA 地址中設定,不能在 SIR 地址中設定。

在最簡單的格式中,識別符號型別、C-bit 和校驗和調整值都不存在,因此識別符號被視為一個無結構的六十四位值。

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Identifier                         |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

可以使用 neutral-map-auto 配置校驗和中性調整始終存在。在這種情況下,沒有 C-bit,但校驗和調整位於低 16 位。識別符號仍為六十四位。

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Identifier                         |
|                               +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |  Checksum-neutral adjustment  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

C-bit 可用於明確指示已對 ILA 地址應用校驗和中性對映。格式為:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     |C|                    Identifier                         |
|     +-+                       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |  Checksum-neutral adjustment  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

識別符號型別欄位可以存在以指示識別符號型別。如果不存在,則根據對映配置推斷型別。校驗和中性調整可以自動與識別符號型別一起使用,如下圖所示:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type|                      Identifier                         |
+-+-+-+                         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |  Checksum-neutral adjustment  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

如果識別符號型別和 C-bit 可以同時存在,則識別符號格式將是:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type|C|                    Identifier                         |
+-+-+-+-+                       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               |  Checksum-neutral adjustment  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

配置

配置 ILA 對映有兩種方法。一種是使用 LWT 路由,另一種是 ila_xlat(從 NFHOOK PREROUTING 鉤子呼叫)。ila_xlat 旨在用於 ILA 主機的接收路徑。

ILA 路由器也已在 XDP 中實現。其描述超出了本文件的範圍。

ILA LWT 路由的用法是:

ip route add DEST/128 encap ila LOC csum-mode MODE ident-type TYPE via ADDR

目的地 (DEST) 可以是 SIR 地址(用於 ILA 主機或入口 ILA 路由器)或 ILA 地址(出口 ILA 路由器)。LOC 是六十四位定位器(格式為 W:X:Y:Z),它覆蓋目的地地址的高六十四位。校驗和模式 (Checksum MODE) 是“no-action”、“adj-transport”、“neutral-map”和“neutral-map-auto”之一。如果設定了 neutral-map,則 C-bit 將存在。識別符號型別 (Identifier TYPE) 是“luid”或“use-format”之一。在 use-format 的情況下,識別符號型別欄位存在,並且有效型別從中獲取。

ila_xlat 的用法是:

ip ila add loc_match MATCH loc LOC csum-mode MODE ident-type TYPE

MATCH 指示必須匹配的傳入定位器才能應用轉換。LOC 是覆蓋目的地址高六十四位的定位器。MODE 和 TYPE 的含義與上述相同。

一些示例

# Configure an ILA route that uses checksum neutral mapping as well
# as type field. Note that the type field is set in the SIR address
# (the 2000 implies type is 1 which is LUID).
ip route add 3333:0:0:1:2000:0:1:87/128 encap ila 2001:0:87:0 \
     csum-mode neutral-map ident-type use-format

# Configure an ILA LWT route that uses auto checksum neutral mapping
# (no C-bit) and configure identifier type to be LUID so that the
# identifier type field will not be present.
ip route add 3333:0:0:1:2000:0:2:87/128 encap ila 2001:0:87:1 \
     csum-mode neutral-map-auto ident-type luid

ila_xlat configuration

# Configure an ILA to SIR mapping that matches a locator and overwrites
# it with a SIR address (3333:0:0:1 in this example). The C-bit and
# identifier field are used.
ip ila add loc_match 2001:0:119:0 loc 3333:0:0:1 \
    csum-mode neutral-map-auto ident-type use-format

# Configure an ILA to SIR mapping where checksum neutral is automatically
# set without the C-bit and the identifier type is configured to be LUID
# so that the identifier type field is not present.
ip ila add loc_match 2001:0:119:0 loc 3333:0:0:1 \
    csum-mode neutral-map-auto ident-type use-format