『ゼロからのTCP/IPプロトコルスタック自作入門』を出版しました

この記事は KLab Engineer Advent Calendar 2025、23日目の記事です。

ご無沙汰しております、いつのまにか自分がオーナーのOSSの脆弱性を調査した結果がトップカンファレンスで公開されるという貴重な体験をしました、@pandax381 です。


この度、長年ライフワークとして取り組んでいる「プロトコルスタック自作」の集大成として、『ゼロからのTCP/IPプロトコルスタック自作入門』を執筆し、11月21日にマイナビ出版さまから発売されました。

image

2022年5月にマイナビ出版の編集さんからメールを頂いたのがきっかけで、KLab Expert Campの公開資料をベースに書籍化の話がスタートしました。なお、今回お世話になった編集さんは "みかん本" でお馴染みの『ゼロからのOS自作入門』も担当されており、MikanOSに自作プロトコルスタックを移植してTCP/IPを喋らせるようにした件で「面白いことしてる人」として認知いただいたそうです。20年ほど昔になりますが過去に単著の執筆の経験があったことに加えて、今回はベースとなる資料があってプログラムのコードもある程度固まっていたことから「1年で書き上げる」というスケジュールで動きはじめたのですが、見込みが甘すぎて最終的に3年も掛かってしまいました。。執筆の遅れによって何度もリスケが発生し、編集さんをはじめ制作陣のみなさまに大変なご迷惑をお掛けしてしまったことを改めてお詫びいたします。

当初の想定からページ数が膨らんでいたこともあり、途中で「上下巻に分けて出版することもできますよ」という提案もいただいたのですが、「この熱い思いを伝えるには厚い重い本でなければ」という僕のわがままで、608ページ/約900グラムのチョット厚くて重い本として出版させていただきました。

目次

  • 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 タスク管理

これまで、KLab Expert Campやセキュリティ・キャンプ ネクストを通じて、延べ100名以上の学生に向けてプロトコルスタック自作の講義を行ってきました。その経験をもとに、読者の皆さんが「作る」ことを通じてTCP/IPの奥深い世界を肌で体感し、本質的な理解を得られるよう構成したつもりです。1日1ステップ進めれば1ヶ月でプロトコルスタックを自作できるので是非チャレンジしてみてください!

表紙のデザインについて

執筆を終えて制作が始まった段階で表紙のデザインについての意向確認があるのですが、世界一美しいコンピュータをオマージュした配色にして欲しいとお願いしました。妙なオーダーにも関わらずデザイナーさんが素晴らしい表紙を作成してくれ、個人的に満点の仕上がりです。

image

技術書典での先行販売

本書の発売日は11月21日だったのですが、都内の大型書店では1週間ほど早く先行販売が行われ、11月15日に池袋で開催された「技術書典19」においても同様に先行販売が実施されました。技術書典は技術同人誌の即売会なのですが、前回から商業出版された書籍を扱う特設ブース「技術書店」が設置され、そちらに本書も並べていただけることになりました。こちらが「技術書店」ブースの様子なのですが、本書だけ明らかに多く積まれており、売り子さんからも「マイナビ出版さん、気合入ってるみたいですよ!」というお言葉をいただきました。スペースに限りがあるなかで20冊ほど並べていただいたのは大変光栄なのですが、正直なところ「これだけ並べてもらってさっぱり売れなかったらどうしよう...」という不安な気持ちでいっぱいでした。

image

お目当てのブースを回りながらも、こちらのブースの様子が気になって仕方なく何度も立ち寄る不審者になっていたのですが、売り子さんが気を利かせて「あちらに著者さんいるのでサインもらえますよ!」と声がけをしてくれたことにより突発的にサイン会(?)のような事象が発生しました。こんなこともあろうかと夜中にこっそりサインを考えておいて本当に良かったです。そんなこんなで、当初の不安をよそに閉場を前にして完売を見届けることができました。最後の一冊をお迎えいただいた際に、技術書店ブース内の皆さんから拍手をいただくという大変エモい体験もさせていただきました。本当にありがとうございました。

image

カテゴリランキングの強敵

Amazonではカテゴリ毎に売れ筋ランキングを集計しており、そのカテゴリで1位になると「ベストセラー」のタグが付与されます。欲しいです、ベストセラーの称号。Xにて出版を告知したタイミングでたくさんの反応をいただいたことから、好調なスタートを切ることができ発売直後から「UNIXオペレーティングシステム」のカテゴリで上位にランクインしていました。ベストセラーの称号まであと一歩というところなのですが、実はこの「UNIXオペレーティングシステム」のカテゴリにはとんでもない強敵が潜んでいるのでした。

image

書籍の「UNIXオペレーティングシステム」カテゴリのトップに君臨している軟式野球ボール。人気商品のようでなかなか追い抜くことができません。どうやらこのカテゴリの宿命のようで、同じようにこの軟式野球ボールによってベストセラーを阻まれた著者が他にもいらっしゃるようでした。

なお、皮肉にもこれを嘆いたポストが拡散されたことにより本書の売上が伸び、1位の座を奪ってベストセラーの称号を獲得することができたのでした(翌日には首位を奪還されてしまったため儚い夢でした)。

image

重版出来!

なんと、大変ありがたいことに先行販売から2週間経過した時点で重版決定の連絡を頂きました。20年前に書いた1冊目の本は重版をまたずに絶版になってしまったのですが、今回はこんなにも早く重版が決まったことに驚きました。大喜びで再度校正を行い、初版で見逃してしまっていた誤字脱字など修正してあります。

image

おわりに

本書をお迎えいただいた皆様、ありがとうございます。また、この記事をきっかけに少しでも興味を持っていただけた方には、ぜひ書店でお手にとってみていただけると嬉しいです。

OS自作やプログラミング言語自作のように、「プロトコルスタック自作」が新たな技術の楽しみとして盛り上がっていくことを心から期待しています。本書が、読者のみなさんのチャレンジ精神や好奇心を満たす一助となれば幸いです。

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。

おすすめ

合わせて読みたい

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。