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

スタートアップガイド

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

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

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

デジ・ステーション


初級ネットワーク講座
第3回 IPヘッダの解読とパケット分割を知ろう!

前号では、「パケットはどのような構造になっているか」「受信側は、どのようにパケットを解析しているのか」を解説し、実際にキャプチャしたパケットを詳しく解析した。今号では、TCP/IP通信の中核部分であるIPというプロトコルがどんなものかを調べてみよう。ネットワークプロトコルを極めるには、まずはそれぞれのパケットを分析してみることが一番。次第に、その意味や必然性が見えてくる。今回は、親切な働き者の駅員さん、「るー太くん」が登場する。

1 IPヘッダの内容を解読する!

1-1 IPヘッダのフォーマット構成

まずは、前号(第2回)のおさらいとして、同じ<<パケット4>>を見てみよう。図1がパケットのダンプ、図2がダンプコードの全体構造である。

図1 <<パケット4>>のダンプ

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

今回は、このうちIPヘッダの部分を詳しく見ていく。
 IPヘッダは、4500003026D6400080065886C0A8018FD2E1E652という数字の羅列で、まるで呪文か暗号のように見えるが、前回と同様にその意味をたどっていくと、ここにも驚くべき情報が秘められているのだ。
 ヘッダを見ればそのプロトコルの機能がわかる。IPを理解するには、IPヘッダの各フィールドの意味を知ることが一番だ。

コラム:IPとインターネット
 ITの世界では、TCP/IPという言葉を頻繁に耳にすることだろう。このIPとはいったい何の略かというと、Internet Protocolの略である。
  Web閲覧やメールのやり取りをするお馴染みの「インターネット」は、英語で書けばもちろん「Internet」である。では、プロトコルの「Internet」と、Web閲覧やメールのやり取りをする「インターネット」、どちらが先にこの名称で呼ばれるようになったのか?それは、プロトコルの「Internet」が先である。つまり、「インターネット」が「Internet Protocol」というプロトコルを使用するので、自然に「インターネット」と呼ぶようになったわけだ。
 「Internet Protocol」というプロトコルを使用するネットワークは、他にも通信事業者が提供する「IP-VPN」など多数ある。

図3 IPヘッダフォーマット


1マスが1ビット、16進数の1ケタは4ビットなので4マスになる。

IPヘッダは、図3のようなフォーマットで構成されている。これにしたがって、<<パケット4>>のIPヘッダを各フィールドに分解すると次の図4のようになる。

図4 <<パケット4>>のIPヘッダの内容


※Options、Paddingは通常付加されない。

それでは、各フィールドについて説明しよう。

1-2 それぞれのフィールドの内容はどうなっている?

IPにもバージョンがある:Version

Versionは、IPのバージョン情報を示す。Versionフィールドの値には「4」と「6」の2種類があり、それぞれIPv4(IP version4)もしくはIPv6(IP version6)を示している。
 このパケットでは、Versionフィールドの値が「4」なので、IPv4であることがわかる。

IPヘッダの長さは通常20バイト:IHL

IHLは、Internet Header Length の略で、IPヘッダの長さを表す。単位は「語(word)」で、1語は32ビットまたは4バイトである。
 このパケットでは、IPヘッドの長さは「5」となっている。よってこのパケットのIPヘッダ長は、5×4(バイト)=20バイトとなる。
 通常のIPパケットにはオプションが付加されないため、IPヘッダの長さは20バイトである。

優先順位をつけることが肝要:Type of Service

Type of Serviceは、そのデータの優先度を表す。IP電話のように一刻でも早く先方に届けなくてはいけないパケットは優先度を高く設定する。一方で、メールやファイル転送のように少々遅くなってもいいパケットは、優先度を低く設定する。優先度を高く設定しておくと、目的地までの途中のルータが優先制御機能を有していれば、先に通してくれるわけだ。
 TOSフィールドの左からの3ビットで優先度を表すが、「000」が最も低い優先度で「111」が最も高い優先度を示す。
 このパケットでは、「00000000」で左からの3ビットが「000」なので優先度は最も低い。多くの場合、送信側のアプリケーションは優先度を「000」とする。
 現在、このType of Serviceは、「DS(Differentiated Services:別扱いのサービス)」フィールドとして再定義されているが、役割は同じである。

どこまでがIPパケットか?:Total Length

Total Lengthは、IPパケットの長さを表す。IPパケットはIPヘッダとIPデータから構成されているので、両方の長さを合わせたものがIPパケットの長さだ。
 このパケットでは16進数で「0030」となっている。10進数では「48」となり、前述のようにIPヘッダ長が20バイトであることがわかっているので、IPデータ長は48?20=28バイトである。

その次にくる「Identification」「Fragment Offset」「Flags」については、次項1-3で解説する。

いつまで生きていられるのか?:Time to Live

Time to Liveは、その名のとおり生存時間、つまりこのパケットがネットワークに生存してもいい時間を表す。頭文字を取ってTTLと略される。
 パケットの中には、ネットワーク内で設定のミスなどにより、迷子になってしまうものも出てくる。そういったパケットに、適当な時間でネットワークから退場してもらうために、パケットごとに寿命を持たせている。そうしないと、送信したパケットがネットワークの中をさまよい続けてしまうことになり、迷子のパケットでネットワークが埋め尽くされてしまって、本来の通信ができなくなる。これを避けるために、制限時間を設けているのである。このTTLフィールドがなかったら、パソコンを新調した途端に30年前のパケットが届くなんてこともありえるのだ。
 当初「TTL」の単位は「秒」であったが、現在は「あといくつのルータを通過してもいいか」という指標になっている。ルータを通過するたびにTTLの値を「1」減らし、TTLが「0」となったら、それより先には中継しない。
 このパケットでは16進数で「80」 となっている。10進数では「128」であるから、あと128個のルータを通過してもよいことになる。

その次のProtocolは、前号でも説明したとおり、IPヘッダの次のプロトコルを指定している。

IPヘッダの無事を確認:Header Checksum

Header Checksumは、IPヘッダが壊れていないかを確認するための符号である。
 何らかの理由でIPパケットに雑音が入ってビット「0」が「1」に、または「1」が「0」となって、IPヘッダが壊れてしまうと、パケットを正しく通信相手に届けることができなくなってしまう。
 例えば、雑音があて先IPアドレスに入ってしまった場合、異なる通信相手にパケットが届いてしまう可能性もある。そこで、ルータではIPヘッダが壊れていないかHeader Checksumを確認する。
 IPヘッダ部を16ビット単位で区切り、それぞれ1の補数を算出してそれらの和を求める。算出された和の1の補数を、このフィールドに設定する。

差出人と受取人:Source AddressとDestination Address

Source Address送信元IPアドレスを、Destination Addressあて先IPアドレスを表す。
 このパケットは、「192.168.1.143」というIPアドレスのホストから、「210.225.230.82」というIPアドレスのホストに向けて、送出されていることがわかる。

コラム:「るー太くん」のお仕事
 「るー太くん」は、ネットワークの道先案内人。
 道路の分岐点に立って交通整理やいろいろな問い合わせの対応に忙しい。でも、いつも親切に対応してくれる、やさしい駅員さんのような存在なのだ。
 言うまでもなく、ネットワーク機器の代表格ルータの役割を果たすのが「るー太くん」である。

1-3 パケット分割で狭い道もラクラク!

1-2では言及しなかったIdentificationFragment OffsetFlagsの3つのフィールドは、パケットの分割を実現するものだ。
 Identification識別子で、パケットを識別するのに使われる。パケットが分割されるときにはそれぞれに同じ識別子が振られるので、元のパケットは同じだということがわかる。
 Fragment Offsetは、分割後のデータが、元のデータのどの位置にあったかを表す。この値の若い順番に並べれば、元のパケットを復元できる。
 Flagsは、パケット分割に関する情報を表すフラグだ。真ん中のビットは、このパケットを分割していいかどうかを示し、「1」となってフラグが立っていれば、パケットの分割禁止を意味する。最後のビットは、パケットが分割された場合に使われ、続きのデータがあるかどうかを示す。続きのデータがあれば「1」、最後のデータであれば「0」となる。

そもそも、なぜ、パケットの分割が必要となるのか?実は、データの通り道ごとに道幅、すなわちネットワーク帯域が異なり、一度に流すことのできるデータ量が違う。るー太くんは道幅をよく知っており、道幅に合わせてパケットを分割し、大きなデータが狭い道路の手前でつかえてしまわないよう、うまくコントロールしているのだ(図5)。

図5 パケット分割のイメージ1

例えば上図、左から右にKNツアーズご一行様の40人乗りのバスがやってきたとしよう。このままでは、道幅が狭くなるので先に進めない。
 そこで、るー太くんはバスの乗客を誘導して、幅の狭い道路でも走れるマイクロバスに乗り換えてもらう。15人乗りマイクロバスが3台あれば、40人全員が乗ることができる(図6)。

図6 パケット分割のイメージ2

これで、道幅の狭い道路も無事に通過することができるわけだ。

さて、IPというプロトコルが見えてきただろうか。プロトコルの中で、最も歴史が古いのがこのIPである。IPの機能は、IPヘッダに含められている各フィールドのみで、それ以上もそれ以下もない。この単純さと奥深さゆえに、世界中の人が長年利用し続けているのだ。
 今回は、IPヘッダを解析し、IPの三大機能であるIPアドレス、パケット分割、経路制御のうち、パケット分割について詳しく学んだ。次回の初級ネットワーク講座では、IPアドレスについて詳しく見ていくこととする。「123.45.67.89」という、小数点でつながった数字の秘密を探る。

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

掲載日:2008年10月31日

キーマンズネット

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

検索

このページの先頭へ