IPv4
出典: フリー百科事典『ウィキペディア(Wikipedia)』
Internet Protocol(インターネットプロトコル、IP、IPv4)は、OSI参照モデルにおいてネットワーク層に位置付けられるプロトコルである。
転送の単位であるパケットの経路選択と、その断片化と再統合を主な機能とする。TCP/IPの基本機能としてインターネットなどで世界中広く用いられている。
目次 |
[編集] パケット
IPパケットの先頭には必ずIPヘッダが付加され、それにより経路選択などのIPの機能が実現されている。以下にパケット形式図とそれぞれの領域の役割などを記す。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
バージョン | ヘッダ長 | サービス種別 | 全長 | |||||||||||||||||||||||||||||||
識別子 | フラグ | 断片位置 | ||||||||||||||||||||||||||||||||
生存時間 | プロトコル | チェックサム | ||||||||||||||||||||||||||||||||
送信元アドレス | ||||||||||||||||||||||||||||||||||
宛先アドレス | ||||||||||||||||||||||||||||||||||
拡張情報 | ||||||||||||||||||||||||||||||||||
データ |
- バージョン(Version) IPのバージョンであり、IPv4の場合は4が格納される。
- ヘッダ長(Internet Header Length、IHL) IPヘッダの長さで、4オクテット単位で表される。この値によりデータの開始位置を知る事が出来る。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
優先度 | 遅延度 | 転送量 | 信頼性 | 予備 |
- サービス種別(Type Of Servise、TOS) パケットが転送される際に重視するサービスを指定する。ただし、ルータの実装においてパケット毎にサービスを区別する事は容易では無い。送信元が全てを重視とする設定を行う場合や、ネットワークの運用方針によっては境界に位置するルータが値を書き換える場合もある。優先度はパケットの優先度を8段階で示す。パケットの送信待ち行列を8個用いて実現する実装もある。遅延度はパケットを早く宛先へと到達させる事を求める。転送量はパケットを多く宛先へと到達させる事を求める。信頼性はパケットを失わず宛先へと到達させる事を求める。
- 全長(Total Length) IPヘッダを含むパケットの全長。
- 識別子(Identification) パケットの送信元が一意な値を格納する。断片化したパケットの復元に用いられる。
0 | 1 | 2 |
---|---|---|
予備 | 禁止 | 継続 |
- フラグ(Various Control Flags) 断片化の制御に用いる。ビット0は使用しない。ビット1は1の場合に断片化の禁止を意味する。ビット2は断片化された各パケットにおいて、0の場合は最終パケットを意味する。
- 断片位置(Fragment Offset) ルータなどがパケットを断片化した際に、その位置を8オクテット単位で格納する。断片化したパケットの復元に用いられる。
- 生存時間(Time to Live、TTL) パケットの余命を示す値である。送信元はパケットが経由できるルータ数の上限を設定し、ルータはパケットを転送する毎に値を一つ減らし、値が0になるとパケットは破棄される。パケットがネットワーク上で無限に巡回する問題を防ぐ効果が有る。
- プロトコル(Protocol) TCPなどの上位プロトコルを示す値が設定される。パケットの宛先である装置がパケットを受信すると、この値を用いて上位プロトコルを識別し、その実装へペイロードを渡す。
- チェックサム(検査合計、Header Checksum) IPヘッダの誤り検査に用いられる。転送毎に生存時間の値が変わるため、ルータはチェックサムも転送毎に再計算する必要がある。
- 送信元アドレス(Source Address) パケットの送信元アドレスが設定される。
- 宛先アドレス(Destination Address) パケットの送信先アドレスが設定される。
- 拡張情報(Options) 可変長の拡張情報が32ビット単位で設定される。
- データ パケットが伝達すべきペイロードである。
[編集] アドレス
IPで用いられる32ビットのアドレスはIPアドレスと呼ばれ、IPアドレスはネットワークアドレスとホストアドレスに分けて用いられる。
RFC791において、ネットワークアドレスとホストアドレスの境界は、IPアドレスの先頭のビット列で定められ、境界の位置によりIPアドレスはクラス(class)として分類された。
クラス | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
a | 0 | ネットワーク | ホスト | |||||||||||||||||||||||||||||
b | 1 | 0 | ネットワーク | ホスト | ||||||||||||||||||||||||||||
c | 1 | 1 | 0 | ネットワーク | ホスト | |||||||||||||||||||||||||||
1 | 1 | 1 | 拡張アドレスモード |
しかしRFC791の方式は、ホストアドレスの割り当て数が、クラスaでは16777215、クラスbでは65535にものぼる。これ程の膨大な数のホストを収容するネットワークは一般に存在せず、アドレスの利用に無駄を生じた。そこでRFC950においてサブネット(subnet)が定められた。サブネットはホストアドレスの一部をアドレスマスク(address mask)を用いて分割する事により得られ、あるネットワークアドレスを与えられた組織内において、更にネットワークを分割するために用いられる。
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | ネットワーク | サブネット | ホスト | ||||||||||||||||||||||||||||
アドレスマスク | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
RFC1597においては、ある組織内で私的に用いられる下記のプライベートアドレスが定められた。
- 10.0.0.0~10.255.255.255(10.0.0.0/8)
- 172.16.0.0~172.31.255.255(172.16.0.0/12)
- 192.168.0.0~192.168.255.255(192.168.0.0/16)
上記のアドレス以外はグローバルアドレスとも呼ばれるようになる。
[編集] 予約アドレス一覧
アドレス | 種別 | 規約 |
---|---|---|
0.0.0.0/8 | Current network (only valid as source address) | RFC 1700 |
10.0.0.0/8 | プライベートアドレス | RFC 1918 |
14.0.0.0/8 | Public data network | RFC 1700 |
39.0.0.0/8 | 予約 | RFC 1797 |
127.0.0.0/8 | ローカルホストアドレス | RFC 1700 |
128.0.0.0/16 | 予約 | |
169.254.0.0/16 | LINKLOCALアドレス(APIPA用) | RFC 3927 |
172.16.0.0/12 | プライベートアドレス | RFC 1918 |
191.255.0.0/16 | ||
192.0.0.0/24 | ||
192.0.2.0/24 | テストネットワーク | RFC 3330 |
192.88.99.0/24 | IPv6からIPv4への変換 | RFC 3068 |
192.168.0.0/16 | プライベートアドレス | RFC 1918 |
198.18.0.0/15 | ネットワーク性能試験 | RFC 2544 |
223.255.255.0/24 | 予約 | RFC 3330 |
224.0.0.0/4 | マルチキャスト(クラスD) | RFC 3171 |
240.0.0.0/4 | 予約(クラスE) | RFC 1700 |
255.255.255.255 | ブロードキャスト |
[編集] 経路選択
ルーティング(routing)とも呼ばれ、パケットを宛先へと転送する機能である。この機能はルータに集約され、多くのホストはデフォルト経路としてルータのアドレスを記述するスタイルを取ることが多い。
ネットワーク構成図 | |||||||||||||||||||||||||||
192.168.1.2
ether0
192.168.1.1
127.0.0.1
loopback ether1
10.1.1.1
10.1.1.2
10.1.1.3
172.16/16
|
|||||||||||||||||||||||||||
|
ルータは経路表(ルーティングテーブル、routing table)に基づき経路選択を行う。あるネットワークの構成図とその中心に位置するルータの経路表を右に示す。図中において中心のルータは二つの送受信口を持っており、上の口はether0と名付けられアドレスは192.168.1.1が割り振られている。下の口はether1と名付けられアドレスは10.1.1.1が割り振られている。ルータ内部においてloopbackとはルータ自身を示す送受信口であり、127.0.0.1はルータ自身を現すアドレスである。表中においてdestinationは宛先、nexthopは転送先、interfaceは送信口を意味する。アドレスの記法についてはIPアドレスを参照せよ。
このルータがパケットを受信した際の動作を解説する。192.168.1.1宛のパケットを受信すると、ルータは経路表の宛先を検索し、192.168.1.1/32の行を見つけ、その転送先はルータ自身である事から、自身に宛てられたパケットである事を判別する。192.168.1.2宛のパケットを受信すると、ルータは経路表を検索し、ether0から192.168.1.2に向けてパケットを送出する。10.1.1.2宛のパケットを受信すると、同様にether1から10.1.1.2に向けてパケットを送出する。 172.16.1.1宛のパケットを受信すると、ルータは最長一致する172.16/16の行を見つけ、10.1.1.2が172.16.1.1へと到る経路であると判別し、ether1から10.1.1.2に向けてパケットを送出する。 10.255.255.255宛のパケットを受信する。このアドレスはブロードキャストアドレスと呼ばれ、10/8のネットワークに接続された全ての装置を宛先とするアドレスである。ether1から10/8のネットワークに接続された全ての装置に向けてパケットを送出する。 7.7.7.7宛のパケットを受信する。このアドレスは経路表には存在しないため、defaultの行に最長一致し、ネクストホップである192.168.1.2に向かってパケットを送出する。192.168.1.2はデフォルトゲートウェイやデフォルトルートなどと呼ばれ、通常は端末から見てより中心に位置するルータが設定される。
経路表の構築はルータの管理者が手動で設定する場合と、RIP、OSPFなどのルーティングプロトコルを用いて自動で設定する場合がある。前者は静的経路、後者は動的経路などとも呼ばれる。経路表はパソコンなどにも存在し、Windowsであれば「route print」、UNIX系であれば「netstat -r」で見る事が出来る。
[編集] 断片化と再統合
プロトコルが転送する単位の最大長を、MTU(最大転送単位、Max Transfer Unit)と呼ぶ。IPパケットの最大長は65535オクテットであるが、IPパケットを伝送すべきデータリンク層のMTUは、IPの最大長と較べると短い場合が多く、例えば通常のイーサネットのMTUは1500オクテットである。
断片化(Fragmentation)は、IPパケットがパケットを送出する伝送路のMTUよりも長い場合に発生する。断片化を行う装置はIPパケットを伝送路のMTUに収まる長さに分割し、分割されたパケットのIPヘッダは、全長が分割された長さになり、断片位置には分割された位置が記され、最後のパケット以外は継続フラグが設定される。識別子は分割された全てのパケットに分割前のパケットのそれが写される。
断片化したパケットの再統合(Reassembly)は、パケットの宛先である装置が行う。ある識別子を持つパケットの断片を受信した宛先は、さらに同じ識別子を持つパケットの断片を受信し、それぞれの断片位置から断片化前のパケットを再統合する。
IPヘッダのフラグの禁止ビットを設定すれば、パケットの断片化を禁止できる。この場合は断片化の代わりにICMPの宛先到達不可通知がパケットの送信元に返される。送信元はこれを利用して宛先に至る経路の最小MTUを調査する事も可能である。パケットの長さを1オクテットずつ減らし、宛先到達不可通知が返らなくなる長さを調べれば良い。
断片化は帯域やルータの負荷に無駄(オーバーヘッド)を生じ、スループットの低下となるためため好まれない。経路MTU探索を行いMTUを調整するとよい。なお、IPv6では経路上のルータで断片化・再構成を行うことはなく、送信ホストのみで行われる。
アプリケーション層 |
---|
DNS, TLS/SSL, TFTP, FTP, HTTP, IMAP, IRC, NNTP, POP3, SIP, SMTP, SNMP, SSH, TELNET, BitTorrent, RTP, rlogin, ENRP |
トランスポート層 |
TCP, UDP, DCCP, SCTP, IL, RUDP |
ネットワーク層 |
IP (IPv4, IPv6), ICMP, IGMP, ARP, RARP |
データリンク層 |
イーサネット, 無線LAN (Wi-Fi), トークンリング, PPP, SLIP, FDDI, ATM, DTM, フレームリレー, SMDS |
[編集] 関連
- RFC 791 - Internet Protocol
- RFC 950 - Internet Standard Subnetting Procedure
- RFC 1112 - Host Extensions for IP Multicasting
- RFC 1518 - An Architecture for IP Address Allocation with CIDR
- RFC 1519 - Classless Inter-Domain Routing (CIDR): an Address Assignment and Aggregation Strategy
- RFC 1597 -
- RFC 1817 - CIDR and Classful Routing
- RFC 2101 - IPv4 Address Behaviour Today