エンジニア選書シリーズ実践 SONiC入門

[表紙]実践 SONiC入門

紙版発売

B5変形判/368ページ

定価3,520円(本体3,200円+税10%)

ISBN 978-4-297-14943-7

電子版
  • 電子化の予定があります

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

ベンダー中立なネットワークOSの重要性の再認識,特定ベンダーにスイッチのハードウェア供給を依存するリスクの回避といった理由から,国内外大手サービス事業者や通信事業者などを中心に,ホワイトボックススイッチやネットワークOSの利用が進んでいます。中でも,2016年にオープンソースとして公開されたSONiCはネットワークOSのデファクトスタンダードになりつつあります。本書では,初学者がSONiCの全体像を理解し,SONiCを利用するための基礎知識を素早く得られるよう情報を整理しました。設定方法を単に解説するだけではなく,「SONiCがどのように構成され動作しているのか」「モジュールがどのように連携して各機能が実現されているのか」といった実装の内部についても詳細に解説します。

こんな方におすすめ

  • SONiCについて基礎から学びたい人
  • オープンネットワーキングに興味のある人
  • ホワイトボックススイッチの活用を考えている人

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

第1章 ホワイトボックススイッチとSONiCアーキテクチャ

1.1 ホワイトボックススイッチの内部構造

  • 1.1.1 スイッチの機能レイヤー[マネジメントプレーン・コントロールプレーン・データプレーン]
  • 1.1.2 スイッチの物理構成
  • 1.1.3 ネットワークOSの役割

1.2 SAI誕生の背景と役割

  • 1.2.1 SAIとは

1.3 SONiCアーキテクチャの全体像

  • 1.3.1 SONiCのアーキテクチャ
  • 1.3.2 サブシステムとデータベースの連携動作

第2章 SONiCの機能とユースケース

2.1 SONiCの機能とユースケース

  • 2.1.1 SONiCで利用可能な機能
  • 2.1.2 開発中の機能とロードマップ

2.2 ユースケース/事例

  • 2.2.1 Microsoft
  • 2.2.2 Alibaba.com
  • 2.2.3 Target
  • 2.2.4 eBay
  • 2.2.5 Google
  • 2.2.6 Orange S.A.
  • 2.2.7 LINE株式会社
  • 2.2.8 KDDI株式会社

2.3 Switch ASIC以外への適用例

  • 2.3.1 SONiC-DASH
  • 2.3.2 SONiC-VPP
  • 2.3.3 TPCM:Third Party Container Management
  • 2.3.4 生成AI/機械学習ネットワーク

第3章 コミュニティ運営と開発プロセス

3.1 組織構成やメンバー

  • 3.1.1 運営組織のメンバー構成
  • 3.1.2 TSCの活動内容

3.2 情報ソースとコミュニケーションチャネル

  • 3.2.1 ポータルサイトやSNS
  • 3.2.2 メーリングリストとワーキンググループ
  • 3.2.3 GitHub SONiC OrganizationとWikiページ
  • 3.2.4 ソースコード(GitHubレポジトリ)へのアクセス
  • 3.2.5 コミュニティメンバーが集まるカンファレンス
  • 3.2.6 まとめ:情報ソースとコミュニケーションチャネル

3.3 リリースプロセス

  • 3.3.1 リリースプロセスの全体像
  • 3.3.2 コミュニティが実施するテスト(テストベッドとテストプラン)
  • 3.3.3 個人コントリビューター・ライセンス同意書(ICLA)
  • 3.3.4 プロジェクトページ

3.4 不具合報告や修正提案

第4章 商用版SONiCと有償サポート

4.1 コミュニティ版と商用版SONiCの違い

  • 4.1.1 対応プラットフォーム
  • 4.1.2 機能
  • 4.1.3 テスト
  • 4.1.4 ドキュメント

4.2 新機能追加までの流れ

4.3 主な商用版SONiC提供ベンダー

4.4 有償サポート提供ベンダー

  • 4.4.1 APRESIA Systems株式会社
  • 4.4.2 Aviz Networks
  • 4.4.3 Dell Technologies
  • 4.4.4 株式会社マクニカ
  • 4.4.5 PalC Networks

4.5 まとめ:商用版SONiCや有償サポートの検討ポイント

第5章 SONiCの入手とインストール

5.1 SONiCが動作する環境の用意

  • 5.1.1 ハードウェア環境(実機環境)
  • 5.1.2 仮想マシン環境
  • 5.1.3 SONiCが動作するスイッチの探し方

5.2 イメージの入手

  • 5.2.1 プリビルドイメージの入手方法
  • 5.2.2 実行イメージのファイル名
  • 5.2.3 ビルド状況の確認方法

5.3 実機での利用方法

  • 5.3.1 実機へのインストールと起動(ONIE)
  • 5.3.2 実機でのアップグレード/ダウングレード方法

5.4 仮想環境での利用方法(sonic-vs on KVM)

  • 5.4.1 KVM環境の準備
  • 5.4.2 SONiC Switch Imageの入手とビルド
  • 5.4.3 KVMドメイン設定ファイルsonic.xmlの編集
  • 5.4.4 SONiC VM(仮想マシン)の起動
  • 5.4.5 ログインIDとパスワードの変更
  • 5.4.6 SSH経由でのログイン方法
  • 5.4.7 起動時設定の変更

第6章 SONiCの基本操作と設定方法

6.1 SONiCの基本操作と設定ファイル

  • 6.1.1 SONiCの基本的な操作について
  • 6.1.2 設定/設定ファイルの保存場所

6.2 設定ファイルを用いた設定方法

  • 6.2.1 設定の読み込み
  • 6.2.2 設定のスナップショットとロールバック

6.3 2種類のコマンドラインインターフェース

  • 6.3.1 ClickベースのCLI
  • 6.3.2 KlishベースのCLI

6.4 SONiCの基本的な設定

  • 6.4.1 環境の設定
  • 6.4.2 レイヤー2の設定[port VLAN, Tag VLAN]
  • 6.4.3 レイヤー3の設定

第7章 SONiCの内部構造:アーキテクチャとサブシステム

7.1 SONiCアーキテクチャの全体像

  • 7.1.1 SONiCを構成するサブシステム
  • 7.1.2 サブシステムの連携

7.2 主要なサブシステム

  • 7.2.1 コンテナ一覧の確認方法
  • 7.2.2 主要なコンテナとその役割

7.3 各サブシステムで動作するモジュール

  • 7.3.1 サブシステムで起動しているモジュールの確認
  • 7.3.2 サブシステムに含まれるモジュールと起動制御
  • 7.3.3 コンテナやモジュールのレポジトリ

7.4 databaseコンテナ

  • 7.4.1 databaseコンテナとは

7.5 swssコンテナ

  • 7.5.1 swssコンテナとは
  • 7.5.2 swssコンテナのモジュール起動シーケンス
  • 7.5.3 swssコンテナの機能:*mgrd
  • 7.5.4 swssコンテナの機能:*syncd
  • 7.5.5 swssコンテナの機能:orchagent

7.6 syncdコンテナ

  • 7.6.1 syncdコンテナとは

7.7 bgpコンテナ(routingコンテナ)

  • 7.7.1 bgpコンテナとは
  • 7.7.2 各モジュールの役割

7.8 mgmt-frameworkコンテナとgnmiコンテナ

  • 7.8.1 SONiC管理フレームワークとは

7.9 pmonコンテナ

  • 7.9.1 pmonコンテナとは

7.10 snmpコンテナ

  • 7.10.1 snmpコンテナとそのモジュール

7.11 lldpコンテナ

  • 7.11.1 lldpコンテナとそのモジュール

7.12 teamdコンテナ

  • 7.12.1 teamdコンテナとそのモジュール

7.13 eventdコンテナ

  • 7.13.1 eventdコンテナとeventdモジュール

7.14 フロントパネルポートとホストインターフェース

  • 7.14.1 ホストインターフェースの確認
  • 7.14.2 フロントパネルポートの定義

第8章 SONiCの内部構造:ステートの流れとモジュール連携

8.1 SONiCのデータベース

  • 8.1.1 SONiCで定義されているデータベース
  • 8.1.2 データベース内のテーブル名
  • 8.1.3 データベースエントリのフォーマット
  • 8.1.4 データベースのスキーマ定義
  • 8.1.5 データベースへのアクセス

8.2 モジュールからデータベースへのアクセス

  • 8.2.1 基本的なデータベースアクセス用のクラス[DBConnector, Table]
  • 8.2.2 ルーティング関連を効率的に処理するクラス[ProducerStateTable]

8.3 モジュールとホストの通信

  • 8.3.1 モジュールからホスト(Kernel)に対する通信
  • 8.3.2 ホスト(Kernel)からモジュールに対する通信
  • 8.3.3 モジュールとホスト(ペリフェラル)に対する通信
  • 8.3.4 フロントパネルポートからホストを経由したパケットの通信[CoPP]

8.4 モジュールからモジュールへのアクセス

  • 8.4.1 orchagent内部の通信

8.5 コンテナのネットワーク構成

  • 8.5.1 コンテナへの権限付与

8.6 SONiCのインターフェース管理

  • 8.6.1 インターフェース管理の流れ

8.7 SONiCのルーティング機能

  • 8.7.1 bgpコンテナで動作するモジュール
  • 8.7.2 ルーティング機能に関連したモジュール連携の流れ
  • 8.7.3 FRRの設定管理
  • 8.7.4 FRR管理フレームワークのメリット

8.8 SONiCの起動とユーザーインターフェース

  • 8.8.1 SONiC起動時の設定の流れ
  • 8.8.2 SONiC CLI(Click)
  • 8.8.3 SONiC CLI(Klish)

8.9 SONiC管理フレームワーク

  • 8.9.1 アーキテクチャやモジュール構成
  • 8.9.2 REST APIの利用
  • 8.9.3 ビルドタイムの流れ
  • 8.9.4 ランタイム処理の流れ
  • 8.9.5 FRR管理フレームワーク

第9章 SAI詳細解説[API・オブジェクト・データプレーンパイプライン]

9.1 SAI概要

  • 9.1.1 SAIとは

9.2 SAIのパケット処理パイプライン

  • 9.2.1 SAIパイプライン全体像
  • 9.2.2 レイヤー2パイプライン
  • [COLUMN]2種類のSAIブリッジタイプ(sai_bridge_type_t)
  • 9.2.3 レイヤー3パイプライン

9.3 SAIの定義ファイル[機能共通]

  • 9.3.1 SAIのメタデータ
  • 9.3.2 sai.h
  • 9.3.3 saitypes.h
  • 9.3.4 saistatus.h
  • 9.3.5 saiobject.h
  • 9.3.6 saiversion.h

9.4 SAIの定義ファイル[機能毎]

  • 9.4.1 SAIでサポートされる機能
  • [COLUMN]SAIの初期仕様におけるAPIセット
  • 9.4.2 機能毎の定義ファイルの構成

9.5 SONiCにおけるSAIの実装

  • 9.5.1 orchagentとsyncdにおけるSAI APIの違い
  • 9.5.2 orchagentにおけるSAIの初期化
  • 9.5.3 syncdにおけるSAIの初期化
  • 9.5.4 sairedisのRedis操作マクロ

第10章 高度な設定と利用法

10.1 SRv6のサポート状況

  • 10.1.1 SONiCでサポートされているSRv6 機能
  • 10.1.2 SRv6をサポートしているデータプレーン
  • 10.1.3 SONiC SRv6のアーキテクチャ

10.2 SONiCのSRv6設定

  • 10.2.1 SONiCでのSRv6設定反映の流れ
  • 10.2.2 SRv6関連のAPPL_DBスキーマ
  • 10.2.3 テスト構成
  • 10.2.4 基本設定
  • 10.2.5 swssconfigを用いたAPPL_DBエントリの作成と確認

10.3 パケット変換動作の確認

  • 10.3.1 パケット変換動作の確認(End.DT46)
  • 10.3.2 パケット変換動作の確認(H.Encaps.Red)
  • 10.3.3 SAIオブジェクトとASIC_DBエントリ
  • 10.3.4 APPL_DB, ASIC_DBエントリの変換フロー

第11章 SONiCのトラブルシューティング

11.1 showコマンドによる状態の確認

  • 11.1.1 showコマンドのオプション確認方法
  • 11.1.2 代表的なコマンドの紹介

11.2 ログの参照方法と読み方

  • 11.2.1 syslogのログフォーマット
  • 11.2.2 ログレベルの変更

11.3 APPL_DB変更/SAI呼び出しのログ

  • 11.3.1 ログファイルの場所
  • 11.3.2 ログの読み方

11.4 SONiCのデバッグ

  • 11.4.1 GDBによるデバッグ
  • 11.4.2 ASICの状態確認
  • 11.4.3 バグを発見したら

Appendix

Appendix1 ソースコードからのビルド

  • A.1.1 SONiCビルドシステムの概要
  • A.1.2 SONiCイメージのビルドの流れ
  • A.1.3 仮想環境でのビルド手順例
  • A.1.4 ビルドオプションのカスタマイズ(rules/config)
  • A.1.5 特定モジュール(コンテナ)のビルドと入れ替え

Appendix2 SONiCで利用されているオープンソースプロジェクト

著者プロフィール

海老澤健太郎(えびさわけんたろう)

インターネット黎明期より,通信事業者ネットワークを中心に新技術や製品の検証,サービス導入支援に携わる。以降,国内外のスタートアップ企業において,顧客サポート,製品デザイン,開発マネジメントなど幅広い領域を担当。ホスティング事業者向けの仮想化基盤や,ASIC・FPGAを活用した高性能フロールータ,OpenFlowスイッチの開発などに従事する。また,大手自動車メーカーおよび通信事業者の嘱託研究員として,コネクティッドカーや広域通信を支えるネットワーク技術の研究,オープンソースコミュニティ活動の支援にも取り組む。フリーランスとしても,国内外のネットワーク関連企業の製品開発および日本市場進出を支援。現在は北米スタートアップ企業にて,AI向けネットワーク機能を中心としたネットワーク機器の開発に従事している。