1
IPv4 について
インターネットプロトコルバージョン 4
1. 概要 ... 2 2. パケット ... 2 3. アドレス ... 4 3.1. アドレスのクラス ... 4 3.2. 予約アドレス一覧 ... 5 4. 経路選択 ... 6 5. 断片化と再統合 ... 8 6. 関連 ... 9 7. 参考文献 ... 92
1. 概要
Internet Protocol version 4(インターネットプロトコルバージョン 4、IPv4、アイピーブイヨン)は、 OSI 参照モデルにおいてネットワーク層に位置付けられるプロトコルである。 転送の単位であるパケットの経路選択と、その断片化と再統合を主な機能とする。TCP/IP の基 本機能としてインターネットなどで世界中広く用いられている。
2. パケッ ト
IP パケットの先頭には必ず IP ヘッダが付加され、それにより経路選択などの IP の機能が実現 されている。表 2-1 にパケット形式図とそれぞれの領域の役割などを記す。 表 2-1 パケット形式図 0 1 2 3 4 5 6 7 8~15 16 17 18 19~31 バージョン ヘッダ長 サービス種別 全長 識別子 フラグ 断片位置 生存時間 プロトコル チェックサム 送信元アドレス 宛先アドレス 拡張情報 データ バージョン(Version) IP のバージョンであり、IPv4 の場合は 4 が格納される。 ヘッダ長(Internet Header Length、IHL) IP ヘッダの長さで、4 オクテット単位で表される。この 値によりデータの開始位置を知る事が出来る。
表 2-2 サービス種別
0 1 2 3 4 5 6 7
3 る。表 2-2 にサービス種別を示す。ただし、ルータの実装においてパケット毎にサービスを区別 する事は容易では無い。送信元が全てを重視とする設定を行う場合や、ネットワークの運用方 針によっては境界に位置するルータが値を書き換える場合もある。優先度はパケットの優先度 を 8 段階で示す。パケットの送信待ち行列を 8 個用いて実現する実装もある。遅延度はパケット を早く宛先へと到達させる事を求める。転送量はパケットを多く宛先へと到達させる事を求める。 信頼性はパケットを失わず宛先へと到達させる事を求める。 全長(Total Length) IP ヘッダを含むパケットの全長。 識別子(Identification) パケットの送信元が一意な値を格納する。断片化したパケットの復元 に用いられる。パケットの断片化については 5 節で説明する。 表 2-3 フラグ 0 1 2 予備 禁止 継続
フラグ(Various Control Flags) 断片化の制御に用いる。表 2-3 にフラグを示す。ビット 0 は使 用しない。ビット 1 は 1 の場合に断片化の禁止を意味する。ビット 2 は断片化された各パケット において、0 の場合は最終パケットを意味する。 断片位置(Fragment Offset) ルータなどがパケットを断片化した際に、その位置を 8 オクテット 単位で格納する。断片化したパケットの復元に用いられる。 生存時間(Time to Live、TTL) パケットの余命を示す値である。送信元はパケットが経由でき るルータ数の上限を設定し、ルータはパケットを転送する毎に値を一つ減らし、値が 0 になると パケットは破棄される。パケットがネットワーク上で無限に巡回する問題を防ぐ効果が有る。 プロトコル(Protocol) TCP などの上位プロトコルを示す値が設定される。パケットの宛先である 装置がパケットを受信すると、この値を用いて上位プロトコルを識別し、その実装へペイロード を渡す。 チェックサム(検査合計、Header Checksum) IP ヘッダの誤り検査に用いられる。転送毎に生存 時間の値が変わるため、ルータはチェックサムも転送毎に再計算する必要がある。 送信元アドレス(Source Address) パケットの送信元アドレスが設定される。アドレスの詳細に ついては 3 節で説明する. 宛先アドレス(Destination Address) パケットの送信先アドレスが設定される。 拡張情報(Options) 可変長の拡張情報が 32 ビット単位で設定される。 データ パケットが伝達すべきペイロードである。
4
3. アドレ ス
IP で用いられる 32 ビットのアドレスは IP アドレスと呼ばれ、IP アドレスはネットワークアドレスと ホストアドレスに分けて用いられる。3.1. ア ド レ ス の ク ラ ス
RFC791 において、ネットワークアドレスとホストアドレスの境界は、IP アドレスの先頭のビット列 で定められ、境界の位置により IP アドレスはクラス(class)として分類された。表 3-1 に IP アド レスのクラスを示す。 表 3-1 IP アドレスのクラス クラス 0 1 2 3 4 5 6 7 8~15 16~23 24~31 a 0 ネットワーク ホスト b 1 0 ネットワーク ホスト c 1 1 0 ネットワーク ホスト 1 1 1 拡張アドレスモード しかし RFC791 の方式は、ホストアドレスの割り当て数が、クラス a では 16777215、クラス b では 65535 にものぼる。これ程の膨大な数のホストを収容するネットワークは一般に存在せず、アド レスの利用に無駄を生じた。そこで RFC950 においてサブネット(subnet)が定められた。サブネ ットはホストアドレスの一部をアドレスマスク(address mask)を用いて分割する事により得られ、 あるネットワークアドレスを与えられた組織内において、更にネットワークを分割するために用い られる。表 3-2 にアドレスマスクを示す。5 0 1 2~15 16~23 24~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) 上記のアドレス以外はグローバルアドレスとも呼ばれるようになる。
3.2. 予 約 ア ド レ ス 一 覧
表 3-3 に予約アドレスの一覧を示す。6
表 3-3 予約アドレス一覧
アドレス 種別 規約
0.0.0.0/8 Current network (only valid as source address) RFC 1700
10.0.0.0/8 プライベートアドレス RFC 1918 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 ブロードキャスト
14.0.0.0/8 は、Public data network のために予約されていたが(RFC 1700)、2008 年 2 月に予約 は解除された[1]。
39.0.0.0/8 は、Class A Subnet Experiment として予約されていたが(RFC 1797)、現在では予約は 解除されている[2]。
4. 経路選 択
ルーティング(routing)とも呼ばれ、パケットを宛先へと転送する機能である。この機能はルータ に集約され、多くのホストはデフォルト経路としてルータのアドレスを記述するスタイルを取るこ とが多い。図 4-1 のような構成のネットワークにおける経路表を表 4-1 に示す。
7
図 4-1 ネットワーク構成 表 4-1 経路表
destination nexthop interface
default 192.168.1.2 ether0 192.168.1.1/32 127.0.0.1 loopback 192.168.1.2/32 192.168.1.2 ether0 10.1.1.1/32 127.0.0.1 loopback 10.1.1.2/32 10.1.1.2 ether1 10.1.1.3/32 10.1.1.3 ether1 172.16/16 10.1.1.2 ether1 10.255.255.255/32 10.1.1.1 ether1 ルータは経路表(ルーティングテーブル、routing table)に基づき経路選択を行う。あるネットワ ークの構成図とその中心に位置するルータの経路表を右に示す。図中において中心のルータ は二つの送受信口を持っており、上の口は ether0 と名付けられアドレスは 192.168.1.1 が割り振 られている。下の口は ether1 と名付けられアドレスは 10.1.1.1 が割り振られている。ルータ内部 において loopback とはルータ自身を示す送受信口であり、127.0.0.1 はルータ自身を現すアドレ スである。表中において destination は宛先、nexthop は転送先、interface は送信口を意味する。 アドレスの記法については 3 節を参照せよ。
このルータがパケットを受信した際の動作を解説する。192.168.1.1 宛のパケットを受信すると、 ルータは経路表の宛先を検索し、192.168.1.1/32 の行を見つけ、その転送先はルータ自身であ る事から、自身に宛てられたパケットである事を判別する。192.168.1.2 宛のパケットを受信する と、ルータは経路表を検索し、ether0 から 192.168.1.2 に向けてパケットを送出する。10.1.1.2 宛
8 のパケットを受信すると、同様に 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」で見る事が出来る。
5. 断片化 と再統合
プロトコルが転送する単位の最大長を、MTU(最大転送単位、Max Transfer Unit)と呼ぶ。IP パ ケットの最大長は 65535 オクテットであるが、IP パケットを伝送すべきデータリンク層の MTU は、 IP の最大長と較べると短い場合が多く、例えば通常のイーサネットの MTU は 1500 オクテットで ある。 断片化(Fragmentation)は、IP パケットがパケットを送出する伝送路の MTU よりも長い場合に発 生する。断片化を行う装置は IP パケットを伝送路の MTU に収まる長さに分割し、分割されたパ ケットの IP ヘッダは、全長が分割された長さになり、断片位置には分割された位置が記され、最 後のパケット以外は継続フラグが設定される。識別子は分割された全てのパケットに分割前の パケットのそれが写される。 断片化したパケットの再統合(Reassembly)は、パケットの宛先である装置が行う。ある識別子 を持つパケットの断片を受信した宛先は、さらに同じ識別子を持つパケットの断片を受信し、そ れぞれの断片位置から断片化前のパケットを再統合する。 IP ヘッダのフラグの禁止ビットを設定すれば、パケットの断片化を禁止できる。この場合は断片 化の代わりに ICMP の宛先到達不可通知がパケットの送信元に返される。送信元はこれを利用
9
減らし、宛先到達不可通知が返らなくなる長さを調べれば良い。
断片化は帯域やルータの負荷に無駄(オーバーヘッド)を生じ、スループットの低下となるため 好まれない。経路 MTU 探索を行い MTU を調整するとよい。なお、IPv6 では経路上のルータで 断片化・再構成を行うことはなく、送信ホストのみで行われる。
6. 関連
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
7. 参考文 献
[1] http://www.iana.org/assignments/ipv4-address-space/ [2] RFC 3330