=== ch01.docx
[chap]1章　パケット解析とネットワークの基礎

コンピュータネットワーク上では、毎日数え切れないほどのトラブル－スパイウェアの感染といった単純なものからルータの設定エラーといった複雑なものまで－が発生しています。そのすべてを即座に解決するのは不可能ですが、こうしたトラブルの対処に必要な知識とツールをしっかり用意することで、最良の備えとなるはずです。
ネットワークのトラブルはすべてパケットレベルまで掘り下げることができます。そこでは、かわいらしい見た目のアプリケーションがその醜い実装をさらけ出し、信用できるように見えるプロトコルも悪意あるものであることを図らずも証明してしまうのです。ネットワークのトラブルを深く理解するためには、パケットレベルでの視点が不可欠です。パケットは嘘をつきません。紛らわしいメニュー構造や、目を引くグラフィック、信頼できない社員によってごまかされることもありません。パケットレベルでは、（暗号化によるもの以外）いかなる隠し立てもできません。パケットレベルでできることが増えるほど、ネットワークを管理下におき、トラブルを解決できるようになります。これがパケット解析の世界です。
本書はパケット解析の世界に頭から飛び込んでいきます。現場に即したシナリオを通じて、ネットワーク遅延との戦い方、アプリケーション起因のボトルネックの特定、ハッカーの追跡術を学んでいきます。本書を読み終えるころには、高度なパケット解析の技術を体得しているはずです。その技術を用いれば、ネットワーク上で起こる多くの困難なトラブルを解決することができるでしょう。
本章では、ネットワーク通信に焦点をあて、基本的なところから始めることで、様々なシナリオに対応する上での基礎を習得することができるでしょう。

パケット解析とパケットスニッファ

パケット解析－しばしばパケットスニッフィング（パケットキャプチャ）やプロトコル解析と呼ばれることもあります－は、ネットワーク上で起こっている事象の理解を助けるために、ネットワークを流れるデータをキャプチャして解析する作業を意味します。パケット解析は通常パケットスニッファ（監訳注：「スニファ」と表記されることもありますが、本書ではスニッファに統一します）を使って行います。これは、ケーブルを行き来している生のネットワークデータをキャプチャするツールです（監訳注：「スニファー」と呼ぶことがありますが、これは本来製品の名前で（本書執筆時点では米ネットワーク・アソシエイツ・テクノロジーの）登録商標です。以前商用のパケットスニッファといえば「スニファー」がデファクトスタンダードであった時代があったため、現場では広く用いられていますが、注意してください）。パケット解析は次のようなことに有用です。

ネットワーク特性の把握
誰がネットワーク上にいるかの確認
誰、もしくは何が帯域を使っているかの確認
ネットワーク使用がピークになる時間の特定
潜在的な攻撃や悪意ある行為の特定
安全性が低くリソース喰いなアプリケーションの調査

パケットスニッファには、フリーと商用どちらも多くの種類があり、各々異なる設計思想を持っています。著名なものとしては、tcpdump、OmniPeek、Wireshark（本書で扱う） があります。OmniPeekとWiresharkはGUIがあります。

パケットスニッファの評価
使用するパケットスニッファを決めるには、以下を含むいくつかの観点を考慮する必要があります。

サポートされているプロトコル
パケットスニッファはさまざまなプロトコルを解析することができます。ほとんどのスニッファは、一般的なネットワーク層のプロトコル（IPv4やICMPなど）、トランスポート層のプロトコル（TCPやUDPなど）、アプリケーション層のプロトコル（DNSやHTTPなど）を解析することができます。一方で、あまり一般的でないものや、新しいもの（IPv6、SMBv2、SIPなど）はサポートしていない場合があります。スニッファを選ぶときは、使用する予定のプロトコルがサポートされているかを確認しましょう。

操作性
パケットスニッファの画面、インストールの容易性、一般的な機能の操作性を検討しましょう。経験に応じたプログラムを選択することが肝要です。パケット解析の経験がほとんどないのであれば、tcpdumpのような高度なコマンドラインのパケットスニッファは避けた方がよいでしょう。逆に経験豊富なら、高度なプログラムのほうがよいかもしれません。パケット解析の経験を積むと、シナリオによっては複数のパケットスニッファを組み合わせるのがよいという場合もあるかもしれません。

コスト
パケットスニッファの素晴らしいところは、商用の製品に匹敵するフリーの製品が数多く存在することです。商用製品とフリーの製品のもっとも大きな違いは、レポーティング機能です。商用製品には、通常何らかのレポーティング機能がありますが、フリーの製品にはまず含まれていません。

サポート
パケットスニッファの基本を習得しても、問題を解決するためのサポートが必要になるときがあるでしょう。サポートを評価する際には、開発者向けのドキュメント、公開されているフォーラムやメーリングリストを探してみてください。Wiresharkのようなフリーのパケットスニッファでは開発者向けのサポートはあまりないかもしれませんが、ユーザのコミュニティがそれを補ってあまりある場合がよくあります。ユーザや貢献者のコミュニティでは、議論のための掲示板、Wikiやブログを提供しており、使用しているパケットスニッファについて深く知るための手助けをしてくれます。

OSのサポート
残念ながら、すべてのパケットスニッファがどんなOSでも使えるわけではありません。サポートが必要なOSすべてで使えるものを選びましょう。コンサルタントであれば、さまざまなOSでパケットをキャプチャし解析する必要があるので、多くのOSで動作するツールが必要になります。あるコンピュータ上でキャプチャしたパケットを別のコンピュータで参照する場合についても考えておく必要があります。OSごとの違いのために、通信機器ごとに異なるプログラムを使わざるをえない場合もあります。


パケットスニッファの仕組み
パケットスニッファの処理は、ソフトウェアとハードウェアが連携して行われます。この処理は以下の3つのステップに分けることができます。

キャプチャ
最初のステップでは、パケットスニッファがケーブルからバイナリの生データをキャプチャします。これは通常、キャプチャしたいネットワークに接続されているネットワークカードをプロミスキャスモードに切り替えることによって行われます。プロミスキャスモードでは、自分が宛先になっているトラフィックだけではなく、ネットワークセグメント上を流れるすべてのトラフィックをネットワークカード経由でキャプチャすることができます。

変換
次のステップでは、キャプチャされたバイナリのデータを参照可能な形式に変換します。高度なコマンドラインベースのスニッファの多くは、ここまでしかやりません。ここでは、非常に基本的な変換までしか行われません。解析のほとんどはユーザに任されています。

解析
最後のステップでは、変換されたデータが実際に解析されます。スニッファは、キャプチャされたデータを元にプロトコルを特定し、プロトコルに応じた解析を開始します。


コンピュータはどのように通信するのか
パケット解析をきちんと理解するためには、コンピュータ同士がどうやって通信しているのかをきちんと理解することが必要です。この節ではOSI 参照モデル、ネットワークのデータフレーム、それらをサポートするハードウェアといったネットワークプロトコルの基礎を勉強します。


プロトコル
現在のネットワークは、様々なプラットフォームで動作する多種多様なシステムで構成されています。これらの間で通信を行うために、プロトコルと呼ばれる共通の言語が使われます。一般的なプロトコルとしては、TCP、IP、ARP、DHCPといったものがあります。プロトコルスタックとは、連携して動作するプロトコルを論理的にグループ化したものです。
プロトコルを理解するには、人の話し言葉や書き言葉を司っている規則と同じようなものだと捉えてみるのがよいでしょう。すべての言語には、どのように動詞を活用するか、どのようにあいさつするか、どのように感謝するのが適切かといった規則があります。プロトコルも同じようなもので、どのようにパケットをルーティングするか、どのようにコネクションを開始するか、どのようにデータの受信を通知するかといった事項を定義しています。
プロトコルは機能に応じて単純にも複雑にもなり得ます。性格がまったく異なるプロトコルが数多く存在しますが、多くのプロトコルは以下のような機能を持っています。

コネクションの開始
コネクションを開始するのはクライアントか、サーバか。コネクション確立前にやりとりされるべき情報とは。

コネクションのオプションのネゴシエーション
このプロトコルの通信は暗号化されているか。通信するホスト間でやりとりされる暗号鍵は、どのように共有されるのか。

データのフォーマット
パケットに含まれるデータの順序は?受信した通信機器が処理するデータの順序は?

エラー検出と訂正
パケットが宛先に届くまでに時間がかかりすぎた場合、どうなるのか。サーバとの通信が短時間で確立できなかった場合、クライアントはどのように対処するのか。

コネクションの切断
あるホストに対して、別のホストとの通信の切断をどのように通知するのか。通信をきちんと終了するために最後にやりとりすべき情報は何か。


OSI参照モデル
プロトコルは、OSI参照モデルと呼ばれる業界標準の参照モデルを元に、機能ごとに分けられています。OSI参照モデルは、ネットワーク通信の処理を図1-1のような7つの階層に分けています。この階層モデルのおかげで、ネットワーク通信というものが理解しやすくなっています。最上層のアプリケーション層はネットワークのリソースにアクセスするプログラムそのものを表しています。最下層は物理層で、ネットワーク上で実際にデータの転送を行う層です。各層のプロトコルは、その上位層また下位層のプロトコルによってデータが適切に処理されるよう、連携して機能します。

図1-1　OSI参照モデルの7つの層の階層図
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層


注　
OSI参照モデルは1983年にISO（International Organization for Standardization ：国際標準化機構）によって、ISO7498として公開されました。OSI参照モデルは業界が推奨している標準以上のものではありません。プロトコルの開発者は、このモデルに厳密に準拠する必要はありません。実際、現存するネットワークモデルはOSI参照モデルだけではありません。たとえば、TCP/IPモデルとしても知られているDoD（Department of Defense ：米国国防総省）モデルを好む人もいます。

OSI参照モデルの各階層には、次のような固有の機能があります。

アプリケーション層（第7層）
OSI参照モデルの最上位層は、ユーザがネットワーク上のリソースにアクセスするための手段を提供します。これは通常エンドユーザから見える唯一の層であり、ネットワーク上のすべての活動の基点となるインターフェースを提供します。

プレゼンテーション層（第6層）
この層は、受信したデータをアプリケーション層が読み取ることのできる形式に変換します。この層でデータをエンコード、デコードする方法は、送受信するデータのアプリケーション層のプロトコルに依存します。この層では、データのセキュリティ維持のための暗号化や復号化も行います。

セッション層（第5層）
この層は2台のコンピュータ間の「対話」すなわちセッションを制御し、通信機器間のコネクションの確立、管理、切断を行います。セッション層は、コネクションが全二重か半二重かを制御するとともに、通信を唐突に遮断するのではなく適切に切断するための制御も行います。

トランスポート層（第4層）
トランスポート層の主要な目的は、下位層に信頼できるデータ転送サービスを提供することです。フロー制御、データの分割と再構築、誤り制御といった機能により、トランスポート層は2点間のデータのやり取りをエラーなしで行えるわけです。信頼性の高いデータ転送を担保することは極めて難しいため、OSI 参照モデルでは、1つの層をその目的に割り当てています。トランスポート層は、コネクション指向のサービスとコネクションレスのサービスの両方を提供します。ファイアウォールやプロキシサーバには、この層で動作するものもあります。

ネットワーク層（第3層）
この層は、物理的なネットワークを越えて転送されるデータのルーティングを提供します。OSI参照モデルの中でもっとも複雑な層の一つであり、ネットワーク上のホストの論理アドレス（IPアドレスなど）のアドレス指定（アドレッシング）を行います。この層では、パケットの分割や、場合によっては誤り検出も行います。ルータはこの層で動作します。

データリンク層（第2層）
この層は、物理的なネットワーク上でデータを転送する手段を提供します。主な機能は、物理的な通信機器を特定するためのアドレス指定スキーム（MACアドレスなど）を提供することです。ブリッジとスイッチはデータリンク層で動作する物理的な通信機器です。

物理層（第1層）
物理層はOSI参照モデルの最下層であり、ネットワーク上でデータを転送するための物理的な媒体です。この層では、電圧、ハブ、ネットワークアダプタ、リピータ、ケーブル仕様といった、用いられるハードウェアの物理的、電気的な特性を定義します。物理層は、コネクションを確立および切断し、通信リソースを共有する手段を提供し、信号をデジタルからアナログ、またはその逆に変換します。

OSI参照モデルの各層において、一般的に使用されているプロトコルの代表的なものを表1-1に示します。

表1-1　OSI参照モデルの各層で使用される代表的なプロトコル

層
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層

プロトコル
HTTP、SMTP、FTP、Telnet
ASCII、MPEG、JPEG、MIDI
NetBIOS、SAP、SDP、NWLink
TCP、UDP、SPX
IP、IPX
Ethernet、Token Ring、FDDI、AppleTalk

OSI参照モデルは標準として推奨される以上のものではありませんが、頭に入れておくべきです。本書を読み進めるにつれ、プロトコルの階層に応じて、ネットワークのトラブルに対する対処が変わることがわかるでしょう。ルータの問題は「第3層の問題」となり、ソフトウェアの問題は「第7層の問題」として扱われるのです。

注　本書の執筆中の議論で、あるユーザがネットワーク上のリソースにアクセスできないと文句を言ってきた話を同僚がしてくれました。このトラブルはユーザが間違ったパスワードを入力したために起きたもので、同僚はこれを「第8層の問題」と言っていました。第8層はユーザ層を意味する非公式な用語で、パケットを扱っている人々の間ではよく使われています。

OSI参照モデルにおいて、データの流れはどのようになっているのでしょうか。ネットワーク上を転送されるデータの流れは、送信側のシステムのアプリケーション層から始まります。データは各層ごとの方法でOSI参照モデルの7つの階層を送信側のシステムの物理層まで下っていき、受信側のシステムに送られます。受信側のシステムは物理層でデータを受信し、データは最上層のアプリケーション層まで受信側のシステムの各層を上がっていきます。
OSI参照モデルの各層でさまざまなプロトコルによって提供されるサービスは重複しません。言い換えると、ある層のあるプロトコルが提供しているサービスと同じものを、他の層の他のプロトコルが提供することはありません。異なる層のプロトコルが類似の目的のための機能を備えていたとしても、その働きは多少異なっています。
送信側と受信側のコンピュータで、同じ層のプロトコルは相補的な関係にあります。たとえば送信側のコンピュータの第7層のプロトコルが転送されるデータを暗号化する場合、受信側のコンピュータの第7層のプロトコルはデータを復号することを求められます。
図1-2は、通信している2台のコンピュータにおけるOSI参照モデルを図示したものになります。片方のコンピュータの最上層から最下層を通り、もう片方のコンピュータに到達した後その逆をたどることで通信が成立します。

図1-2　送信側と受信側のコンピュータの双方において、同じ階層構造で機能するプロトコル

アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層

アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層

OSI参照モデルの各層は、その直上または直下の層としか通信できません。たとえば、第2層は第1層もしくは第3層としかデータの送受信ができません。

データのカプセル化

OSI参照モデルの異なる層のプロトコルが通信するためには、データをカプセル化する必要があります。スタックの各層では、その層が通信を行うのに必要とするビット情報を、ヘッダやフッタとして通信するデータに追加することが求められます。たとえばトランスポート層がセッション層からデータを受信した場合、トランスポート層は次の層にデータを渡す前にヘッダ情報を追加します。
カプセル化処理とは、PDU（Protocol Data Unit：プロトコルデータユニット）を生成することを意味します。PDUには、送信されるデータと追加されたヘッダおよびフッタ情報のすべてが含まれます。データがOSI参照モデルに従って階層を下っていく際に、PDUはさまざまなプロトコルが追加するヘッダ情報とフッタ情報によって大きくなっていきます。PDUは物理層に到達した時点で最終的な形態となり、受信側のコンピュータに送られます。受信側のコンピュータは、データがOSI参照モデルの階層を上がっていくにつれ、プロトコルのヘッダおよびフッタをPDUから取り除いていきます。PDUがOSI参照モデルの最上層に到達するときには、もともとのデータしか残っていません。

注　パケットという単語は、OSI参照モデルの各層が追加するヘッダとフッタをすべて含んだ完全なPDUのことを意味します。

カプセル化されたデータがどのように機能するかを理解するのは少々ややこしいので、構築、送信、受信されるパケットの実例を、OSI参照モデルとの関連で見てみましょう。パケット解析の際には、セッション層やプレゼンテーション層についてはあまり触れることがないので、この例では（そして本書の他の例でも）登場しないことを心に留めておいてください。
ここではコンピュータで、http://www.google.com/をブラウズしようとするところだとします。この処理を実行するには、要求パケットを生成し、送信側のクライアントコンピュータから、受信側のサーバコンピュータへと送信する必要があります。ここではTCP/IPのセッションはすでに開始されているものとします。図1-3はこの例におけるデータのカプセル化を表したものです。
処理は、クライアントコンピュータのアプリケーション層から始まります。ウェブサイトをブラウズするので、アプリケーション層のプロトコルとしてHTTPが用いられ、index.htmlファイルをgoogle.comからダウンロードする指示が発行されます。
アプリケーション層のプロトコルが実行したい指示を発行したら、次に着目するのはパケットを目的地に到達させることです。パケットのデータはスタックを下り、トランスポート層へと渡されます。HTTPはTCPの上にあるアプリケーション層プロトコルです。そのためTCPは、パケットが確実に送信されるようにするトランスポート層プロトコルとして機能し、TCPヘッダを生成します。これにはパケットに添付されるシーケンス番号などの付加データが含まれており、パケットが適切に送信されるようにします。


図1-3　クライアントとサーバ間でデータがカプセル化される模様
クライアント　サーバ
HTTP　TCP　HTTP　IP　TCP　イーサネット　IP　TCP　HTTP
アプリケーション層
プレゼンテーション層
セッション層
トランスポート層
ネットワーク層
データリンク層
物理層
HTTP　TCP　HTTP　IP　TCP　HTTP　イーサネット　IP TCP　HTTP

注　あるプロトコルが別のプロトコルの「上にある」という表現をしばしば使うのは、OSI参照モデルが上下という概念を用いているためです。HTTPなどのアプリケーション層プロトコルは、ある特定のサービスを提供しますが、サービスを提供するにはTCPが必要です。今後学んでいきますが、DNSはUDPの上に、TCPはIPの上にあります。

TCPが仕事を終えると、パケットの論理アドレスを処理する第3層プロトコルであるIPにパケットを渡します。IPは論理アドレス情報を含むヘッダを生成し、パケットをデータリンク層のイーサネットに渡します。物理アドレスであるイーサネットアドレスはイーサネットのヘッダに保持されます。ここで完成したパケットが物理層に渡され、0と1の形式でネットワーク上を転送されます。
パケットはネットワークケーブルを転送され、最終的にGoogleのウェブサーバへとたどり着きます。ウェブサーバはパケットを下位層から順に読みとっていきます。最初に、パケットがどのサーバに対するものかを判断するためにネットワークカードが用いるイーサネットアドレスが含まれる、データリンク層が読みとられます。この層の情報が処理されると、第2層の情報が取り除かれ、第3層の情報が処理されます。
IPアドレス情報も第2層の情報と同じように読みとられ、アドレスが適切で、パケットが分割されていないことが確認されます。その後この情報も取り除かれ、次の層が処理できるようにします。
引き続き、第4層のTCP情報が読みとられ、パケットが順番に到着していることが確認されます。第4層のヘッダ情報を取り除くと、アプリケーション層のデータのみが残るので、ウェブサイトをホストしているウェブサーバのアプリケーションへ渡せるようになります。クライアントから送信されたこのパケットに応答する際、サーバはindex.htmlファイルを送る前に、TCPのACKパケットを送ってリクエストを受け取ったことをクライアントに知らせるべきです。
パケットはすべて、使用するプロトコルに関わらず、この例で説明したように構築されて処理されます。ただし、ネットワークを流れるすべてのパケットがアプリケーション層プロトコルから生成されるわけではないことを知っておく必要があります。第2層、第3層、第4層で生成された情報しか含まれないパケットも存在するということです。

ネットワークハードウェア
ここからは、汚れ仕事を引き受けてくれるネットワークハードウェアを見ていきましょう。ここではハブ、スイッチ、ルータといった一般的なネットワークハードウェアに焦点を絞ります。

ハブ（監訳注：ここでいうハブは、シェアードハブ、リピータハブのことです）
ハブとは、通常図1-4のNETGEARのハブのように、RJ-45のポートを複数持つただの箱にすぎません。ハブには4ポートといった非常に小型なものから、企業用としてラックマウント用に設計された48ポートといった大型のものまで存在します。

図1-4　典型的な4ポートのイーサネットハブ

ハブは不要なネットワークトラフィックを大量に生みだし、（データの送受信を同時に行うことができない）半二重モードでしか動作しないため、最近の集約化されたネットワークで見かけることはまずないでしょう（代わりにスイッチが使用されます）。しかし、2章で説明する「ハブを使用する」テクニックを用いる場合、ハブがパケット解析に非常に重要となるため、ハブの動きは知っておく必要があります。
ハブはOSI参照モデルの物理層で動作する、データの中継を行う通信機器以上のものではありません。この通信機器は、あるポートに送信されたパケットをすべてのポートに伝送（中継）します。たとえば、コンピュータが4ポートハブのポート1に接続されていて、ポート2に接続されているコンピュータにデータを送信する場合、ハブはパケットをポート1、2、3、4のすべてに送信します。ポート3とポート4に接続されているコンピュータは、パケットのイーサネットヘッダにあるMAC（Media Access Control）アドレスで宛先を確認し、パケットが自分宛でないことを確認すると、ドロップ（破棄）します。図1-5はコンピュータAがコンピュータBにデータを送信する例を示したものです。コンピュータAがデータを送信すると、ハブに接続されているすべてのコンピュータがこのデータを受信します。しかし実際にデータを受け取るのはコンピュータBのみで、他のコンピュータはそれを破棄します。
例えとして、マーケティング部で働いている人のみでなく、その企業の社員全員に、メールの題名に「マーケティング部の皆さまへ」と書いたメールを送信したとしましょう。マーケティング部の社員はメールが自分宛であることが分かりますから、そのメールを開封するでしょう。しかし他の社員はメールが自分宛でないことが分かるので、恐らくそれを破棄します。多くの不要な通信と無駄な時間がなぜ発生するかがお分かりになるでしょう。これがハブの機能です。
商用の集約化されたネットワークにおいて、ハブに替わる最良の機器はスイッチです。スイッチはデータの送受信が同時にできる全二重モードの通信機器です。

図1-5　コンピュータAがコンピュータBにハブを経由してデータを送信する際のトラフィックの流れ
コンピュータA 　コンピュータB 　コンピュータC 　コンピュータD 　

スイッチ（監訳注：ここでいうスイッチは、マネージメントスイッチもしくはスイッ
チングハブのことです）
ハブと同じく、スイッチはパケットを中継するよう設計されています。しかしハブのようにすべてのポートにデータを送信するのではなく、宛先となるコンピュータのみにデータを送信します。図1-6に示したように、スイッチの見た目はハブとよく似ています。

図1-6　ラックマウント型の24ポートイーサネットスイッチ


Cisco製のものなど、市場にはいくつかの大型のスイッチが出回っており、ベンダ固有のソフトウェアやWeb上のインタフェースで管理することができます。これらのスイッチはマネージメントスイッチと呼ばれ、ネットワークを管理する際に便利なさまざまな機能を持っています。これには、特定のポートの有効化、無効化、ポートの詳細表示、設定の変更、リモートからの再起動といった機能が含まれます。
スイッチはパケットの転送を処理するための高度な機能も持っています。特定の機器と直接通信できるようにするため、スイッチは通信機器をMACアドレスで識別します。つまり、スイッチはOSI参照モデルのデータリンク層で動作するということです。
スイッチは、接続されているすべての通信機器の第2層のアドレスを、トラフィックの見張り番のような働きをするCAMテーブルに記録しています。パケットが送信されると、スイッチはパケット内にある第2層のヘッダ情報を読みとり、CAM テーブルを参照してどのポートにパケットを送信するかを決定します。スイッチは特定のポートにしかパケットを送信しないため、ネットワークトラフィックを劇的に減らすことができます。
図1-7はスイッチを経由したトラフィックの流れを図で示しています。コンピュータAはデータを宛先として想定しているコンピュータBのみに送信しています。ネットワーク上では同時に複数の通信ができますが、情報はスイッチと宛先のコンピュータ間で直接やり取りされ、他のコンピュータには送られません。

図1-7　スイッチを経由してコンピュータAがコンピュータBにデータを送信する際のトラフィックの流れ
コンピュータA 　コンピュータB 　コンピュータC 　コンピュータD


ルータ
ルータはスイッチやハブより高い層の機能を持った高度なネットワーク機器です。ルータはさまざまな形のものがありますが、多くは前面にインジケータランプ（LED）が付いていて背面にポートがあります。ポートの数はネットワークの大きさに依存します。図1-8はルータの一例です。
ルータはOSI参照モデルの第3層で動作し、複数のネットワーク間でパケットを転送します。ネットワーク間のトラフィックの流れを制御することを、ルーティングと呼びます。さまざまな種類のパケットを、別のネットワークにルーティングする方法を指示するプロトコルを、ルーティングプロトコルと呼びます。これにはいくつかの種類があります。ルータは、通常ネットワーク上の通信機器を識別するために、IPアドレスのような第3層のアドレスを使用します。

図1-8　中小規模ネットワーク用の小型ルータ

xxxxx
/* 原文はCisco ルータと書いてますが、Ciscoじゃないので */

ルーティングの概念をイメージする一つの方法は、いつかの通りがあるご近所を考えてみることです。図1-9のように、コンピュータを家とその住所、ネットワークセグメントを通りだと考えてみます。ある通りにある家は、同じ通りに面しているすべての家と簡単に行き来することができます。これはスイッチに接続することによって、同一ネットワークセグメント上のすべてのコンピュータと通信できるということとよく似ています一方、別の通りの友人を訪ねるのは、同じセグメント上にないコンピュータと通信することに似ています。

図1-9　ルーティングとご近所の通りとの比較
オークストリート
ヴァインストリート
ドッグウッドレーン

図1-9のヴァインストリート503からドッグウッドレーン202に行く必要があるとします。そのためには、オークストリートを通ってドッグウッドレーンに行かなければいけません。これを、ネットワークセグメントをまたがる場合で考えてみてください。192.168.0.3の通信機器が192.168.0.54の機器と通信する必要がある場合、ルータを経由して10.100.1.1のネットワークを通り、宛先の通信機器が存在するネットワークセグメントに到達する前に、そこのセグメントのルータを経由します。
ネットワーク上のルータの大きさや数は、ネットワークの大きさや機能によって変わります。個人やホームオフィスのネットワークの場合は、ネットワークの中央に置かれたルータ1台のみで構成されているでしょうし、巨大企業のネットワークではいくつものルータがさまざまな部門に置かれ、それらすべては中央の巨大なルータや第3層（L3）スイッチ（スイッチが高度化したもので、ルータの機能が内蔵されている）に接続されているでしょう。
多くのネットワーク構成図を見ることで、さまざまなポイントを経由するデータの流れを理解することができるようになるでしょう。図1-10はルーティングされたネットワークの一般形を示しています。この例では、2つのネットワークが1つのルータで接続されています。ネットワークAのコンピュータがネットワークBのコンピュータと通信する場合、送信されるデータは必ずルータを経由しなければいけません。

図1-10　コンピュータAがコンピュータXにルータを介してデータを送信したときのトラフィックの流れ

コンピュータA　コンピュータB　コンピュータC　コンピュータD
ルータ
コンピュータW　コンピュータX　コンピュータY　コンピュータZ

トラフィックの分類
ネットワークトラフィックは、ブロードキャスト、マルチキャスト、ユニキャストの3つに分類することができます。これらはそれぞれ異なる特徴を持っています。これによってネットワークハードウェアのパケットの扱い方が決まります。

ブロードキャスト
ブロードキャストパケットは、ネットワークセグメント上のすべてのポートに送信されます。これはポートがハブ、スイッチのいずれであっても変わりません。
しかしながら、すべてのブロードキャストトラフィックが同じように生成されているわけではなく、第2層の形式と第3層の形式があります。第2層の形式の場合、MACアドレスFF:FF:FF:FF:FF:FFがブロードキャスト専用アドレスとして予約されており、このアドレス向けのトラフィックはネットワークセグメント全体にブロードキャストされます。第3層にも専用のブロードキャストアドレスがあります。
IPネットワークの場合、アドレス帯の中で最も高位のIPアドレスがブロードキャストアドレスとして用いられます。たとえばアドレス帯が192.168.0.xxxで、サブネットマスクが255.255.255.0となっているネットワークの場合、192.168.0.255がブロードキャストアドレスとなります。
さまざまな媒体を通して接続されている多くのハブやスイッチからなる巨大ネットワーク上では、あるスイッチから送信されたブロードキャストパケットが、スイッチからスイッチへと中継され、ネットワーク上の他のスイッチに存在するすべてのポートまで到達します。ブロードキャストパケットが到達する範囲をブロードキャストドメインと呼びます。これはルータを経由せずにコンピュータからコンピュータに直接到達できるネットワークセグメントを指します。図1-11は小さなネットワーク上の2つのブロードキャストドメインの例を示しています。ルータに到達するまでがブロードキャストドメインなので、ブロードキャストパケットは特定のブロードキャストドメイン内にのみ到達します。

図1-11　ブロードキャストドメインはルータに到達するまでの範囲
ブロードキャストドメイン　ルータ　ブロードキャストドメイン

さきほどルーティングをご近所の家に例えて説明しましたが、ブロードキャストドメインの動作についても同じことがいえます。ブロードキャストドメインは家のある通りだと考えてみてください。もしポーチに立って叫んだら、その通りにいる人たちはそれを聞くことができます。別の通りの人と話したい場合は、ポーチからブロードキャストする（叫ぶ）のではなく、直接その人と話す方法を見つける必要があります。


マルチキャスト
マルチキャストは、1つの送信元から複数の宛先に同時にパケットを送信する手段です。できる限り少ない帯域を使い、できる限り単純にこの処理を行うことが目的です。トラフィックの最適化は、宛先に到達するために何回データが複製されたかによって決まります。マルチキャストのトラフィックを実際に扱う方法は、個々のプロトコルの実装に大きく依存しています。
マルチキャストの一般的な実装は、パケットを受信するコンピュータをマルチキャストグループとしてグループ化し、そのグループにアドレスを割り当てる方式であり、IPマルチキャストもこの方式です。マルチキャストグループにアドレスを割り当てることによって、パケットを受け取るべきでないコンピュータにパケットを送信しないようにします。IPでは、マルチキャストに一定のアドレス帯を割り当てています。224.0.0.0から239.255.255.255の範囲のIPアドレスは、マルチキャストトラフィックであると考えてよいでしょう。

ユニキャスト
ユニキャストパケットはコンピュータからコンピュータへ直接送信されます。ユニキャストがどう機能するかは、使用するプロトコルによって決まります。
たとえば、Webサーバを使って通信したい機器があるとします。これは1対1の接続なので、通信の処理はクライアントの機器がWebサーバ（だけ）にパケットを送信するところから始まります。これが、ユニキャストトラフィックの一例となります。


まとめ
本章で解説した内容は、パケット解析の基礎知識として不可欠な基本中の基本です。ネットワークのトラブルシューティングを行う前に、ネットワーク通信で何が起こっているかを理解しなければいけません。次の章ではこうした考えに基づき、ネットワーク通信のより高度な原理について話を進めていきます。

