- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- IPヘッダ へ行く。
- 1 (2011-08-28 (日) 07:00:43)
- 2 (2011-08-28 (日) 07:33:44)
- 3 (2011-08-28 (日) 11:56:39)
- 4 (2011-08-28 (日) 16:13:39)
- 5 (2011-08-29 (月) 01:13:39)
ネットワーク用語 > IPヘッダ
IPヘッダ †
IPヘッダ = Internet Protocol header
- IPパケットは、IPヘッダとIPペイロード(データ部分)から構成されています。
- IPヘッダは、IP(Internet Protocol)の制御情報です。
- IPv4とIPv6のIPヘッダは、以下のように定義されています。
IPパケット | |
IPヘッダ | IPペイロード |
IPv4ヘッダ †
- IPv4ヘッダは、12個のフィールド(基本ヘッダ)とオプションから成っています。
- IPv4ヘッダ長の最小は、20バイトです。=基本ヘッダのみ
- IPv4ヘッダ長の最大は、60バイトです。=基本ヘッダ+40バイトのオプション
- オプションを追加する場合、4バイト単位で増えるようにパディングを詰めて調整されます。
※単位:1バイト(byte)=8ビット(bit)
IPヘッダの中身は以下のような形式で情報が入っています。
IPヘッダの基本ヘッダ部分は、20バイト(160bit)で構成されています。
オプションは、必ず付けなければならないというものではありません。
IPヘッダのフォーマットは以下の通りです。IPヘッダは20バイトのサイズですが、オプションが追加された
場合は最大で60バイトのサイズとなります。ただ、オプションやパディングは一般的には使用されることは
ないのであまり意識する必要はありません。「データ」はIPヘッダではなくIPペイロードと呼ばれる部分です。
※ IPペイロード部分には、TCPやUDPなど上位層プロトコルのヘッダとデータが含まれます。
@IT:連載 基礎から学ぶWindowsネットワーク 第10回 IPパケットの構造とIPフラグメンテーション 1.IPパケットの構造
IPパケットの詳細構造
IPパケットの構造は、IPヘッダ部分と、IPパケットによって運ばれるデータ部分(図中の赤の部分)の大きく2つに分けられる。
そしてIPヘッダはさらに固定長の部分(図中の青色と緑色の部分。先頭の20bytes)と、オプション部分(図中の黄色の部分。最小0byte)の2つで構成される。
図中の小さい1目盛りは1bit幅であり、ここでは32bitずつに区切って表現している。
IPv4ヘッダのフィールド †
IPv4ヘッダには、12個のフィールドがあります。
(1) 「バージョン」フィールド:4ビット †
バージョン(Version)フィールドは、IPのバージョンを表します。
IPv4は、4(2進数表現では0100)です。
IPv6は、6(2進数では0110)です。
同じネットワーク媒体上に、IPv4とIPv6のパケットが混在していても、バージョンフィールドによって区別することができます。
整数 | バージョン |
0-1 | (予約) |
2-3 | (未割当) |
4 | Internet Protocol |
5 | ST Datagram Mode |
6 | Internet Protocol version 6 |
7 | TP/IX(The Next Internet) |
8 | PIP(The P Internet Protocol) |
9 | TUBA |
10-14 | (未割当) |
15 | (予約) |
(2) 「ヘッダ長」フィールド:4ビット †
ヘッダ長(IHL:Internet Header Length インターネットヘッダ長)フィールドは、IPヘッダの長さを表しています。
ヘッダ長によって、IPヘッダとデータの境目が分かります。
4ビット幅しかないので、0から15までしか表現できないが、ヘッダの長さは32ビット(4バイト)単位(つまりヘッダ部分は常に4バイトの倍数)で数えるので、最大長は15×4=60バイトまで表せます。
IPヘッダの固定長部分(基本ヘッダ)が常に20バイトあるので、このフィールドの最小値は5(20÷4)であり、最大値は15となります。
(3) 「サービス・タイプ(TOS)」フィールド:8ビット †
サービス・タイプ・フィールドは、パケットの優先度などを表すTOS(Type Of Service)を指定するために使われます。
ある特定の値が指定された場合には、他のパケットよりも優先してルーティング処理などを行う、といった設定ができます。
例えば、音声トラフィックとデータトラフィックでは、音声トラフィックのデータを優先して送出することができる、などです(いわゆるQoS処理)。
現在使われている実際のTCP/IPネットワークでは、このフィールドによるTOS指定はほとんど使用されておらず、意味を持っていないことが多いようです。
(4)「パケット長」フィールド:16ビット †
パケット長(Total Length)フィールドは、IPヘッダとデータを含めたパケット全体の長さを表します。
ヘッダ長フィールドが「IPヘッダのサイズ」を4バイト単位で数えたのに対し、パケット長フィールドはパケット全体のサイズをバイト単位で数えたものです。
このフィールドの幅は16ビットなので、パケットのサイズの最大長、つまり1つのパケットで送信可能なデータ(+ヘッダ部)のサイズは64Kバイト(65,535バイト)までとなります。
パケットがフラグメント化(大きなパケットを小さなパケットに分割)されている場合は、このフィールドは、元のパケット全体のサイズではなく、このフラグメントだけのサイズを表します。
(5) 「ID」フィールド:16ビット †
ID(Identification)フィールドは、パケットを識別するための数値です。
サイズの大きなパケットをフラグメント化(分割)する時に、分割後のパケット全てに同じ識別番号を与えることによって、分割されたパケットを結合して元のパケットに戻すことができます。
- IPフラグメンテーションとは?
IPパケットの最大サイズは64Kバイトですが、このサイズのデータを1回で送信できないネットワーク媒体がほとんどです。
そのため、送信可能なサイズにまでパケットを小さく分割(IPフラグメンテーション)してから送信します。
最終的なあて先のコンピュータ上で、分割されて届いたパケットを合成し、元のサイズのパケットに再構成します。
IPフラグメンテーションの仕組みにより、物理的なネットワーク媒体によらず、パケットを送受信することが可能となっています。
各コンピュータは、パケットを送信するたびにランダムな16ビットの数値を、このIDフィールドに設定します。
このIDの数値そのものには意味がなく、毎回異なるIDがセットされてからパケットが送信されるということだけが重要です。
同じパケットに属するフラグメント化されたパケットは、すべて同じIDを共有するので、後で1つのパケットに再構成する場合の目印となります。
(6) 「フラグ」フィールド:3ビット †
フラグ(Flags)フィールドは、パケットの分割を制御する情報です。
3ビットあるうち、後ろの2ビットだけが使われます。
- 先頭(ビット0):(未使用)
- 中央(ビット1):DF(Don't Fragment)ビット
分割の不許可を表す値です。- DF値が0なら、分割可
- DF値が1なら、分割不可
ルータは必要ならばパケットを分割しますが、このDFビットに1がセットされていると「パケットを分割してはいけない」という指示になります。
性能の低いコンピュータや、フラグメンテーション・アルゴリズムを実装することが困難な組込み機器などで、DFビットを指定することによって、フラグメンテーション処理を使わずにTCP/IP通信を実現することが可能となります。
- 最終(ビット2):MF(More Fragment)ビット
分割されたフラグメントの後続を表す値です。- MF値が0なら、最後のフラグメント
- MF値が1なら、後続のフラグメントが存在
1つのパケットを複数に分割した場合、最後部のパケットではこのMFビットを0にし、そのほかのパケットではMFビットを1にします。
MFビットが1であれば、フラグメント化されたパケットがさらに後ろに続くという意味になります。
(7) 「フラグメント・オフセット」フィールド:13ビット †
フラグメント・オフセット(Flagment Offset)フィールドは、分割されたパケットが、元のパケットのどの位置にあったかを表します。
単位は8オクテットで、フラグメント・オフセット・フィールドの最大値は8192です。
※単位:1オクテット=8ビット(=1バイト)
パケットのフラグメントは、常に8バイト単位で行われるので、この値を8倍してオフセット(位置情報)の数値とします。
これなら13ビットしかないフィールドでも、64Kバイトの範囲を表すことができます。
8オクテット×8192=65536オクテット(=64Kバイト)
(8) 「TTL」フィールド:8ビット †
Time to Live(TTL 生存時間)フィールドは、パケットが通過可能なルータの数を表します。
ルータを経由するたびに、TTLが1ずつ減っていき、0になった時点でパケットが破棄されます。
(9) 「プロトコル」フィールド:8ビット †
プロトコル(Protcol)フィールドは、IPの上位層(トランスポート層)のプロトコルを表します。
この値は、ICANNという組織により「プロトコル名」と「番号」が定義されています。
例えば、IPの上位層プロトコルでTCPが使用されている場合、このプロトコル番号は「6」になります。
(10) 「ヘッダ・チェックサム」フィールド:16ビット †
ヘッダ・チェックサム(Header Checksum)フィールドは、IPヘッダのチェックサム(整合性を検査するためのデータ)です。
IPパケットの伝送エラーがないかチェックするためにあります。
IPヘッダ内のTTL値は、ルータを経由するたびに変わるため、各ルータでは転送
する前にヘッダチェックサムの再計算を行っています。
実際には、下位のネットワーク媒体(および上位プロトコル)でも様々な方法でエラー検査が行われているので、IPプロトコルでエラーを検出しなくても問題が発生する確率は非常に小さいです。
(11) 「送信元IPアドレス」フィールド:32ビット †
送信元IPアドレス(Source Address)フィールドは、32ビット(4バイト)で構成された、送信元のIPアドレスがセットされています。
(12) 「宛先IPアドレス」フィールド:32ビット †
宛先IPアドレス(Destination Address)フィールドは、32ビット(4バイト)で構成された、宛先のIPアドレスがセットされています。
IPv4ヘッダのオプション †
オプションは、32ビット(4バイト)単位で追加される、可変長のフィールドです。
通常は使用されませんが、デバッグやテストを行う際に使用される情報です。
オプション部分は通常は使用されないので、IPヘッダのサイズは20バイトです。
オプションが利用される場合は、4バイト(32ビット)単位で可変であり、最大で40バイト(固定部分の基本ヘッダとあわせると最大で60バイト)にまで拡大します。
IPv4ヘッダのパディング †
パディングは、オプションを使用したとき、サイズを調整のために入れるデータです。
オプションを追加して、IPヘッダ長が4バイト(32ビット)の整数倍にならなかった場合、オプションのサイズを4バイトの整数倍にするために、詰め物(Padding)として空データの「0」の値を入れることによって調整します。
IPv6ヘッダ †
- IPv6ヘッダは、8個のフィールドから成っています。
http://www.atmarkit.co.jp/fnetwork/rensai/ipv6-03/ipv6-01.html
IPv6ヘッダのフィールド †
http://www.itbook.info/study/ipv6-4.html
(1) 「バージョン」フィールド:4ビット †
バージョン(Version)フィールドは、IPのバージョンを表します。
IPv6は、6(2進数では0110)です。
(2) トラフィッククラス:8ビット †
トラフィッククラス(Traffic Class)フィールドは、QoSで使用するパケットのクラスです。
IPv4ヘッダのTOS(Type Of Service)フィールドに相当します。
このフィールドを使用してパケットの優先度付けを行うことが出来ます。
トラフィッククラスフィールドがどのように使われるのかは、RFC2472で定義されています。
ftp://ftp.rfc-editor.org/in-notes/rfc2474.txt
http://www.itbook.info/study/ipv6-4.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20071009/284087/
http://www.n-study.com/network/2005/05/ipv6_1.html
http://www.geekpage.jp/blog/?id=2011/1/31/1
http://itpro.nikkeibp.co.jp/article/COLUMN/20090924/337702/