← 一覧へ戻る

Claude が書いた記事

SONiC ってなんやねん ── Cisco の箱なのにログインしたら Debian が立つ

スイッチの話をしてたはずが急に Linux が出てきて意味がわからんくなった。ToR スイッチの中身が『ただの Linux サーバー』だった、と腹落ちするまでの学習ログ。

俺の最初の疑問

Azure のネットワークサービスを仕事で触ってるが、ふと「SONiC ってなんやねん」が気になった。ニュースでも k8s でも DC の文脈でもよく見る。「Azure のデータセンターにあるスイッチで使っている OS」程度の理解。

で、調べ始めて一発で意味がわからんくなった。スイッチの話をしてたはずやのに、急に「Linux」「Redis」「コンテナ」が出てくる。

なんでスイッチの話で Linux が出てくるんや?

ここが今回いちばん引っかかった。順に潰した記録。

まず一言でいうと

SONiC は 「白箱スイッチ (中身が空のスイッチ) に載せる、Debian Linux ベースのネットワーク OS」

引っかかりの答えはシンプルやった。スイッチという「箱」の中身は 2 つに分かれてる。

  • ASIC (スイッチチップ) = 筋肉。パケットを右から左へ爆速で流す。LAN ケーブルが直結してるのはここ。
  • CPU = 脳。その筋肉をコントロールする。ここに Linux が載ってる

SONiC はこの「脳」のほう。だから「スイッチの話で Linux」になる。Azure のデータセンターのスイッチは、外見は普通のネットワーク機器やけど、中身 (脳) はカスタムされた Linux サーバーやった (Microsoft 自身が SONiC でグローバルクラウドを動かしている と公言している)。

何と比べるとわかるか

昔ながらの Cisco / Juniper のスイッチと SONiC を並べると、何が変わったかが一発で見える。

従来 (Cisco Catalyst 等)SONiC
OS専用 OS (Cisco IOS) が箱に最初から一体白箱に後から Debian Linux を焼く
中身ハード + OS + アプリが密結合のブラックボックスLinux + コンテナで機能ごとに分離
操作メーカー独自コマンド (show ip bgp)Linux コマンド + 設定ファイル (FRRouting 等)
ベンダー箱と OS がセット (ロックイン)箱 (ハード) と OS を別々に選ぶ

要するに「ネットワーク専用機」から、「LAN ポートが数十個ぶっ刺さった Linux サーバー」へ見方を切り替えるのが正解やったuname -aapt も普通に通る。

なぜこうなったのか ── 答えは「台数」

「わざわざ純正 OS を捨てて Linux 入れるって、面倒なだけちゃうの?」と思う。理由は ToR / Leaf の台数が圧倒的に多いことが根っこにある (SONiC が動くのもこの ToR (T0) と leaf (T1) のレイヤーが中心 → SONiC のティア定義)。

  • 1 ラックに ToR が 1〜2 台 × データセンターに数万ラック = 数万台のスイッチ。
  • これに Cisco / Arista の純正 OS ライセンスを毎年払うと、ソフト費だけで天文学的。
  • メーカー独自コマンドで 1 台ずつ手で管理するのは、台数的に物理的に不可能。

だから 安い白箱 + 無料の Linux (SONiC) で全部統一して、サーバーと同じ仕組みで自動管理する。これがハイパースケーラの答え。台数が一番多い ToR / Leaf こそ、この統一の効果が一番デカい。

図で見る

1. スイッチの箱の中身:脳 (CPU/Linux) と筋肉 (ASIC)

スイッチの「箱」は脳 (CPU / Linux / SONiC) と筋肉 (ASIC) に分かれる。脳は「どう流すか」を決めて焼くだけで、パケットは CPU を通らず ASIC だけで一瞬で抜ける。これがコントロールプレーン (脳) とデータプレーン (筋肉) の分離。

2. SONiC の中身:コンテナ群が Redis 越しに会話する (図 1 の脳をズーム)

SONiC の設計でいちばん天才的なのが、機能ごとに分けたコンテナ (Docker の箱) 同士が直接喋らず、真ん中の Redis 越しに会話するところ。この Redis も外部やなく、スイッチの中で SONiC が抱えるコンテナの 1 つ (メモリ上の DB) や。下の図は、図 1 の「脳 (CPU / SONiC)」の中をズームしたもので、全部 1 台のスイッチの中で動いてる。

全部 1 台のスイッチの中 (図 1 の脳)。BGP / orchagent (swss) / syncd / Redis (database) は、それぞれ独立したコンテナ (Docker の箱)。BGP コンテナ → AppDB →(orchagent が変換)→ ASICDB →(syncd が SAI で焼く)→ ASIC (筋肉・SONiC の外)。コンテナ同士は直接喋らず中央の Redis 越しに会話するので、BGP コンテナが落ちても ASICDB (焼いた転送表) は無傷で、転送は 1 ms も止まらない。

混乱しやすいポイント

① SAI (Switch Abstraction Interface) は「OS」やない、「ドライバ」や

ここで一番詰まった。「メーカーが SAI ドライバを提供する」と聞くと、OS の話に聞こえる。けど違う。PC で例えると一発やった。

PC (自作 PC)SONiC スイッチ
マザーボード (ASUS 等)Arista / Cisco の筐体
GPU (NVIDIA 等)Broadcom / NVIDIA の ASIC
OS (Windows / Linux)SONiC (どのチップでも中身は同じ「共通の脳」)
グラフィックドライバSAI (チップごとの翻訳機)

SONiC が「ポート 1 に来たパケットをポート 5 から出せ」と命令する → SAI ドライバが「そのチップ専用のレジスタ命令」に翻訳する → ASIC が実行する。SAI があるおかげで、SONiC 開発陣は Broadcom 用 / Mellanox 用と個別に書かんでよくなる。Azure がマルチベンダーで爆速にスケールできる土台がこれ。

② Arista / Cisco の箱は「使ってない」やなくて「OS だけ入れ替えてる」

「じゃあ Cisco や Arista のスイッチは排除されたんか?」── 逆。箱 (筐体・ASIC・光トランシーバー技術) は大量に買う。そのうえで純正 OS (IOS / EOS) を消して SONiC を焼く。Arista 7050 / 7060、Cisco 8000 シリーズは公式に「自社ハードで SONiC が動く」ことを検証し、SAI ドライバを提供してる。とはいえ各社は自社 OS (EOS / IOS / Junos) の商売を捨てたわけやなく、ハイパースケーラ向けには「箱だけ売って SONiC を載せてもらう」選択肢も足した。これがディスアグリゲーション (ハードとソフトの分離) を受け入れる、ということ。

③ 脳 (CPU/Linux) はパケット 1 枚ごとには出てこない

「Linux が捌いてるなら遅いんちゃう?」と思うが、CPU が触るのは経路を計算して ASIC に焼く瞬間だけ。実際のパケット転送は ASIC のハードがやる。脳は方針を決め、筋肉が走る。この分離があるから、中身が Linux でも line rate で捌ける。

たとえ話

  • 脳と筋肉:SONiC (CPU/Linux) = 脳が「どう流すか」を決め、ASIC = 筋肉が実際に流す。脳が一瞬気絶しても (BGP 再起動)、筋肉は覚えた動きを続ける (ノンストップ転送)。
  • PC のドライバ:SAI = グラボのドライバ。OS (SONiC) は共通で、ドライバ (SAI) がチップごとの翻訳を担う。
  • 白箱 + OS:自作 PC に好きな Windows / Linux を入れるのと同じ。スイッチも「箱」と「OS」を別々に選べるようになった。

出てきた言葉の変換表

言葉つまり何の話?
SONiC白箱スイッチに載せる Debian Linux ベースの NOS (ネットワーク OS)
白箱 (ホワイトボックス)OS なしで売られるスイッチの筐体。ODM (Edgecore 等) や Arista / Cisco も供給する
ディスアグリゲーションハード (箱) とソフト (OS) を分離して別々に調達する流れ
ASICパケットを転送するスイッチチップ。データプレーン = 筋肉
コントロールプレーン / データプレーン経路を決める脳 (Linux) / 実際に流す筋肉 (ASIC)
Redis (ConfigDB / AppDB / ASICDB)SONiC が状態を一元管理する DB。コンテナ間はここ越しに会話する
orchagentAppDB → ASICDB へ変換するオーケストレーション役のプロセス
syncdASICDB を見て SAI 経由で ASIC に焼くプロセス
SAI (Switch Abstraction Interface)チップの違いを吸収する共通 API。OS でなくドライバ
FRRoutingSONiC の BGP 等を担うルーティングソフト
gNMI / gRPCストリーミングテレメトリ。Redis の統計を秒 / ミリ秒周期で吸い出す
深掘りメニュー 次におすすめのトピック

この記事の続きとして、未来の自分が次に掘るといいトピック。

  • クラウド各社のネット戦略 ── AWS Nitro / GCP の OCS / Oracle の RoCE。SONiC は Azure の手で、各社の「キャラ」を相対化すると見通しが効く。
  • SONiC の RDMA サポート (PFC / ECN) ── スイッチが「絶対に落とさないロスレスの道路」になる仕掛け。AI バックエンドの前提。
  • FRRouting と BGP ── SONiC の経路計算の中身。show ip bgp の代わりに何を読むか。
  • DASH / SmartSwitch ── ToR に DPU を載せて VXLAN / NAT / FW をオフロードする最前線。
  • GPU クラスターのレール最適化 ── SONiC (や InfiniBand) が支える AI ネットワークの上物。