ISBN 9784839981242
ゼロからのTCP/IPプロトコルスタック自作入門
概要
LinuxユーザSpace でTCP/IPプロトコルスタックをゼロから実装する
想定読者
ネットワーク実装の内部を理解したいCエンジニア・OS自作入門書を読み終えた人・低レイヤ技術への理解を深めたいシステムプログラマ
こんな人には向いていない
- ネットワーク設定やAPIの使い方を知りたいだけのアプリケーションエンジニア
- C言語の基本文法に不安がある入門者(ポインタ・構造体・ファイルI/Oの実装経験が前提)
- パケットキャプチャツールの使い方やWiresharkの操作を求めている人
読了後にできるようになること
- Ethernet/ARP/IP/ICMP/UDP/TCP各プロトコルの受信・送信パスを自分でコーディングできる
- ネットワークデバイスと論理インタフェースを抽象化するデータ構造を設計できる
- TCPコネクション確立・データ転送・再送・切断の各ステートマシンを実装できる
- SocketAPI互換のユーザコマンドレイヤをプロトコルスタック上に構築できる
- 割り込み処理・タイマー処理・タスク管理をユーザ空間で模倣する手法を理解できる
- 実装したスタックを教育用OSや自作OSカーネルへ移植する際の設計判断を説明できる
本書のキー概念(章解説)
- はじめに — 本書の設計思想と学習の進め方を把握する起点
- 第 1 章 ネットワークデバイスの管理 — デバイス抽象化レイヤの設計がここで確立される
- 第 2 章 デバイスドライバ
- 第 3 章 プロトコルの管理
- 第 4 章 IP:パケットの入力と検証
- 第 5 章 論理インタフェースの管理
- 第 6 章 IP:パケットの送信
- 第 7 章 IP:上位プロトコルの管理
- 第 8 章 ICMP:メッセージの入力と検証
- 第 9 章 ICMP:メッセージの送信
- 第 10 章 Ethernet:フレームの入力
- 第 11 章 Ethernet:デバイスドライバの実装
- 第 12 章 ARP:メッセージの入力と応答
- 第 13 章 ARP:キャッシュの実装
- 第 14 章 ARP:要求メッセージの送信
- 第 15 章 受信パケットの遅延処理 — 割り込みとタスク処理の分離という設計上の重要判断が現れる
- 第 16 章 IP:ルーティング機能の追加
- 第 17 章 UDP:データグラムの入力と検証
- 第 18 章 UDP:制御ブロックとユーザコマンド
- 第 19 章 UDP:データの送受信
- 第 20 章 TCP:セグメントの入力
- 第 21 章 TCP:制御ブロック
- 第 22 章 TCP:コネクション確立(その1)
- 第 23 章 TCP:データ転送 — TCP実装の核心。シーケンス番号管理とウィンドウ制御の実装
- 第 24 章 TCP:セグメントの再送 — 信頼性制御の実装を通じてTCP再送タイマーの仕組みを体感できる
- 第 25 章 TCP:コネクション確立(その2)
- 第 26 章 TCP:コネクション切断(その1)
- 第 27 章 TCP:コネクション切断(その2)
- 第 28 章 TCP:落ち穂拾い
- 第 29 章 TCP:ソケット互換のユーザコマンド — 既存Cアプリケーションとの接続点。実用性の出口
- 第 30 章 ソケットAPI
ハイライト
- 単なるパケット処理だけでなく、ネットワークデバイスの管理やアプリケーションへの機能提供まで余すことなく解説しており、ネットワーク機能全体のデザインを学ぶことができます。(他の自作系書籍がパケット解析に留まりがちな中、スタック全体の設計を一冊で扱う点が本書の最大の差別化要素)
- Linuxのユーザ空間で動作するプロトコルスタックを開発しますが、教育用OSや自作OSのカーネルへの移植実績もあります。ぜひ既存のOS自作入門書籍と合わせてご活用ください。(OS自作入門書との接続性を明示しており、低レイヤ学習の一連のロードマップ上に位置付けられる)
編集メモ
Qiita言及0件・likes合計0。2025年11月刊行の新刊で外部シグナルが蓄積途上。著者のOSSリポジトリ(pandax381/microps)は1.3kスターを持ち技術的認知度は存在するが、本書自体のWeb上での評価は現時点では計測不能
読む前に押さえておきたいこと
- Cポインタ・構造体・動的メモリ管理の実装経験
- Linux上でのファイルI/OおよびTUN/TAPデバイスの基本操作
- Wiresharkやtcpdumpでパケットのヘッダフィールドを読める程度のTCP/IP知識
- makefileを用いたビルドとgdbを使ったデバッグの基本操作
学習のコツ
- Step 1〜3(デバイス・ドライバ・プロトコル管理)はその後の全実装の骨格になるため、コードを写経するだけでなくデータ構造の設計意図をメモしながら進めると後半の理解速度が上がる
- TCPステップ(Step 20〜30)は章数が多く見えるが、制御ブロック(Step 21)とコネクション確立(Step 22)を押さえると残りは自然につながる。Step 24(再送)は最初は飛ばして先に読み通してから戻る読み方も有効
- Appendix 1〜3(割り込み・タイマー・タスク管理)はLinuxカーネルの対応機構と比較しながら読むと「ユーザ空間での模倣」の意味が立体的に理解できる
- 著者のOSSリポジトリ pandax381/microps と並走させると、書籍コードとの差分から発展的な実装選択を追うことができる
出版社による内容紹介
あなたが手に取ったのはOSが持つネットワーク機能そのものである「プロトコルスタック」を自作しようという風変わりな本です。 単なるパケット処理だけでなく、ネットワークデバイスの管理やアプリケーションへの機能提供まで余すことなく解説しており、ネットワーク機能全体のデザインを学ぶことができます。 本書ではLinuxのユーザ空間で動作するプロトコルスタックを開発しますが、教育用OSや自作OSのカーネルへの移植実績もあります。ぜひ既存のOS自作入門書籍と合わせてご活用ください。 全てのパケットを自分で組み立てて通信しよう! [CONTENTS] Step 0 はじめに Step 1 ネットワークデバイスの管理 Step 2 デバイスドライバ Step 3 プロトコルの管理 Step 4 IP:パケットの入力と検証 Step 5 論理インタフェースの管理 Step 6 IP:パケットの送信 Step 7 IP:上位プロトコルの管理 Step 8 ICMP:メッセージの入力と検証 Step 9 ICMP:メッセージの送信 Step 10 Ethernet:フレームの入力 Step 11 Ethernet:デバイスドライバの実装 Step 12 ARP:メッセージの入力と応答 Step 13 ARP:キャッシュの実装 Step 14 ARP:要求メッセージの送信 Step 15 受信パケットの遅延処理 Step 16 IP:ルーティング機能の追加 Step 17 UDP:データグラムの入力と検証 Step 18 UDP:制御ブロックとユーザコマンド Step 19 UDP:データの送受信 Step 20 TCP:セグメントの入力 Step 21 TCP:制御ブロック Step 22 TCP:コネクション確立(その1) Step 23 TCP:データ転送 Step 24 TCP:セグメントの再送 Step 25 TCP:コネクション確立(その2) Step 26 TCP:コネクション切断(その1) Step 27 TCP:コネクション切断(その2) Step 28 TCP:落ち穂拾い Step 29 TCP:ソケット互換のユーザコマンド Step 30 ソケットAPI Appendix 1 割り込み処理 Appendix 2 タイマー処理 Appendix 3 タスク管理 Step 0 はじめに Step 1 ネットワークデバイスの管理 Step 2 デバイスドライバ Step 3 プロトコルの管理 Step 4 IP:パケットの入力と検証 Step 5 論理インタフェースの管理 Step 6 IP:パケットの送信 Step 7 IP:上位プロトコルの管理 Step 8 ICMP:メッセージの入力と検証 Step 9 ICMP:メッセージの送信 Step 10 Ethernet:フレームの入力 Step 11 Ethernet:デバイスドライバの実装 Step 12 ARP:メッセージの入力と応答 Step 13 ARP:キャッシュの実装 Step 14 ARP:要求メッセージの送信 Step 15 受信パケットの遅延処理 Step 16 IP:ルーティング機能の追加 Step 17 UDP:データグラムの入力と検証 Step 18 UDP:制御ブロックとユーザコマンド Step 19 UDP:データの送受信 Step 20 TCP:セグメントの入力 Step 21 TCP:制御ブロック Step 22 TCP:コネクション確立(その1) Step 23 TCP:データ転送 Step 24 TCP:セグメントの再送 Step 25 TCP:コネクション確立(その2) Step 26 TCP:コネクション切断(その1) Step 27 TCP:コネクション切断(その2) Step 28 TCP:落ち穂拾い Step 29 TCP:ソケット互換のユーザコマンド Step 30 ソケットAPI Appendix 1 割り込み処理 Appendix 2 タイマー処理 Appendix 3 タスク管理
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。