本文へスキップします。

【参】モーダルJS:読み込み
書籍DB:詳細

基礎からわかるTCP/IP ネットワーク実験プログラミング(第2版)

基礎からわかるTCP/IP ネットワーク実験プログラミング(第2版)

  • 著者村山 公保
  • 定価2,592円 (本体2,400円+税)
  • 判型A5
  • 400頁
  • ISBN978-4-274-06584-2
  • 発売日2004/10/23
  • 発行元オーム社

TCP/IPプロトコルの動作を実験プログラミングで学ぶ!

TCP/IPの動作メカニズムの詳細を理解するには、実際に動作を確認するためのプログラム作成し、解析することが最良の方法といえる。
この本では、IP、TCP、UDP、ICMP、IP(v6)などのヘッダを直接操作したり、生成するプログラムの作成をとおして、これらのプロトコルのもつ性質、メカニズムの本質を理解していく。
プログラムはC言語対応、OSは、FreeBSD、Linux対応。実験プログラムをとおしてプロトコルの詳細を学ぶのに最適の1冊。
2001年8月に発行された初版を、現状に合わせて改訂し、第2版として発行するもの。
はじめに
  本書使用上の注意
  ダウンロードサービスから入手できるファイル
第1章 TCP/IPプロトコルスタック入門
 1.1 TCP/IPプロトコルスタックの基礎
  1.1.1 TCP/IPネットワーク
  1.1.2 パケット交換の基礎
  1.1.3 ソフトウェアとハードウェア
  1.1.4 アプリケーションとオペレーティングシステム
  1.1.5 通信を制御する3つのソフトウェア
  1.1.6 プロトコルスタックとパケットの処理
 1.2 プロトコルスタックの詳細
  1.2.1 アドレスとプロトコルスタック
  1.2.2 アドレスの変換処理と表
  1.2.3 プロトコルスタックの内部処理
  1.2.4 クライアントサーバモデル
 1.3 プロトコルスタックの実現方法
  1.3.1 ソケット
  1.3.2 システムコールと内部の処理
  1.3.3 Raw IPとデータリンクアクセスインタフェース
  1.3.4 多重化とバッファ
第2章 TCP/IPプロトコルとヘッダの構造
 2.1 プロトコルヘッダと構造体
  2.1.1 プロトコルとヘッダ
  2.1.2 ヘッダと構造体とメモリ
  2.1.3 ヘッダ構造とCの型
  2.1.4 ビットフィールド、フラグによるヘッダの処理
  2.1.5 配列によるヘッダの処理
  2.1.6 メモリの整列(アライメント)
  2.1.7 バイトオーダ
 2.2 Ethernet
  2.2.1 Ethernetの基礎
  2.2.2 Ethernetのフレームフォーマットと構造体の定義
  2.2.3 Ethernetの基本動作
 2.3 ARP(Address Resolution Protocol)
  2.3.1 ARPの基礎
  2.3.2 ARPのパケットフォーマット
  2.3.3 ARPプロトコルの動作
 2.4 IP(Internet Protocol)
  2.4.1 IPの基礎
  2.4.2 IPヘッダとヘッダ構造体について
  2.4.3 ルーティングの基礎
  2.4.4 IPフラグメント
  2.4.5 IPフラグメントの問題点
  2.4.6 経路MTU探索
 2.5 ICMP(Internet Control Message Protocol)
  2.5.1 ICMPとは
  2.5.2 ICMPエコー要求・エコー応答メッセージ
  2.5.3 ICMP到達不能メッセージ
  2.5.4 ICMPリダイレクトメッセージ
  2.5.5 ICMP時間超過メッセージ
  2.5.6 共用体と実際のicmpパケット構造体
 2.6 UDP(User Datagram Protocol)
  2.6.1 UDPの概要
  2.6.2 UDPヘッダとヘッダ構造体について
 2.7 TCP(Transmission Control Protocol)
  2.7.1 TCPの概要
  2.7.2 TCPヘッダとヘッダ構造体について
  2.7.3 TCPのコネクションの確立
  2.7.4 TCPのコネクションの切断
  2.7.5 TCPによる信頼性の提供
  2.7.6 バッファサイズとウィンドウ
 2.8 チェックサム
  2.8.1 チェックサムが保証する内容
  2.8.2 チェックサムのアルゴリズム
  2.8.3 チェックサム計算プログラム
第3章 ソケット
 3.1 ソケットの概要
 3.2 ソケットで利用される構造体
 3.3 ソケットシステムコールによる処理の流れ
  3.3.1 UDPによる通信の場合
  3.3.2 TCPによる通信の場合
 3.4 ソケットシステムコールの詳細
  3.4.1 プロトコルの選択とアドレスの指定
  3.4.2 コネクションレス
  3.4.3 コネクション指向
  3.4.4 ソケットオプション
  3.4.5 DNS関連関数
  3.4.6 ポート番号関連関数
  3.4.7 IPアドレスを操作する関数
  3.4.8 Rawソケット(Raw IP)
  3.4.9 selectシステムコールによる多重処理
 3.5 UDPによる通信
  3.5.1 UDPサンプルプログラムの概要と使用方法
  3.5.2 実行例
  3.5.3 処理の流れ
  3.5.4 UDPサーバプログラムリスト
  3.5.5 UDPサーバプログラムリストの解説
  3.5.6 UDPクライアントプログラムリスト
  3.5.7 UDPクライアントプログラムリストの解説
 3.6 TCPによる通信
  3.6.1 TCPサンプルプログラムの概要と使用方法
  3.6.2 実行例
  3.6.3 処理の流れ
  3.6.4 TCPサーバプログラムリスト
  3.6.5 TCPサーバプログラムリストの解説
  3.6.6 TCPクライアントプログラムリスト
  3.6.7 TCPクライアントプログラムリストの解説
第4章 パケットモニタリング実験
 4.1 パケットモニタリングの基礎知識
  4.1.1 パケットモニタリングとその意味
  4.1.2 ハブとアドレス学習機能
  4.1.3 Promiscuous(無差別)モード
 4.2 データリンクアクセスインタフェース
  4.2.1 データリンクアクセスインタフェースとは
  4.2.2 Linuxのデータリンクアクセスインタフェース
  4.2.3 BPF(BSD Packet Filter)
 4.3 パケットモニタリングプログラム
  4.3.1 ipdumpの概要
  4.3.2 ipdumpの使用方法
  4.3.3 ipdumpプログラムの構造
  4.3.4 ipdumpプログラムの処理の流れ
  4.3.5 ipdumpプログラムリスト
  4.3.6 ipdumpプログラムリストの解説
第5章 TCP/IP通信の識別
 5.1 IPアドレスとポート番号
  5.1.1 通信の識別
  5.1.2 無効なIPアドレスやポート番号への通信
  5.1.3 ホストスキャンとポートスキャン
 5.2 ホストスキャンプログラム
  5.2.1 scanhostの概要
  5.2.2 scanhostの使用方法
  5.2.3 scanhostプログラムの構造と処理の流れ
  5.2.4 scanhostプログラムリスト
  5.2.5 scanhostプログラムリストの解説
 5.3 TCPポートスキャンプログラム
  5.3.1 scanport_tcpの概要
  5.3.2 scanport_tcpの使用方法
  5.3.3 scanport_tcpの実行例
  5.3.4 scanport_tcpプログラムの構造と処理の流れ
  5.3.5 scanport_tcpプログラムリスト
  5.3.6 scanport_tcpプログラムリストの解説
 5.4 UDPポートスキャンプログラム
  5.4.1 scanport_udpの概要
  5.4.2 scanport_udpの使用方法
  5.4.3 scanport_udpの実行例
  5.4.4 scanport_udpプログラムの処理の流れ
  5.4.5 scanport_udpプログラムリスト
  5.4.6 scanport_udpプログラムリストの解説
第6章 ARPの実験
 6.1 ARPの詳細
  6.1.1 ARPの動作
  6.1.2 同じIPアドレスのホストが2つあると何が起きるか
 6.2 ARPを使用した実験プログラム
  6.2.1 arpupdateの概要
  6.2.2 arpupdateの使用方法
  6.2.3 arpupdateの実行例
  6.2.4 arpupdateプログラムの構造と処理の流れ
  6.2.5 arpupdateプログラムリスト
  6.2.6 arpupdateプログラムリストの解説
第7章 IPとICMPの実験
 7.1 ルーティングテーブルと経路制御
  7.1.1 ルーティングテーブル
 7.2 redirectプログラム
  7.2.1 redirectの概要と仕組み
  7.2.2 redirectの使用方法
  7.2.3 redirectの実行例
  7.2.4 redirectプログラムの処理の流れ
  7.2.5 redirectプログラムリスト
  7.2.6 redirectプログラムリストの解説
 7.3 scanrouteプログラム
  7.3.1 scanrouteの概要と仕組み
  7.3.2 scanrouteの使用方法
  7.3.3 scanrouteプログラムの処理の流れ
  7.3.4 scanrouteプログラムリスト
  7.3.5 scanrouteプログラムリストの解説
第8章 TCPの実験
 8.1 TCPの詳細
  8.1.1 TCPと状態遷移
  8.1.2 状態遷移とコネクションの確立、切断
 8.2 TCP SYNプログラム
  8.2.1 tcpsynの概要
  8.2.2 tcpsynの使用方法
  8.2.3 tcpsynの実行例
  8.2.4 tcpsynプログラムの処理の流れ
  8.2.5 tcpsynプログラムリスト
  8.2.6 tcpsynプログラムリストの解説
 8.3 TCP RSTプログラム
  8.3.1 tcprstの概要
  8.3.2 tcprstの使用方法
  8.3.3 tcprstの使用例
  8.3.4 tcprstプログラムリスト
  8.3.5 tcprstプログラムリストの解説
 8.4 TCP JACKプログラム
  8.4.1 tcpjackの概要
  8.4.2 tcpjackの使用方法
  8.4.3 tcpjackの使用例
  8.4.4 tcpjackプログラムリスト
  8.4.5 tcpjackプログラムリストの解説
第9章 IPv6による通信実験
 9.1 IPv6とは
  9.1.1 IPv6とは
  9.1.2 IPv6のヘッダ構造
  9.1.3 IPv6のために追加された構造体
  9.1.4 IPv6をサポートするために追加された関数
 9.2 IPv6を使用した実験プログラム
  9.2.1 概要
  9.2.2 使用方法
  9.2.3 IPv6対応TCPサーバプログラムリスト
  9.2.4 IPv6対応TCPサーバプログラムリストの解説
  9.2.5 IPv6対応TCPクライアントプログラムリスト
  9.2.6 IPv6対応TCPクライアントプログラムリストの解説
 参考文献
 索引

 ここでは、本書の中で取り上げたソースコード、図面ファイルを提供しています。以下のリンクよりダウンロードしてください。

  • 本ファイルは、本書をよくお読みの上ご利用ください。
  • プログラムのソースコード、図面ファイルは、本書の著者である村山公保氏が著作権を保有します。本ファイルを利用したことによる直接あるいは間接的な損害に関して、著作者およびオーム社はいっさいの責任を負いかねます。利用は利用者個人の責任において行ってください。また、ソフトウェアの動作・実行環境、操作についての質問には一切お答えすることはできません。
source05.tar.gz tar.gz形式で圧縮したソースコードです(約73KB)。
(macOSでbpf使用時の安定性を向上:2019年6月14日)
source04.tar.gz tar.gz形式で圧縮したソースコードです(約73KB)。
(第2版第4刷対応:2013年7月8日)
source03.tar.gz tar.gz形式で圧縮したソースコードです(49KB)。
(第2版第2刷対応:2007年5月25日)
KISO_TCP_EXP_SOURCE_CHANGE02.pdf 本書収録のソースコードは、第2版第2刷で一部修正・変更されています。本PDFファイルは、第2版第1刷から第2版第2刷での修正・変更箇所をまとめたものです(40KB)。
eps02.tar.gz 本書内で紹介した図面類ファイルです(EPS形式;約17MB)。
tif02.tar.gz 本書内で紹介した図面類ファイルです(TIF形式;約21MB)。