TCP/IPスタックをコーディングする 1: イーサネットとARP (2016)
(saminiir.com)-
TCP/IPスタックの実装
- TCP/IPスタックを自分で実装するのは複雑な作業に見えるかもしれません。
- TCPの中核仕様は、TCPヘッダーのパース、状態機械、輻輳制御、再送タイムアウト計算で構成されます。
- このブログシリーズでは、Linux上で最小限のユーザー空間TCP/IPスタックを実装する予定です。
- この投稿とソフトウェアの目的は、ネットワークおよびシステムプログラミングをより深く学ぶための教育的なものです。
-
TUN/TAPデバイス
- Linuxカーネルで低レベルのネットワークトラフィックを横取りするためにTAPデバイスを使用します。
- TUN/TAPデバイスはユーザー空間プログラムから簡単に設定でき、OpenVPNのようなさまざまなプログラムで使われています。
- TAPデバイスを使うと、イーサネットバッファにデータを読み書きできます。
-
イーサネットフレーム形式
- イーサネットは、LANでコンピューターを接続するさまざまなネットワーク技術の基盤です。
- イーサネット標準は1980年に初めて公開されて以来、大きく発展してきました。
- イーサネットフレームヘッダーはC構造体として宣言でき、DMAC、SMAC、Ethertype、およびペイロードフィールドを含みます。
-
イーサネットフレームのパース
- GNU Cコンパイラが構造体のメモリレイアウトを最適化しないように、
packed属性を使用します。 - イーサネットフレームをパースして処理する全体的なシナリオはシンプルです。
- GNU Cコンパイラが構造体のメモリレイアウトを最適化しないように、
-
アドレス解決プロトコル (ARP)
- ARPは、48ビットのイーサネットアドレスをプロトコルアドレスに動的にマッピングするために使われます。
- ARPパケット形式は比較的シンプルで、ハードウェアタイプ、プロトコルタイプ、ハードウェアサイズ、プロトコルサイズ、opcode、およびデータフィールドを含みます。
-
アドレス解決アルゴリズム
- ARPの結果を保存するために
translation tableを使い、重複するARPリクエストを避けます。 - ARP実装の最終的なテストは、ARPリクエストに正しく応答するかを確認することです。
- ARPの結果を保存するために
-
結論
- イーサネットフレーム処理とARPの最小実装は比較的容易で、数行のコードで可能です。
- プロジェクトのソースコードはGitHubで確認できます。
- 次の投稿では、ICMPエコーと応答(ping)、およびIPv4パケットのパース実装を引き続き扱う予定です。
まだコメントはありません。