このページの目次
その他のネットワークトピック
カバー範囲: 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 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
# → eth0.100: VLAN タグ付きサブインターフェース
# カーネルが自動的に VLAN タグの付与/剥離を行う
トンネリング
| トンネルタイプ | エンキャプスレーション | 用途 |
|---|---|---|
| GRE | IP-in-IP (GRE ヘッダ) | サイト間接続 |
| VXLAN | UDP 上の L2 | データセンター オーバーレイ |
| IPIP | IP-in-IP (GRE ヘッダなし) | 軽量トンネル |
| WireGuard | UDP + Noise + ChaCha20 | VPN |
# VXLAN の例
ルーティング
// 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.c、net/sched/、drivers/net/tun.c、net/core/net_namespace.c - カーネルドキュメント:
Documentation/networking/bridge.rst、Documentation/networking/ip-sysctl.rst
キーワード: bridge, VLAN, VXLAN, tc, qdisc, network namespace, TUN/TAP