このページの目次

その他のネットワークトピック

カバー範囲: VLAN/bridge/bonding → トンネリング (GRE/VXLAN/IPIP) → ルーティング (FIB/FIB ルール) → QoS (tc qdisc) → ネットワーク名前空間 → TUN/TAP カーネルバージョン: 2.6 ~ 6.x

仮想ネットワークデバイス

bridge: ソフトウェアスイッチ

// net/bridge/
// Linux bridge = 仮想 L2 スイッチ
// 機能: MAC 学習、STP (オプション)、VLAN フィルタリング
// 典型的な用途: VM/コンテナ間の L2 接続、veth ペアとの併用

brctl addbr br0
brctl addif br0 eth0  // 物理ポートをブリッジに追加
ip link add veth0 type veth peer name veth1  // 仮想イーサネットペア
brctl addif br0 veth0  // 片方をブリッジに接続、もう片方をコンテナ名前空間に配置

bonding: リンク集約

bonding モード:
  balance-rr:   ラウンドロビン (TX 負荷分散)
  active-backup: アクティブ/スタンバイ (フェイルオーバー)
  balance-xor:  MAC ハッシュに基づく
  802.3ad:      LACP による動的集約

VLAN: 802.1Q

ip link add link eth0 name eth0.100 type vlan id 100
# → eth0.100: VLAN タグ付きサブインターフェース
# カーネルが自動的に VLAN タグの付与/剥離を行う

トンネリング

トンネルタイプエンキャプスレーション用途
GREIP-in-IP (GRE ヘッダ)サイト間接続
VXLANUDP 上の L2データセンター オーバーレイ
IPIPIP-in-IP (GRE ヘッダなし)軽量トンネル
WireGuardUDP + Noise + ChaCha20VPN
# VXLAN の例
ip link add vxlan0 type vxlan id 100 remote 10.0.0.2 dstport 4789 dev eth0

ルーティング

// net/ipv4/fib_trie.c (FIB = Forwarding Information Base)
// Linux ルーティングは FIB + FIB ルールの 2 層構造:

// FIB ルール (ポリシールーティング):
//   ip rule: src IP、fwmark、iif に基づいてルーティングテーブルを選択
//   デフォルト: local (テーブル 255) → main (テーブル 254) → default (テーブル 253)

// FIB (転送情報ベース):
//   LC-trie 実装 (最長プレフィックス一致、O(log n))
//   エントリ: prefix → nexthop + デバイス

QoS: トラフィックコントロール (tc)

// net/sched/
// tc のキューイング規則 (qdisc) スタック:
//   root qdisc: 送信パケットのエントリポイント (サブクラスを持つ場合あり)
//   ingress qdisc: 受信エントリポイント (あまり一般的ではない)

// 一般的な qdisc:
//   fq_codel: 公平キュー + 能動的キュー管理 (bufferbloat を削減、デフォルト)
//   cake:    ホームゲートウェイ向け最適化 (帯域幅整形 + 公平性)
//   htb:     階層トークンバケット (帯域幅制限)
//   pfifo_fast: 単純な FIFO (旧デフォルト)

// BPF も tc に統合されている: classifier/action として BPF プログラムをアタッチ可能

ネットワーク名前空間

// net/core/net_namespace.c
// 各 netns には独立した以下のリソースがある:
//   - ネットワークインターフェース一覧
//   - ルーティングテーブル
//   - netfilter ルール
//   - ソケットバインド

// コンテナの基盤: 
//   CLONE_NEWNET → 新規 netns の作成
//   veth ペアでホストとコンテナの netns を接続
//   bridge で複数のコンテナを接続

TUN/TAP

// drivers/net/tun.c
// TUN: L3 トンネル (IP パケット、/dev/net/tun)
// TAP: L2 トンネル (イーサネットフレーム)

// ユーザー空間プログラムが /dev/net/tun をオープン → IP パケットの読み書き
//   → VPN (OpenVPN、WireGuard)、VM (QEMU、Firecracker)

参考

  • ソースコード⁠: net/bridge/net/core/rtnetlink.cnet/sched/drivers/net/tun.cnet/core/net_namespace.c
  • カーネルドキュメント⁠: Documentation/networking/bridge.rstDocumentation/networking/ip-sysctl.rst

キーワード: bridge, VLAN, VXLAN, tc, qdisc, network namespace, TUN/TAP