目次
第1章 本書で扱うプロトコル
1-1 ネットワークプロトコルのおさらい
- イーサネット:MAC(Media Access Control)アドレス
- ARP(Address Resolution Protocol)
- IP(Internet Protocol)
- ICMP(Internet Control Message Protocol)
- UDP(User Datagram Protocol)
- DHCP(Dynamic Host Configuration Protocol)
- TCP(Transmission Control Protocol)
1-2 階層化されたネットワークプロトコルのイメージ
- TCPでコネクトするときに流れるデータは?
第2章 pingのやり取りが可能なホストプログラムを作ろう ~仮想IPホストプログラム:第一段階
2-1 仮想IPホストの第一目標
- 実現する機能
- 設定ファイル
- スレッドの構成
- 関数の構成
- ソースファイルの構成
2-2 プログラムのメイン処理 ~main.c
- ヘッダファイルのインクルードと変数の宣言
- 受信処理
- コマンドの入力処理を行う
- 終了処理を行う
- インターフェースの情報を出力する
- main関数の記述
2-3 パラメータを読み込んで格納する ~param.c,param.h
- 必要な値を定義する
- パラメータ情報を保持する構造体を定義する
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- パラメータのデフォルト値をセットしてファイルから読み込む
- IPアドレスとサブネットのチェック
2-4 ネットワークユーティリティ関数を準備する ~sock.c,sock.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルード
- チェックサムを計算する
- MACアドレスを調べる
- 処理を一時待機させる
- ソケットをPF_PACKETとして初期化して送受信に備える
2-5 イーサネットフレームの送受信を行う ~ether.c,ether.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- 文字列とバイナリの変換
- 16進ダンプを行う
- イーサネットフレームを表示する
- イーサネットの送受信と内容のチェック
2-6 宛先MACアドレスを調べてARPテーブルにキャッシュする ~arp.c,arp.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- ARPヘッダのIPアドレスを文字列に変換する
- ARPヘッダを表示する
- ARPテーブルへデータを追加する
- ARPテーブルを削除する
- ARPテーブルを検索する
- ARPテーブルを表示する
- 宛先MACアドレスを調べる
- イーサネットにARPパケットを送信する
- Gratuitous ARPを送信する
- ARP要求を送信する
- IPアドレスの重複をチェックする
- ARPパケットを受信する
2-7 IPパケットの送受信処理を行う ~ip.c,ip.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- IPヘッダを表示する
- IP受信バッファを初期化してデータを追加する
- IP受信バッファを削除する
- IP受信バッファを検索する
- IPパケットを受信する
- IPパケットをイーサネットに送信する
- IPパケットを送信する
2-8 ICMPパケットの送受信を行う ~icmp.c,icmp.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- ICMPヘッダを表示する
- ICMPエコー応答を送信する
- ICMPエコー要求を送信する
- 受信したICMPパケットを処理する
- ICMPエコー応答をチェックする
2-9 コマンドを解析して処理する ~cmd.c,cmd.h
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- コマンドごとに処理を行う
- 各コマンド処理への分岐
2-10 仮想IPホストプログラムを実行する
- Makefile:makeファイル
- ビルド
- 設定ファイルの準備
- 実行する
2-11 まとめ
- コラム 本書誕生のきっかけ
第3章 UDP通信に対応させ,DHCPクライアント機能を実装しよう ~仮想IPホストプログラム:第二段階
3-1 仮想IPホストの第二目標
- 実現する機能
- 設定ファイル
- スレッド構成
- 関数構成
- ソースファイル構成
3-2 メイン処理に,UDPに関する処理を追加する ~main.c
- UDP,DHCP関連のヘッダファイルを追加インクルードする
- 終了時にリース解放を行う
- リース時間情報を設定する
3-3 設定情報にDHCP関連の情報を追加する ~param.c,param.h
- リース時間の変数を宣言する
- リース時間を読み込む
3-4 IPパケットの処理にUDPパケットの送受信を追加する ~ip.c,ip.h
- UDP関連のヘッダファイルをインクルードする
- UDPパケットの受信処理を追加する
3-5 ICMPパケットの処理にUDPで必要な処理を追加する ~icmp.c,icmp.h
- ICMP Destination Unreachableの関数を宣言する
- 到達不能メッセージを送信する
3-6 UDPのコマンド処理を追加する ~cmd.c,cmd.h
- UDP関連のプロトタイプ宣言
- UDP関連のヘッダファイルをインクルードする
- 文字列データを作成する
- IP割り当ての情報を表示する
- UDPテーブルの状態を表示する
- UDPに関するコマンドを処理する
- UDPコマンド処理への分岐を追加する
3-7 UDPの処理を行う ~udp.h,udp.c
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- UDPヘッダ情報を表示する
- チェックサムの計算を行う
- UDPテーブルの追加,検索,表示をする
- 空きポートの検索
- 受信ポートを準備する
- 受信ポートをクローズする
- UDPの送信を行う
- UDPの受信処理を行う
3-8 ネットワークアドレスを動的に割り当ててもらう ~dhcp.h,dhcp.c
- 定数や構造体を定義する
- 関数のプロトタイプ宣言
- ヘッダのインクルードと変数の宣言
- DHCPパケットの情報をオプションごとに表示する
- DHCPのオプションの処理
- DHCPリクエストデータを作成する
- DHCP各種送信処理
- 受信したDHCPパケットを解析する
3-9 仮想IPホストプログラムを実行する
- Makefile:makeファイル
- ビルド
- 設定ファイルの準備
- 実行
3-10 まとめ
第4章 TCP機能の基本機能を追加しよう ~仮想IPホストプログラム:第三段階
4-1 仮想IPホストの第三目標
- 実現する機能
- 設定ファイル
- スレッド構成
- 関数構成
- ソースファイル構成
4-2 メイン処理に,TCPに関する処理を追加する ~main.c
- TCP関連のヘッダファイルを追加インクルードする
- 終了時にTCP接続を切断する
- 最大セグメントサイズを表示する
4-3 設定情報にTCP関連の情報を追加する ~param.c,param.h
- デフォルト値の定義と最大セグメントサイズの変数の追加
- TCP用のヘッダをインクルードする
- 最大セグメントサイズのデフォルト値を設定する
- 最大セグメントサイズを読み込む
4-4 IPパケットの処理にTCPパケットの送受信を追加する ~ip.c,ip.h
- TCP関連のヘッダファイルをインクルードする
- TCPパケットの受信処理を追加する
4-5 TCPのコマンド処理を追加する ~cmd.c,cmd.h
- TCP関連のプロトタイプ宣言
- TCP関連のヘッダファイルをインクルードする
- データの生存時間や転送時間などの設定値を表示する
- TCPテーブルの状態を表示する
- TCPに関するコマンドを処理する
- TCPコマンド処理への分岐を追加する
4-6 TCPの処理を行う ~tcp.h,tcp.c
- 関数のプロトタイプ宣言
- ヘッダファイルのインクルードと変数の宣言
- TCPヘッダの情報を表示する
- TCP状態の文字表記を得る
- チェックサムの計算を行う
- TCPテーブルの追加,検索,表示をする
- 空きポートの検索
- 接続受付準備を行う
- ポートをクローズする
- SYN,FIN,RST,ACKの送信を行う
- 直接宛先指定でRSTを送信する
- 接続を行う
- 接続を解除する
- データを送信する
- TCPの受信処理を行う
4-7 仮想IPホストプログラムを実行する
- Makefile:makeファイル
- ビルド
- 設定ファイルの準備
- 実行