このプロジェクトは、RustでTCP/IPプロトコルを段階的に実装しながら、ネットワークプログラミングの基礎を学ぶハンズオン形式の学習コンテンツです。
- TCP/IPプロトコルの仕組みを実装を通じて理解する
- RFCドキュメントを読みながら、仕様に基づいた実装を行う
- ネットワークプログラミングの基礎知識を身につける
- 段階的に機能を追加し、完全なTCPスタックを構築する
- Step 1: 基本的なソケット通信
- Step 2: TCPヘッダーの解析
- Step 3: 3-way handshake の実装
- Step 4: 接続状態管理(TCP State Machine)
- Step 5: データ送受信とシーケンス番号
- Step 6: ACK処理とウィンドウサイズ
- Step 7: タイムアウトと再送制御
- Step 8: 順序制御と重複検出
- Step 9: フロー制御の実装
- Step 10: 輻輳制御(Slow Start、Congestion Avoidance)
- Step 11: 高速再送とFast Recovery
- Step 12: 接続終了処理(4-way handshake)
| Step | 機能 | 主要RFC | 章/セクション |
|---|---|---|---|
| 1-3 | 基本通信・Handshake | RFC 9293 | Section 3.2, 3.8.1 |
| 4 | 状態管理 | RFC 9293 | Section 3.2, 3.2.3 |
| 5-6 | データ転送・ACK | RFC 9293 | Section 3.9 |
| 7-8 | 再送・順序制御 | RFC 9293 | Section 3.9 |
| 9 | フロー制御 | RFC 9293 | Section 3.9 |
| 10-11 | 輻輳制御 | RFC 5681 | Section 3, 4 |
| 12 | 接続終了 | RFC 9293 | Section 3.6 |
- Rust 1.70+
- Linux/macOS(raw socketの利用のため)
sudo権限(raw socketアクセス用)
# プロジェクトのクローン
git clone <repository-url>
cd rust-tcp
# 依存関係のインストール
cargo build
# テストの実行
cargo test
# 特定のステップの実行例
sudo cargo run --bin step01各ステップは以下の構成になっています:
src/
├── step01/ # Step 1: 基本的なソケット通信
│ ├── main.rs # メイン実装
│ ├── README.md # ステップ詳細説明
│ └── tests.rs # テストコード
├── step02/ # Step 2: TCPヘッダー解析
│ ├── main.rs
│ ├── tcp_header.rs
│ ├── README.md
│ └── tests.rs
├── ...
├── common/ # 共通ライブラリ
│ ├── packet.rs # パケット操作
│ ├── socket.rs # ソケット操作
│ └── utils.rs # ユーティリティ
└── lib.rs
各ステップには以下のテストが含まれています:
- 単体テスト: 個別機能のテスト
- 統合テスト: ステップ間の連携テスト
- 実環境テスト: 実際のネットワーク通信テスト
# 全てのテストを実行
cargo test
# 特定のステップのテストを実行
cargo test step01
# 実環境テスト(要sudo権限)
sudo cargo test --test integration_tests- RFC読解: 各ステップ開始前に対応するRFCセクションを読む
- コード実装: ステップガイドに従って実装を進める
- テスト実行: 実装後にテストを実行して動作確認
- 動作検証: Wiresharkなどでパケットキャプチャして検証
- 振り返り: 実装とRFCの対応を確認
- Wireshark: パケットキャプチャと解析
- tcpdump: コマンドラインでのパケットキャプチャ
- netstat: 接続状態の確認
- ss: ソケット状態の確認
- RFC 793 - Transmission Control Protocol
- RFC 5681 - TCP Congestion Control
- RFC 6298 - Computing TCP's Retransmission Timer
- 「マスタリングTCP/IP」
- 「詳解TCP/IP」
- 「The Rust Programming Language」
バグ報告や改善提案は Issues でお願いします。
MIT License
Step 1から開始して、段階的にTCPスタックを構築していきましょう!
cd src/step01
cat README.md # Step 1の詳細な説明を確認