• 追加された行はこの色です。
  • 削除された行はこの色です。
[[ネットワーク用語]] > IPヘッダ

* IPヘッダ [#g2c946bd]

IPヘッダ = Internet Protocol header

* IPv4 [#x3be6920]
- IP[[パケット]]は、IP[[ヘッダ]]とIP[[ペイロード]](データ部分)から構成されています。
- IPヘッダは、[[IP]](Internet Protocol)の制御情報です。
- [[IPv4>http://ja.wikipedia.org/wiki/IPv4]]と[[IPv6>http://ja.wikipedia.org/wiki/IPv6]]のIPヘッダは、以下のように定義されています。

|>|CENTER: IPパケット |
|BGCOLOR(pink): IPヘッダ | IPペイロード |

* IPv6 [#t16286c7]
CENTER:http://program.sagasite.info/wiki/index.php?plugin=attach&refer=TCP%2FIP&openfile=TCP-IP0.gif

* IPv4ヘッダ [#x3be6920]

- IPv4ヘッダは、&color(red){12のフィールド};(基本ヘッダ)と&color(red){オプション};から成っています。
- IPv4ヘッダ長の最小は、&color(red){20バイト};です。=基本ヘッダのみ
- IPv4ヘッダ長の最大は、&color(red){60バイト};です。=基本ヘッダ+40バイトのオプション
- オプションを追加する場合、&color(red){4バイト単位で増える};ようにパディングを詰めて調整されます。

※単位:1バイト(byte)=8ビット(bit)

[[IPヘッダ内の各情報 - ネットワークエンジニアを目指して>http://www.itbook.info/study/p89.html]]
>IPヘッダの中身は以下のような形式で情報が入っています。

CENTER:&ref(iphead2.gif);


[[IPデータグラムとIPヘッダ TCP/IP入門>http://net-juku.org/tcpip/tcpip83.html]]
>IPヘッダの基本ヘッダ部分は、20バイト(160bit)で構成されています。
オプションは、必ず付けなければならないというものではありません。

CENTER:&ref(tcpip8301.jpg);


[[TCP/IPをはじめから - IPとは>http://www.infraexpert.com/study/tcpip1.html]]
> IPヘッダのフォーマットは以下の通りです。IPヘッダは20バイトのサイズですが、オプションが追加された
 場合は最大で60バイトのサイズとなります。ただ、オプションやパディングは一般的には使用されることは
 ないのであまり意識する必要はありません。「データ」はIPヘッダではなくIPペイロードと呼ばれる部分です。

CENTER:&ref(tcpip5.gif);
>※ IPペイロード部分には、TCPやUDPなど上位層プロトコルのヘッダとデータが含まれます。


[[@IT:連載 基礎から学ぶWindowsネットワーク 第10回 IPパケットの構造とIPフラグメンテーション 1.IPパケットの構造>http://www.atmarkit.co.jp/fwin2k/network/baswinlan010/baswinlan010_02.html]]

CENTER:&ref(fig01.gif);
>''IPパケットの詳細構造''
IPパケットの構造は、IPヘッダ部分と、IPパケットによって運ばれるデータ部分(図中の赤の部分)の大きく2つに分けられる。
そしてIPヘッダはさらに固定長の部分(図中の青色と緑色の部分。先頭の20bytes)と、オプション部分(図中の黄色の部分。最小0byte)の2つで構成される。
図中の小さい1目盛りは1bit幅であり、ここでは32bitずつに区切って表現している。
 
** IPv4の12フィールド [#wc219756]
IPv4ヘッダには、12のフィールドがあります。

*** (1) 「バージョン」フィールド:4ビット [#o506509f]
バージョン(Version)フィールドは、IPのバージョンを表します。

&color(red){IPv4は、4};(2進数表現では0100)です。
IPv6は、6(2進数では0110)です。
同じネットワーク媒体上に、IPv4とIPv6のパケットが混在していても、バージョンフィールドによって区別することができます。

-その他のバージョン番号
http://www.iana.org/assignments/version-numbers/version-numbers.xml

| 整数 | バージョン |h
| 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ビット [#d49c2e49]
ヘッダ長(IHL:Internet Header Length インターネットヘッダ長)フィールドは、IPヘッダの長さを表しています。
ヘッダ長によって、IPヘッダとデータの境目が分かります。

4ビット幅しかないので、0から15までしか表現できないが、ヘッダの長さは32ビット(4バイト)単位(つまり&color(red){ヘッダ部分は常に4バイトの倍数)で数える};ので、最大長は15×4=60バイトまで表せます。
IPヘッダの固定長部分(基本ヘッダ)が常に20バイトあるので、このフィールドの&color(red){最小値は5(20÷4)であり、最大値は15};となります。

*** (3) 「サービス・タイプ(TOS)」フィールド:8ビット [#pcff60c2]
サービス・タイプ・フィールドは、&color(red){IPパケットの優先度};などを表す[[TOS]](Type Of Service)を指定するために使われます。

ある特定の値が指定された場合には、他のパケットよりも優先して[[ルーティング]]処理などを行う、といった設定ができます。
例えば、音声トラフィックとデータトラフィックでは、音声トラフィックのデータを優先して送出することができる、などです(いわゆる[[QoS]]処理)。
現在使われている実際のTCP/IPネットワークでは、このフィールドによる[[TOS]]指定はほとんど使用されておらず、意味を持っていないことが多いようです。

*** (4)「パケット長」フィールド:16ビット [#l3109b91]
パケット長(Total Length)フィールドは、IPヘッダとデータを含めたパケット全体の長さを表します。

ヘッダ長フィールドが「IPヘッダのサイズ」を4バイト単位で数えたのに対し、パケット長フィールドは&color(red){IPパケット全体のサイズをバイト単位で数えたもの};です。
このフィールドの幅は16ビットなので、&color(red){IPパケットのサイズの最大長、つまり1つのIPパケットで送信可能なデータ(+ヘッダ部)のサイズは64Kバイト(65,535バイト)まで};となります。

IPパケットがフラグメント化(大きなIPパケットを小さなIPパケットに分割)されている場合は、このフィールドは、元のIPパケット全体のサイズではなく、このIPフラグメントだけのサイズを表します。

*** (5) 「ID」フィールド:16ビット [#l321172d]
ID(Identification)フィールドは、&color(red){IPパケットを識別するための数値};です。
サイズの大きなIPパケットをフラグメント化(分割)する時に、分割後のIPパケット全てに同じ識別番号を与えることによって、分割されたIPパケットを結合して元のIPパケットに戻すことができます。

- IPフラグメンテーションとは?
IPパケットの最大サイズは64Kバイトですが、このサイズのデータを1回で送信できないネットワーク媒体がほとんどです。
そのため、送信可能なサイズにまでIPパケットを小さく分割(IPフラグメンテーション)してから送信します。
最終的なあて先のコンピュータ上で、分割されて届いたIPパケットを合成し、元のサイズのIPパケットに再構成します。
IPフラグメンテーションの仕組みにより、物理的なネットワーク媒体によらず、IPパケットを送受信することが可能となっています。

各コンピュータは、IPパケットを送信するたびにランダムな16ビットの数値を、このIDフィールドに設定します。
このIDの数値そのものには意味がなく、毎回異なるIDがセットされてからIPパケットが送信されるということだけが重要です。
&color(red){同じIPパケットに属するフラグメント化されたパケットは、すべて同じIDを共有するので、後で1つのIPパケットに再構成する場合の目印};となります。

*** (6) 「フラグ」フィールド:3bit幅 [#le1284b0]
フラグ・フィールドもフラグメンテーションにおいて利用される、特別なフラグ情報である。
3bit分あるが、使われているのは以下の2bit分だけである。

- ■MF(&color(red){More Fragment};)ビット
1bitは、&color(red){フラグメントがさらに続くかどうか};を表す。
1つのIPパケットを複数に分割した場合、最後部のパケットではこのMFビットを0にし、そのほかのパケットではMFビットを1にする。
このビットが1ならば、フラグメント化されたIPパケットがさらに後ろに続くという意味になる。

- ■DF(&color(red){Don't Fragment};)ビット
もう1bitは、&color(red){IPパケットを分断してはいけない、という指示を与える};ために利用される。
ルータは必要ならばIPパケットのフラグメント化を行うが、このDFビットが1にセットされていると、それはフラグメント化を行ってはいけないという指示になる。
IPパケットのフラグメント化とその逆操作(フラグメント化されたIPパケットからの再構成)を行うには、少なからず複雑な操作が必要になる。
性能の低いコンピュータや、フラグメンテーション・アルゴリズムを組み込むのが困難な組み込み機器などでは、このDFビットを使うことで、フラグメンテーション処理を使わずにTCP/IP通信を実現することが可能になる。
例えばシステム起動時に実行されるネットワーク・ブート(ネットワーク上からプログラムをロードして起動するようなシステム)のプログラムでは、サイズなどの制約からあまり複雑なコードを組み込むことができない。
このような場合には、このDFフラグをセットし、なおかつ通信をUDPだけに限定するなどにより、TCP/IPの機能をすべて実装しなくてもネットワークを利用できるようにしている。

*** (7) 「フラグメント・オフセット」フィールド:13bit幅 [#bd4f9b6e]
フラグメントされたパケットがもとのパケットのどの位置であったかを示す情報。

フラグメント・オフセット・フィールドは、フラグメント化されたIPパケットにおいて、フラグメントのどの部分がIPパケット中に含まれているかを示すためのオフセット数値フィールドである。
IPパケットのサイズは64Kbytesあるが、上位3bitがフラグ・フィールドのために利用されているので、全部で13bit分の幅しかない。
しかしフラグメントは常に8bytes単位で行われるので、この値を8倍してオフセットの数値とする。
これならば13bitでも64Kbytesの範囲を表すことができる。




* IPv6ヘッダ [#t16286c7]

** リンク [#r395048a]
[[IP]]
[[ヘッダ]]

[[IPv4>http://ja.wikipedia.org/wiki/IPv4]]
[[IPv6>http://ja.wikipedia.org/wiki/IPv6]]


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS