uSID:SRv6のSID圧縮¶
Read in English · Leer en español
SRv6に対する初期の批判の1つがオーバーヘッドでした。SIDは1つあたり128ビット(16バイト)あり、5つのSIDからなるセグメントリストは、すべてのパケットに80バイトを追加します。**マイクロSID(uSID)**は、複数のセグメント命令を128ビットのSID 1つに詰め込むことで、この問題を解決します。
課題¶
従来のSRv6では、セグメントリストのホップごとに16バイトかかります。
Classic SRv6 (5 SIDs = 80 bytes overhead):
┌──────────────────────────────────────────────┐
│ SRH: Segment List │
│ [0]: fc00:0:5::1 (16 bytes) │
│ [1]: fc00:0:4::1 (16 bytes) │
│ [2]: fc00:0:3::1 (16 bytes) │
│ [3]: fc00:0:2::1 (16 bytes) │
│ [4]: fc00:0:1::1 (16 bytes) │
│ Total: 80 bytes │
└──────────────────────────────────────────────┘
短いパケットや遅延に敏感なトラフィックでは、このオーバーヘッドは無視できません。
解決策:マイクロSID(uSID)¶
uSID(RFC 9800)は、128ビットのコンテナ1つに最大6つのマイクロ命令を詰め込みます。
uSID Container (6 micro-SIDs = 16 bytes total!):
┌──────────────────────────────────────────────┐
│ Single 128-bit IPv6 Address: │
│ │
│ fcbb:bbbb:0001:0002:0003:0004:0005:0006 │
│ ├──┬────┤├──┤├──┤├──┤├──┤├──┤├──┤ │
│ │ Block ││uS1││uS2││uS3││uS4││uS5││uS6│ │
│ │(32bit)││16b││16b││16b││16b││16b││16b│ │
│ Total: 16 bytes! │
└──────────────────────────────────────────────┘
構造¶
| 要素 | サイズ | 説明 |
|---|---|---|
| uSID Block | 32ビット | ドメイン内のすべてのuSIDに共通のプレフィックス(例:fcbb:bbbb) |
| uSID | 各16ビット | ノードとビヘイビアを識別する個々のマイクロ命令 |
| End-of-Container | 16ビット(0000) | コンテナ内の有効なuSIDの終わりを示す |
動作の仕組み¶
uSIDコンテナの処理は、シンプルな**シフト&ルックアップ(shift-and-lookup)**です。
ステップ1 - Ingressが受信:
DA = fcbb:bbbb:0001:0002:0003:0000:0000:0000
^^^^
アクティブuSID → ノード1
ステップ2 - ノード1がuSID 0001を処理し、左にシフト:
DA = fcbb:bbbb:0002:0003:0000:0000:0000:0000
^^^^
アクティブuSID → ノード2
ステップ3 - ノード2がuSID 0002を処理し、左にシフト:
DA = fcbb:bbbb:0003:0000:0000:0000:0000:0000
^^^^
アクティブuSID → ノード3
ステップ4 - ノード3がuSID 0003を処理し、左にシフト:
DA = fcbb:bbbb:0000:0000:0000:0000:0000:0000
^^^^
End-of-Container (0000) → SRHの次のエントリへ
オーバーヘッドの比較¶
| シナリオ | 従来のSRv6 | uSID | 削減率 |
|---|---|---|---|
| SID 3つ | 48バイト | 16バイト | 67% |
| SID 6つ | 96バイト | 16バイト | 83% |
| SID 10個 | 160バイト | 32バイト(コンテナ2つ) | 80% |
| SID 12個 | 192バイト | 32バイト(コンテナ2つ) | 83% |
16バイトで6ホップ
uSIDコンテナ1つで、従来のSRv6がSID 1つに使うのと同じ領域に、最大6つのセグメント命令をエンコードできます。これにより、オーバーヘッドの点でSRv6はMPLSのラベルスタックと同等か、それ以上になります。
uSIDとG-SRv6¶
2つの圧縮方式が登場し、現在はRFC 9800の下で統一されています。
| 項目 | uSID(NEXT-C-SID) | G-SRv6(REPLACE-C-SID) |
|---|---|---|
| 提案元 | Cisco、Bell Canada | China Mobile、Huawei |
| 処理方式 | シフト&ルックアップ | リプレース&ルックアップ |
| uSIDのサイズ | 16または32ビット | 16または32ビット |
| RFC | RFC 9800 | RFC 9800 |
| 採用状況 | 世界の複数の事業者 | 世界の複数の事業者 |
どちらもRFC 9800(SRv6 SID Compression)で標準化されており、相互運用性が確保されています。
設定例¶
導入状況¶
複数の事業者がSRv6 uSIDの導入を公表しています。公開された発表の一覧と出典へのリンクはReal-World Deployments (英語) にまとめています。
関連ページ¶
- SRHとパケットウォーク — SRHがどう処理されるか
- SIDの構造 — 従来のSIDのフォーマット
- SRv6 vs SR-MPLS — オーバーヘッドを含めた両者の比較
- Real-World Deployments — uSIDを運用している事業者 (英語)
- Cisco IOS-XR — IOS-XRでのuSID Locatorの設定 (英語)
- Cisco IOS-XE — IOS-XEでのF3216 uSIDの設定 (英語)
- Arista EOS — Arista EOSのuNとuAのサポート (英語)
- netlab Labs — すぐに使えるラボでuSIDを試す (英語)
参考文献¶
- RFC 9800 - Compressed SRv6 Segment List Encoding - SRv6の圧縮方式としてNEXT-C-SIDとREPLACE-C-SIDのフレーバーを定義する標準化RFC
- draft-filsfils-spring-net-pgm-extension-srv6-usid - SRv6 uSID Instruction - マイクロSID(uSID)のネットワークプログラミング拡張を最初に提案したIETFドラフト
- Bell Canada SRv6-uSID Deployment (PDF) - Bell CanadaにおけるSRv6 uSIDの商用運用についてのDaniel Voyer氏の講演資料 (英語)
- Segment Routing - SRv6 uSID L3VPN Interoperability - segment-routing.netによるSRv6 uSID L3VPNのマルチベンダー相互接続デモ (英語)