どんな本か
Rustを使い,「TCPセグメントが1つ送信できる」という段階から「自作TCPを使って画像ファイルを送信できる」という段階まで少しずつTCPの実装を作成していく本です.
「Rustで始めるTCP自作入門」を技術書典10で販売しています!RustでTCP実装を作り,エコーサーバやファイルアップローダをその上で動かします.Rustで何か作りたい人,TCPの入門書を読んで中身が気になった人はどうぞ!
— 電気ひつじ@技術書典10/Rustで始めるTCP自作入門 (@teru0x1) December 27, 2020
拡散していただけると喜びます!
#技術書典 https://t.co/zOlDxBTTya pic.twitter.com/9Ln3VTWR1b
最終的に出来上がるもの
自作TCPの上で次のアプリケーションが動くことを目標にしています.
- エコーサーバ,エコークライアント
- 文字列のやりとりを行う
- サーバは複数のクライアントを同時にハンドリングする
- ファイルサーバ,クライアント
- アップロード機能のみ
- クライアントから数MBのファイルをサーバにアップロードする
- 少しくらいパケットがロスしても問題なく完了する
これらのアプリケーションを作るにあたって,自作TCPにおいて作成する機能は主に次の通りです.
listen
,accept
,connect
,send
,recv
,close
といった基本的なAPI- 再送制御
- 順序制御
- スライディングウィンドウ
対象読者について
- Rustの基本的な文法を知っている人("The Rust Programming Language(https://doc.rust-jp.rs/book-ja/)"の内容が大体わかる)
- TCP/IPの基本的な知識がある,またはいつでも参照できるよう入門書(マスタリングTCP/IPなど)が手元にある人
- Linux開発環境が用意できて,それ関する基本的な知識(コマンド操作など)がある人
- ネットワークプログラミングに興味のある人
- Rustで何か作ってみたい人
となっています.Rustの文法そのものに関する説明は本書には無いので,基本的な文法は抑えてから読むのをお勧めします.それほど高度な文法は使われていないため,リファレンスがあれば読み進めるには問題ないと思います.やや難解なところは都度解説を入れています.
ネットワークソフトウェアやTCPそのものに関する解説も少ししか登場しません.「コネクション」,「確認応答」といった用語は知ってる前提として,「それらをどうプログラムとして表現するか」という部分に重きをおいて解説しています.
各章について
1章
1章は基礎編です.std::net
にあるTCPのソケットを使ってエコーサーバを作り,アプリケーションからTCPの挙動を観察します.この観察を元に,TCP実装に必要となりそうな要素を考えてきます.また,生ソケットといった実装に必要な知識についても紹介しています.
2章
2章は準備編です.LinuxのNetwork Namespaceを利用して,TCP実装に用いる環境の構築を行います.
3章
3章がメインとなる実装編です.小さなTCPセグメントを送信するところから始まり,スリーウェイハンドシェイク,送信,受信,切断の機能を徐々に追加していきます.最終的には,少しのパケットロスが生じる環境下で画像ファイルを送信することができるようになります.
4章
4章は振り返り編です.3章で作った実装を眺めながら,TCPのパフォーマンスに影響を与える要素や仕様が持つ問題点,及びそれを解決すべく生まれたQUICプロトコルについて解説します.
頒布先リンク
書籍で解説しているソースコード
ソースコードは環境構築スクリプトと共に公開しています.どんなものが出来上がるのか知りたいという方は下記リンクからどうぞ.
おわりに
現時点で200部ほど買って頂いています(ありがとうございます).買ってくださった方は感想・作ってみた・批判・高評価・低評価などを呟くなりブログに書くなりして頂けると励みになるのでよろしくお願い致します!