本文とサイドメニューへジャンプするためのナビゲーションスキップです。

スタートアップガイド

J-Net21 中小企業ビジネス支援サイト

  • J-Net21とは
  • スタートアップガイド
中小機構
  • メルマガ登録
  • RSS一覧
  • お問い合わせ

HOME > 製品・技術を開発する > デジ・ステーション

デジ・ステーション


初級ネットワーク講座
第2回 パケットを見てみよう

おかげさまで、開講以来好評を博している「初級ネットワーク講座」。第1回で、ネットワークの勉強を始めるにあたり、ぜひ1度身近なLANケーブルを流れるパケットをキャプチャしてみようと述べた。引き続き第2回では、実際にパケットキャプチャツールで捕まえたパケットの1つを、詳しくみていくことにする。パケットは、どんな構造になっているのだろうか?パケットを受信した側は、どのようにそのパケットを解析しているのか?このあたりを詳しく見ていくことにする。働き者の妖精「パケトくん」が活躍する。

1 パケットの中身を大解剖!

1-1 パケットを解析しよう!?準備編?

ダンプコードを取り出す

まず、パケットキャプチャツールを使って、LANケーブルを流れるデータを取得する。すると、図1のような画面が表示される。第1回でも説明したように、上段にサマリー、中段に解析結果、下段にダンプが表示される(図1)。
ここでは、勉強のためにあえてデータの解析結果ではなく、LANを流れているパケットの様子がそのまま現れているダンプを見てみよう(図2)。
左から、行番号、ダンプコード(16進数)、ダンプコードに対応する文字列である。文字列は、パケットキャプチャツールによっては「ASCII」「Shift-JIS」「JIS」「Unicode」「EUC」「EBCDIC」などの文字コードを指定して、読みやすくすることができる。この例では、対応する文字がないために文字化けのような状態になっているが、今回はこの部分については解説しない。

図1 パケットキャプチャの画面

図1 パケットキャプチャの画面

図2 パケット4のダンプ

図2 パケット4のダンプ

今回解読するダンプコードの部分を取り出して、並べて書くと次のようになる。

00A0DE209B94000B972CED7108004500003026D6400080065886
C0A8018FD2E1E6520EEB00159E01A6A29E51979650187FA
4593600005459504520490D0A
ダンプコードを2進法に換算する

このままでは、アルファベットと数字の無意味な羅列のようで何がなんだかわからないが、ここにデータ通信の秘密が隠されているのだ。
  前回学んだように、データ通信では電気信号の"ON"と"OFF"でデータを伝える。"ON"だったら"1"、"OFF"だったら"0"、すなわち"0"か"1"の2進数の世界である。したがって、パケットのダンプも本来は2進数なのだが、そのまま表示すると大変な長さになってしまうので、パケットごとに16進数で表示することになっている。
2の4乗が16であるから、2進数の4桁(4ビット)が16進数の1桁となる。その換算法をまとめたのが表1だ。

表1 16進法と2進法の換算

表1 16進法と2進法の換算

では、表1にしたがって<<パケット4>>のダンプコードの冒頭部分を2進数にしてみよう。

表2 ダンプコードを2進法に変換

表2 ダンプコードを2進法に変換

つまり、この<<パケット4>>は、実際には「00000000101000001101111000100000(以下省略)」という情報を電気信号に変換して送信していることがわかる。

コラム:パケット解析の妖精「パケトくん」参上!
 ここだけの話。パケットを受信する側のノードのLANのインターフェース(LANカード、LANボードなど)に妖精「パケトくん」が棲んでいる。残念ながら、パケトくんは妖精なので、人間の目で見ることはできない。普段は寝てばかりのパケトくんだが、いざインターフェースがパケットを受信しはじめると、途端にパケットの解析を始める。そして解析を終えると、その結果をご主人様に報告する。
 今後も大いに当講座で活躍する予定だ。

1-2 パケットを解析しよう!?ヘッダの構造を知る?

それでは<<パケット4>>を解析してみよう。LAN(Ethernet)上を流れるパケットは、こんな構造になっている。妖精「パケトくん」は、この構造を熟知している。

図3 <<パケット4>>の構造

図3 <<パケット4>>の構造

※注 FCSは、通信エラーを制御するための情報だが、パケットダンプでは表示されない。

Ethernetヘッダの中身はどうなっている?

LAN(Ethernet)上を流れるパケットの先頭は必ずEthernetヘッダである。この中身を詳しく見ると、図4のようになっている。

図4 Ethernetヘッダの構造

図4 Ethernetヘッダの構造

Ethernetヘッダには、あて先MACアドレス送信元MACアドレスタイプが含まれる。これらをそれぞれフィールドと呼び、各フィールドが何桁で構成されているかは、次のように決まっている。

あて先MACアドレスフィールド 6バイト(48ビット) ↔16進数で12桁
送信元MACアドレスフィールド 6バイト(48ビット) ↔16進数で12桁
タイプフィールド 2バイト(16ビット) ↔16進数で 4桁

これを<<パケット4>>の冒頭部分にあてはめてみると、次のようになる。

 

MACアドレスとは、通信する機器がLANに接続するためのインターフェース(LANカード、LANボードなど)を識別するために、割り当てられた番号のことである。それぞれのLANインターフェースには、それぞれ妖精が棲んでいて、MACアドレスはパケトくんの出席番号のようなものである。48ビットのうち上位24ビットがメーカー番号で、下位24ビットがメーカーごとの製造番号と決められている。MACアドレスは、製品が製造されるたびに製品に焼き付けられ、製品の寿命がくれば、そのMACアドレスは永久欠番となる。よって、同じMACアドレスをもつインターフェースはこの世にはないはずである。
 話を戻すと、<<パケット4>>では、MACアドレス「000B972CED71」のインターフェースを持つ通信機器が、MACアドレス「00A0DE209B94」のインターフェースをもつ通信機器にパケットを送っているというわけである。つまり、データを送ろうとしているパケトくんのMACアドレスは「000B972CED71」ということになる。
 タイプとは、Ethernetヘッダの次のフィールド以降で、どういったプロトコルを使用しているかを表している。プロトコルとは、前号でも述べた通り、通信における約束ごと、すなわち「通信規約」である。パケトくんにしてみれば、誰からパケットを送られてくるのかわからない。ましてや、このパケットがどんな内容なのかもわからないので、こうした約束ごとが必要なのである。
 データ通信は"0"か"1"の世界であり、相手が見えない。したがって、どういう約束ごと(プロトコル)でパケットが構成されているかについては、送信側が「明示」しなければいけない。

水岡先生 : パケトくんは、言われなくてもわかるということは絶対になくて、言われないとわからないんですよ。

パケトくん : なんか気になる言い方だなぁ…

水岡先生 : 通信の世界では、明示することが大原則。だから、とにかく明示しています。もう本当にくどいくらい明示するわけです。

パケトくん : くどすぎだよ、もう!


図5 Ethernetヘッダの構造と<<パケット4>>の内容

図5 Ethernetヘッダの構造と<<パケット4>>の内容

<<パケット4>>では、Ethernetヘッダの「タイプ」フィールドが16進数の"0800"である。下の表3に、代表的なタイプと、それが指し示すプロトコルをまとめた。これによれば、"0800"はプロトコルIPを示すので、Ethernetヘッダの次のフィールド以降のプロトコルがIPであることがわかる。すると、パケトくんは、書物庫から「プロトコルIPの巻」を取り出してくる。

表3 主要なタイプ

表3 主要なタイプ
IPヘッダの構造

IPヘッダは、図6のような構造になっている。IPヘッダにも、なにやらたくさんのフィールドがあるようだ。しかし、パケトくんにとって重要なのは、プロトコル送信元IPアドレスあて先IPアドレス、だけである。IPヘッダのその他のフィールドの詳細については、別の機会に説明する。

図6 IPヘッダ内のフィールドと<<パケット4>>の内容

図6 IPヘッダ内のフィールドと<<パケット4>>の内容

<<パケット4>>では、IPヘッダの「プロトコル」フィールドが16進数の"06"である。下の表4に、代表的なタイプと、それが指し示すプロトコルをまとめた。これによれば、"06"はプロトコルTCPを示すので、IPヘッダの次のフィールド以降のプロトコルがTCPであることがわかる。すると、パケトくんは、書物庫から「プロトコルTCPの巻」を取り出してくる。

表4 主要なプロトコルタイプ

表4 主要なプロトコルタイプ
TCPヘッダの構造

TCPヘッダは、図7のような構造になっている。TCPヘッダにも、なにやらたくさんのフィールドがあるようだ。しかし、パケトくんにとって重要なのは、送信元ポート番号あて先ポート番号、だけである。TCPヘッダのその他のフィールドの詳細については、別の機会に説明する。

図7 TCPヘッダ内のフィールドと<<パケット4>>の内容

図7 TCPヘッダ内のフィールドと<<パケット4>>の内容

TCPヘッダの「あて先ポート番号」フィールドが16進数の"0015"である。下の表5に、主要なポート番号と、それが指し示すプロトコルをまとめた。これによれば、"0015"はFTPを示すので、TCPヘッダの次のフィールド以降のプロトコルが「FTP」であることを表している。これで、TCPヘッダの次のフィールド以降のプロトコルがFTPであることがわかったので、パケトくんは、次に書物庫から「プロトコルFTPの巻」を取り出してくる。
 FTPは、File Transfer Protocolの略で、インターネットなどのIPネットワーク上でファイルを転送するプロトコルである。

表5 主要なポート番号(TCP)

表5 主要なポート番号(TCP)

以上の分析をまとめると、パケットの構造は以下の通りである。

<<パケット4>>のダンプコード
00A0DE209B94000B972CED7108004500003026D6400080065886C0A8018FD2E1E6520EEB00159E01A
6A29E51979650187FA4593600005459504520490D0A

図8 <<パケット4>>のダンプコードの全体構造

図8 <<パケット4>>のダンプコードの全体構造

水岡先生 : さて、ちょっとパケトくんもお疲れのようなので、今回はこれくらいにしましょう。次回は、今回も登場したIPというプロトコルがどんなものかを調べていきます。


パケトくん : ぼくのせいにしないでよぉ〜

取材協力 :株式会社アイテック

掲載日:2008年10月31日

キーマンズネット

出典元:株式会社リクルート キーマンズネット 2007年12月11日掲載分

検索

このページの先頭へ