コンテンツにスキップ

L2 機能の考え方

SONiC で L2 を読むときは、最初に「どの interface がどの forwarding domain に属するか」と「その interface を L2 として使うのか、L3 として使うのか」を分けて整理すると、その後の設定や運用が追いやすくなります。同じ Ethernet0 でも、VLAN_MEMBER に入れれば L2、INTERFACE テーブルに入れれば L3、VLAN_SUB_INTERFACEEthernet0.100 を作れば dot1q L3 になります。

SONiC の L2 は何の問題を解決するか

データセンタの leaf-spine fabric では L2 を極力使わず L3 ECMP に寄せるのが王道ですが、現実にはサーバ - ToR 間の VLAN、management VLAN、ストレージ系の broadcast 要件、L2 over VXLAN を運ぶための L2 bridge など、L2 は完全には消えません。SONiC の L2 機能は以下を引き受けます。

  • VLAN bridge domain、tagged / untagged のメンバシップ、SVI を提供する。
  • 複数物理リンクを LAG (PortChannel) として束ねる。
  • FDB、STP、storm control、link event damping など L2 周りの保護機能を持つ。
  • MC-LAG、sub-port interface など、L2 と L3 の境界にいる機能をサポートする。

SONiC の中での位置

担当
Management plane config vlan, config interface, config portchannel, CONFIG_DB.VLAN / VLAN_MEMBER / PORTCHANNEL
Control plane vlanmgrd, intfmgrd, teammgrd / Linux teamd, fdb sync, STP daemon
Data plane VlanMgr / VlanMgrOrch, LagOrch, FdbOrch, SAI bridge-port / LAG

LAG の責務は Linux 側の teamd と SONiC の teammgrd / LagOrch に分かれており、最終的に SAI LAG object に落ちます。VLAN は Linux bridge を使わずに SAI bridge-port で扱う点が、一般的な Linux distribution と違う部分です。

最初に押さえる単位

単位 主な CONFIG_DB 役割
物理ポート PORT Ethernet ポートの速度、MTU、admin state、switchport mode、TPID など
VLAN VLAN L2 broadcast domain の定義。名前は Vlan<id>
VLAN メンバ VLAN_MEMBER PORT または PORTCHANNEL を VLAN に tagged / untagged で所属させる
VLAN interface VLAN_INTERFACE VLAN を L3 SVI として使い、IP / VRF / proxy ARP などを持たせる
PortChannel PORTCHANNEL / PORTCHANNEL_MEMBER 複数物理ポートを LACP LAG として束ねる
PortChannel interface PORTCHANNEL_INTERFACE PortChannel を L3 interface として使う
Sub-port VLAN_SUB_INTERFACE Ethernet / PortChannel 上に .<vlan-id> の L3 sub-interface を作る

VLAN は L2 の入れ物です。VLAN_MEMBER はその入れ物にポートを入れる設定です。VLAN_INTERFACE は同じ VLAN 名を L3 の gateway interface として扱う設定で、L2 メンバとは別の役割を持ちます。

典型的な使用シーン

flowchart LR
  S1((Server 1)) -. untagged Vlan100 .- E1[Ethernet0]
  S2((Server 2)) -. untagged Vlan100 .- E2[Ethernet1]
  E1 --- ToR[ToR Switch]
  E2 --- ToR
  ToR -->|LACP| PC[PortChannel1]
  PC --- Up[Aggregation]

サーバ向けポートを Vlan100 の untagged member にし、uplink を PortChannel として束ねる典型構成です。Vlan100 を SVI 化(VLAN_INTERFACE)すればサーバの gateway になります。

シーン 2: trunk + sub-interface mix

flowchart LR
  Peer((Router)) ==>|"trunk: Vlan10/20/30"| Eth[Ethernet5]
  Eth --- Br10[Vlan10 bridge]
  Eth --- Br20[Vlan20 bridge]
  Eth -.->|"dot1q .100"| Sub["Ethernet5.100<br/>L3 sub-port"]

同じ物理ポートで、ある VLAN は L2 bridge に入れ、別の VLAN は dot1q L3 sub-port として終端する、という構成も可能です。bridge と sub-port の使い分けは VLAN ごとに別になる点に注意します。

Access / trunk / routed の見方

Switchport mode は、ポートや PortChannel をどう扱うかを運用者に明示するための概念です。

モード 期待される使い方
routed L3 interface として IP を持たせる。VLAN_MEMBER には入れない
access 1 つの VLAN に untagged で所属させる
trunk 1 つ以上の VLAN に tagged、必要なら native VLAN に untagged で所属させる

実装上の中心は PORT.<name>.mode または PORTCHANNEL.<name>.mode です。詳細な CLI と実装差分は Switchport モードと VLAN CLI 拡張 を参照してください。

VLAN interface と sub-port の違い

VLAN interface は、VLAN 全体に対する L3 gateway です。Vlan100192.0.2.1/24 を持たせると、その VLAN に属する member port から来る端末の gateway になります。

Sub-port は、親 interface 上の dot1q tag を L3 RIF として直接扱います。Ethernet0.100PortChannel100.20 のように、VLAN bridge domain へ入れるのではなく、親 interface + VLAN ID の組を L3 interface にします。既存 HLD では sub-port を L2 bridge port として使うことはスコープ外です。

LAG と MC-LAG の境界

通常の PortChannel は 1 台のスイッチ内で複数の物理ポートを束ねます。SONiC では PORTCHANNELPORTCHANNEL_MEMBERteammgrd が読み、Linux teamdorchagent の LAG programming へつなぎます。

MC-LAG は 2 台のスイッチが peer になり、下流ホストから 1 つの LAG に見えるように協調します。通常 LAG の設定に加えて、ICCP セッション、peer-link、MCLAG domain、remote MAC / ARP / ND 同期、isolation group、unique IP といった制御面が必要です。通常の PortChannel の延長ではなく、「2 台の制御面を同期する仕組み」として読むのが安全です。

FDB、STP、storm control の位置づけ

FDB は VLAN 内で MAC address と出力 port を結び付ける学習テーブルです。ポート down、VLAN member 削除、STP topology change、PortChannel down では FDB flush の範囲が変わります。

STP / MSTP は L2 ループを避ける制御面です。Storm control はループや誤接続で BUM traffic が増えたときに物理ポート単位でレート制限します。Link event damping はポート up/down の連続発生を抑え、L2 / L3 の制御面へイベントを流しすぎないための保護です。

似た / 混同しやすい機能との違い

比較対象 違い
VLAN_INTERFACE vs sub-port 前者は VLAN bridge 全体の SVI。後者は親 interface + dot1q tag を直接 L3 化
LAG vs MC-LAG 前者は 1 台内、後者は 2 台の協調。ICCP / peer-link が必要
L2 bridge VXLAN vs sub-port VXLAN は VLAN-VNI map で bridge、sub-port は L3 のみ
Linux bridge vs SAI bridge-port SONiC は kernel bridge をデータパスに使わない。SAI bridge-port が ASIC で forwarding
STP vs storm control 前者はループ回避のためのトポロジ計算、後者は BUM のレート制限

読み終わったあとにできるようになること

  • 同じ物理ポートを L2 / L3 / sub-port のどれとして扱っているか、CONFIG_DB のテーブルだけで判定できる。
  • Vlan100 の L2 メンバシップと L3 SVI を別の話として扱える。
  • LAG の振る舞いを teamd / teammgrd / LagOrch の責務に分けられる。
  • MC-LAG を「2 台の制御面同期」として読み、通常 LAG の延長と誤解しない。

関連ページ

この章の前提知識

この章を読み進める前に、次の章を押さえておくと迷子になりにくい。