---
title: その他のネットワークトピック
url: https://doc.liz6.com/ja/linux-kernel/06-network-subsystem/04-other-network-topics
locale: ja
area: linux-kernel
tags:
- linux-kernel
- network-subsystem
date: 2026-06-30
modified: 2026-07-16
description: 'カバー範囲: VLAN/bridge/bonding → トンネリング (GRE/VXLAN/IPIP) → ルーティング (FIB/FIB ルール) → QoS (tc qdisc) → ネットワーク名前空間 → TUN/TAP カーネルバージョン: 2.6 ~ 6.x'
---

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

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

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

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

```c
// 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

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

## トンネリング

| トンネルタイプ | エンキャプスレーション | 用途 |
|---------|------|------|
| GRE | IP-in-IP (GRE ヘッダ) | サイト間接続 |
| VXLAN | UDP 上の L2 | データセンター オーバーレイ |
| IPIP | IP-in-IP (GRE ヘッダなし) | 軽量トンネル |
| WireGuard | UDP + Noise + ChaCha20 | VPN |

```bash
# VXLAN の例
ip link add vxlan0 type vxlan id 100 remote 10.0.0.2 dstport 4789 dev eth0
```

## ルーティング

```c
// 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)

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

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

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

## ネットワーク名前空間

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

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

## TUN/TAP

```c
// 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*
