ルーター自作でわかるパケットの流れ
~ソースコードで体感するネットワークのしくみ

書籍の概要

この本の概要

ネットワークはどのようにつながるのか,「パケットの気持ちになって」考えてみたことはありますか? 本書では,パケットキャプチャ,ブリッジ,ルーターを「プログラムとして」作りながら,パケットの流れを体感理解。ネットワークの理解がより深まるうえ,「低レイヤーでのネットワークプログラミングのテクニック」「ネットワークで実現したいことを幅広く考えられる力」「障害発生時に問題を切り分ける力」も身につきます。

こんな方におすすめ

  • ネットワークの仕組みを頭ではなく体で覚えてみたい方
  • ネットワーク機器を自由にカスタマイズできる基礎知識を身につけたい方
  • リンクレイヤープログラミングを知りたい方

著者の一言

「ブリッジやルーターはハードウェアで,中では電気的な処理が行われているのだろう」と,ブラックボックス的に考えている人は多いのではないでしょうか。リピーターは電気的な中継だけともいえますが,ブリッジはMACアドレスによりパケットを配信するポートを選択しますし,ルーターはパケットの書き換えや,経路の選択,MACアドレスの解決など,さまざまな処理を行っています。そしてそれらは基本的にソフトウェアで実現可能なことです。

その気になればすぐに作って動かして試してみることができるのが,ソフトウェアの最大の魅力です。ネットワークの難しい理屈や幅広い知識を身につけるよりも,まずは作って動かしてみると様子が具体的に見えてきます。ブリッジやルーターを自作して,本当にパケットを中継しながらイーサネットの理解を深めてみましょう。

本書に関するお知らせ

本書の公式ハッシュタグはrouter_jisakuです。

目次

第1章 ネットワーク機器は何をしているのか

1-1 ルーターやブリッジは何をしているのか

  • パケット送信の流れ
  • ブリッジとルーターはどこが違うのか

1-2 ネットワークの基礎知識

  • プロトコル
  • 階層
  • パケット
  • Ethernetパケット
  • ARPパケット
  • IPパケット
  • ICMPパケット
  • コラム ネットワークプログラミングの魅力

第2章 リンクレイヤープログラミングの基本

2-1 データリンク層を扱うための基本

  • プログラムからデータリンク層を扱うには
  • 処理の流れ
  • 関数の構成
  • サンプルソース

2-2 作成したプログラムを実行する

  • Makefile
  • ビルド
  • 実行
  • 受信パケットの詳細はPCAPで
  • コラム OSの違いとリンクレイヤープログラミング

第3章 パケットキャプチャを作ってみる

3-1 リンクレイヤーからのパケットを解析する

  • 処理の流れ
  • 関数の構成

3-2 キャプチャのメイン処理 ~サンプルソース1 pcap.c

  • ヘッダファイルのインクルード
  • データリンク層を扱うディスクリプタを得る
  • Ethenetヘッダの内容を表示する

3-3 パケットを解析する ~サンプルソース2 analyze.c

  • ヘッダのインクルード
  • 各パケットを解析する

3-4 内容表示用関数を記述する ~サンプルソース3 print.c

  • ヘッダファイルをインクルードする
  • アドレスデータを文字化する
  • 各ヘッダを表示する

3-5 チェックサムをチェックする ~サンプルソース4 checksum.c

  • ヘッダファイルをインクルードする
  • 疑似ヘッダを定義する
  • チェックサムを計算する
  • サンプルソースに含まれる関数のプロトタイプ宣言

3-6 パケットキャプチャで解析を実行する

  • Makefile
  • ビルド
  • 実行
  • “自力で”パケット解析の練習を!

第4章 ブリッジを作ろう

4-1 ブリッジ作りでEthernetパケットの扱いに慣れる

  • 環境
  • 処理の流れ
  • 関数の構成

4-2 ブリッジのサンプルソースを見る

  • main.c
  • netutil.c

4-3 作成したブリッジを実行する

  • Makefile
  • ビルド
  • 実行
  • スイッチングHUB化するには
  • 意外と広いブリッジの応用範囲
  • コラム ネットワークシステムをリリースする時の緊張

第5章 ルーターを作ろう

5-1 ルーターの仕組みを知る

  • パケットの加工
  • 送信先の判定
  • 送信先MACアドレスの調査
  • MACアドレスの書き換え
  • 送信先の判定
  • 送信先MACアドレスの調査
  • 環境
  • 処理の流れ
  • 関数の構成
  • MACテーブル/送信バッファ/送信待ちデータ

5-2 ARPと送信待ちデータ関連のソースを追加する ~サンプルソース1 base.h

  • ネットワークインタフェースの情報
  • ルーターの振る舞い

5-3 ルーターのメイン処理を記述する ~サンプルソース2 main.c

  • ヘッダファイルのインクルード
  • 動作パラメータを保持する
  • デバッグ用出力のON/OFF
  • パケットの送受信と内容のチェック
  • メイン関数の記述

5-4 ネットワーク関連の関数を記述する ~サンプルソース3 netutil.c

  • ヘッダファイルのインクルード
  • ネットワークインターフェースの情報を得る
  • Ethernetヘッダを表示する
  • チェックサムを計算する
  • ARPリクエストを送信する
  • 関数のプロトタイプを宣言する

5-5 IPアドレスとMACアドレスを紐付ける ~サンプルソース4 ip2mac.c

  • ヘッダファイルのインクルード
  • 独自ARPテーブルの検索
  • データの送受信
  • 関数のプロトタイプ宣言

5-6 送信待ちバッファのデータを管理するための関数を記述してい送信待ちバッファのデータを管理する ~サンプルソース5 sendBuf.c

  • ヘッダファイルのインクルード
  • MACアドレスが解決できないときの処理
  • 関数のプロトタイプ宣言

5-7 ルーターを実行する

  • Makefile
  • ビルド
  • 実行
  • 応用 ~ルーター自作のメリット

著者プロフィール

小俣光之(こまたみつゆき)

日本シー・エー・ディー株式会社 代表取締役社長。

1989年新卒で入社後,プログラマとして仕事を続け,2005年11月から社長となるがプログラマも兼務している。以前はCADシステムやWEB,データベースなどのプログラミングもしていたが,最近はネットワーク関連の製品・特注品の開発を中心に仕事をしている。

UNIX系のネットワークプログラミングにこだわり,プログラミングの著書を7冊執筆。また,プログラマの仕事のすばらしさを啓蒙することに目覚め,『プログラミングでメシが食えるか!?』(秀和システム 刊)を執筆。さらに技術者を活かすリーダーの心得をまとめた記事をITmedia エンタープライズに連載し,著書としてまとめた『ドジっ娘リーダー奮闘記』(秀和システム 刊)を執筆。メンバーとの共著『Linuxネットワークプログラミングバイブル』(秀和システム 刊)に続き,本書は11冊目の著書となる。

【Blog】プログラマー社長のブログ(ITmediaオルタナティブ・ブログ)

【Twitter】@mkomata