IPのパケットフォーマット

図:IPパケットのフォーマット(オプションなし)

バージョン

その名の通り、IPのバージョンを表す4ビットのフィールド

IPv4の場合は「4」(2進数表記で0100)

ヘッダー長

IPヘッダーの長さを表す4ビットのフィールド

「Internet Header Length」略して「IHL」ともいう。

パケットを受け取る端末はこの値を見ることで、どこまでがIPヘッダーか知ることができる。

値は4バイト(32ビット)単位に換算したもの。

IPヘッダーの長さは基本的に20バイトなので「5」が入る。

ToS

Type of Service

IPパケットの優先度を表す1バイトのフィールド

優先制御、帯域制御、輻輳(ネットワークが混雑していること)制御などのQoS(Quality of Service)で使用する。

あらかじめネットワーク機器で「この値だったら、最優先で転送する」とか「この値だったら、これだけ保証する」などのふるまいを設定しておくとサービス要件に応じたQoS処理ができるようになる。

ToSは先頭6ビットの「DSCP(Differentiated Services Code Print)フィールド」と残り2ビットの「ECN(Explicit Congestion Notification)フィールド」で構成される。

DSCPフィールドは優先制御と帯域制御に使用。

ECNフィールドは輻輳を通知するときに使用。

パケット長

IPヘッダーとIPペイロードを合わせたパケット全体の長さを表す2バイトのフィールド

パケットを受け取る端末はこのフィールドを見ることで、どこまでがIPパケットなのかを知ることができる

例えばイーサネットのデフォルトMTUいっぱいまでデータが入ったIPパケットの場合、パケット長の値は「1500」(0x05DC)になる。

識別子

IP通信ではデータをそのまま送るのではなく、送りやすいように小分けにして送る。この処理のことをIPフラグメンテーションと言う。

識別子」「フラグ」「フラグメントオフセット」にはIPフラグメンテーションに関する情報が格納されている。

識別子はパケットを作成するときにランダムに割り当てられるパケットのIDで、2バイトで構成されている。IPパケットのサイズがMTUを超えてしまって、途中でフラグメンテーションされると、フラグメントパケットは同じ識別子をコピーして持つ。フラグメントパケットを受け取った端末は、この識別子の値を見て通信の途中でフラグメンテーションされていることを認識し、パケットを再結合する。

フラグ

3ビットで構成されている

1ビット目は使用しない

2ビット目は「DF(Don’t Fragment)ビット」IPパケットをフラグメンテーションして良いかどうかを表す。

「0」だったら許可、「1」だったら許可しない

フラグメンテーションを行うと、その分の処理遅延が発生しパフォーマンスが劣化する。最近のアプリケーションは処理遅延を考慮してフラグメンテーションを許可しないように、つまりDFビットを「1」にセットして、上位層(トランスポート層~アプリケーション層)でデータサイズを調整している。

3ビット目は「MF(More Fragments)ビット」フラグメンテーションされたIPパケットが後ろに続くかどうか

「0」だったら続かない

「1」だったら続く。

フラグメントオフセット

フラグメンテーションしたときに、そのパケットがオリジナルパケットの先頭からどこに位置しているかを示す13ビットのフィールド。フラグメンテーションされた最初のパケットには「0」が、その後のパケットには位置を示した値が入る。

パケットを受け取る端末は、この値を見てIPパケットの順序を正しく並べ替える。

TTL

Time To Live

IPパケットの寿命を表す1バイトのフィールド

IPパケットの寿命 = 経由するルータの数 = ホップ数

ルータを経由する度、つまりネットワークを経由する度に1つずつ減算され、値が「0」になると破棄される。

IPパケットを破棄したルータは「Time-to-live Exceeded(タイプ11/コード0)」というICMPパケットを返してパケットを破棄したことを送信元端末に伝える

図:TTLが0になったらIPパケットを破棄し、ICMPで送信元に通知する

TTLのデフォルト値はOSによって異なる。そのため、パケットに含まれるTTLの値をみることでパケットをやり取りした端末のOSをざっくり判別することができる。

図:TTLのデフォルト値

プロトコル番号

IPペイロードがどんなプロトコルで構成されているかを表す1バイトのフィールド

ヘッダーチェックサム

IPヘッダーの整合性をチェックするために使用される2バイトのフィールド

「1の補数演算」を採用 

送信元/宛先IPアドレス

IPネットワークに接続されている端末を表す4バイトの識別ID。

必ずしも1端末あたり1つのIPアドレスしか持てないわけではなく、機器の種類や用途に応じて複数のIPアドレスを持つことも可能。

オプション

IPパケット送信における拡張機能が格納される可変長のフィールド

実務の現場で使用されるケースは少ない

パディング

IPヘッダーのビット数をそろえるために使用されるフィールド

IPヘッダーは仕様上、4バイト(32ビット)単位である必要がある。

4バイトの整数倍にならないようであれば、末尾にパディングの「0」を付与し、4バイトの整数倍になるようにする

IPアドレスとサブネットマスク

図:IPアドレスの表記

IPアドレスはサブネットマスクとセットで使用する。

IPアドレスは「ネットワーク部」と「ホスト部」の2つで構成されている。

ネットワーク部はどのIPネットワークにいるか、ホスト部はとの端末なのかを表す。

サブネットマスクはこの2つを区切る目印。

図:IPアドレスとサブネットマスク

サブネットマスクには「10進数表記」と「CIDR(Classless Inter-Domain Routing、サイダー)表記」がある。

CIDRはIPアドレスとサブネットマスクをまとめて表現する表記方法

IPアドレスの後に「/」と、サブネットマスクの「1」の個数を表記する。

例えばIPアドレスが「192.168.11.1」、サブネットマスクの10進数表記が「255.255.255.0」の場合、CIDR表記では「192.168.11.1./24」となる。

いろいろなIPアドレス

0.0.0.0から255.255.255.255まであるが、RFCによってどこからどこまでをどのように使うか決められている。

割り当て方式による分類

クラスフルアドレッシング」と「クラスレスアドレッシング」の2種類がある

クラスフルアドレッシング

IPアドレスを先頭4ビットのパターンで「アドレスクラス」という名前のカテゴリーに分類し、その中からIPアドレスを割り当てる方式。

クラスAからクラスEまで5つあり、このうち端末に設定して使用するのがクラスAからクラスC。

クラスAからクラスCはそれぞれに1オクテット単位のサブネットマスクが決められていて、IPアドレスが割り当てられたら必然的にサブネットマスクが決まるようになっている。

例えばIPアドレスが「10.1.1.1」だったらサブネットマスクは「255.0.0.0」になる。

クラスDとEは特殊用途で、一般的には使用しない。

クラスフルアドレッシングはわかりやすく管理がしやすい反面、無駄が多いというデメリットを抱えている。

表:IPアドレスのアドレスクラス

クラスレスアドレッシング

アドレスクラスにとらわれずにIPアドレスを割り当てる方式

「サブネッティング」や「CIDR(Classless Inter-Domain Routing、サイダー)」とも呼ばれる。

ネットワーク部、ホスト部のほかに「サブネット部」という概念を導入

サブネットマスクを8ビット単位ではなく、1ビット単位で自由に操作する

図:クラスレスアドレッシング

有限なIPアドレスを有効活用できるため、現代のIPアドレス割り当て方式の主流になっている。

使用場所による分類

場所といってもIPネットワークにおける論理的な場所のこと。

IPアドレスは使用する場所によって「パブリックIPアドレス(グローバルIPアドレス)」と「プライベートIPアドレス(ローカルIPアドレス)」に分類できる。電話で例えるとパブリックIPアドレスが外線、プライベートIPアドレスが内線。

パブリックIPアドレス

ICANNの一機能であるIANAとその下部組織によって管理されていて自由に使用することのできないIPアドレス。

図:IANAとその下部組織がパブリックIPアドレスを管理している。

プライベートIPアドレス

組織内であれば自由に割り当ててよいIPアドレス

表:プライベートIPアドレス

インターネットに接続するときはプライベートIPアドレスをパブリックIPアドレスに変換する必要がある。この技術を「NAT(Network Address Translation)、ナット」という。家庭ではブロードバンドルーターが変換している。

図:プライベートIPアドレスは組織内だけで有効

除外アドレス

IPアドレスの中でも特別な用途に使用され、端末には設定できないアドレスがいくつかある。特に重要なのが「ネットワークアドレス」「ブロードキャストアドレス」「ループバックアドレス

ネットワークアドレス

ホスト部のビットがすべて「0」のIPアドレスで、ネットワークそのものを表す。

ネットワークアドレスを極限まで推し進めてIPアドレスもサブネットマスクも全て「0」にした「0.0.0.0/0」は「デフォルトルートアドレス」になる。これは「全てのネットワーク」を表す。

ブロードキャストアドレス

ホスト部のビットがすべて「1」のIPアドレスで、同じネットワークに存在するすべての端末を表す。

ブロードキャストアドレスを極限まで推し進めてIPアドレスもサブネットマスクも全て「1」とした「255.255.255.255/32」は「リミテッドブロードキャストアドレス」になる。DHCPでIPアドレスを取得するときなどに使用する。

ループバックアドレス

自分自身を表すIPアドレス

第1オクテットが「127」

「127.0.0.1/8」が一般的


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です