IP (Internet Protocol)

 インターネットプロトコル、すなわちIPは、IPデータグラムを送信元ホストのネットワークインタフェースから送信先ホストのネットワークインタフェースまで配送するためのプロトコルである。各ネットワークインタフェースは、IPアドレスと呼ばれる固定長の識別子によって一意に定められる。
 IPは、インターネットに接続されたホスト間のデータグラムの配送に必要な機能のみ実現され、上位プロトコルに対してこれらの機能を提供する。これ自体にはデータの信頼性や配送順序は保障されない。このようなプロトコルを最善努力型(best effort)プロトコルと呼ばれる。

IP Address

 先に示したように、ネットワークインタフェースには、一意に定められる識別子が付与される。これをIPアドレスと呼ぶ。IPデータグラムには送信元と送信先のIPアドレスが含まれる。IPアドレスは4 byte(32 bit)からなる。通常IPアドレスの表記は8 bitずつに分けた4つの10進数を用いる。eg) 133.14.13.200

 32 bitのIPアドレスはネットワーク部とホスト部に分割され、同一のネットワークに接続されたホストには、同一のネットワークアドレスが付与される。インターネットでは、大小さまざまなネットワークが相互接続している。これおらに接続されたネットワークインタフェースのIPアドレスを付与される際に、そのネットワークの大きさに応じてネットワーク部とホスト部のビット長を変えることができる。その手法の一つとしてクラスフルアドレッシングというものがある。

IPアドレスのクラス

クラス 上位bit
クラスA 0 先頭から8 bitがネットワーク部
残りの24 bitがホスト部
クラスB 10 先頭から16 bitがネットワーク部
残りの16 bitがホスト部
クラスC 110 先頭か24 bitがネットワーク部
残りの8 bitがホスト部
クラスD 1110 マルチキャストアドレスとして用いられている。
クラスE 1111 予約されている。
実験などに用いられ、実用的に使用するクラスではない。

 IPデータグラムを配送するルータは、送信先ネットワークインタフェースのIPアドレスの上位bitによって、そのIPアドレスのネットワーク部のビット数を決定できる。

Classful Addressing to Subnetting

 IPアドレスひとつで宛先のネットワーク情報だけでなく、ネットワーク部とホスト部の区切りを指定できることは画期的であったが、これには問題があった。それは、IPアドレスの枯渇問題である。クラスフルアドレッシンには、ユーザに割り当てることができるアドレスクラスは3種類に限られてしまったことだ。ネットワーク規模が大きすぎず、小さすぎないクラスBにユーザからのIPアドレス割当要求が集中するなど、IPアドレスが無駄に消費されることが増えた。
 この問題を解決するために、サブネットという概念が誕生した。

サブネット

 サブネットは、収納するホストの台数に適した大きさのネットワークを形成するために、あるネットワークを細分化して構築したネットワークのことを指す。ネットワークを適切に分割することをサブネット化といい、それによって構築されたネットワークをサブネットという。ネットマスクについては後で説明する。

IPデータグラムの構成

IPデータグラムでは、配送機能を備えたヘッダ部分と上位プロトコルから配送を要求されたデータ部分に分割される。
Ver IHL TOS Total Length
Identification Flag Fragment Offset
TTL Protocol Header Checksum
Source Address
Destination Address
Option
Data

フィールドそれぞれについて以下に説明する。

IPバージョン(Ver) (4 bit)

 インターネットプロトコルのバージョンを表す。

ヘッダ部分の長さ(IHL) (4 bit)

32 bitを単位としたヘッダ部分の長さを表す。オプションを含まないIPデータグラムでは5となる。

配送サービスの種類(TOS) (8 bit)

 このIPデータグラムに、どのような配送サービスを提供するべきか、Type of Serviceという情報についてのヒントをルータに提供する。
 はじめの3 bitは配送の優先度、4から6 bitはDTR bitとよばれ、配送経路に対しての要求を表す。D bitは遅延に関する要求、T bitはスループットに関する要求、R bitは信頼性に関する要求である。7,8 bit目は必ず0とする。IPであるから、TOSの要求はbest effortによって実現され、必ずしも要求が保障されるものではない。
IPデータグラム全体の長さ(Total Length) (16 bit)  IPデータグラム全体の長さ(byte)を表す。このフィールドの大きさは16 bitであるから、1つのIPデータグラムの大きさは65535(2^(16) - 1) byteより大きくなることはない。

IPデータグラムの識別子(Identification)

 IPデータグラムは、物理フレームのデータとして転送されるが、それぞれの物理ネットワークには配送できる物理フレームの最大長が指定されている。これをMTU(Maximum Transmission Unit)とよぶ。イーサネットにおけるMTUは1500 byte、FDDIにおけるMTUは4470 byteのように指定されているが、これを超える容量をもったIPデータグラムを配送するとき、複数のフレームに分割して配送する。これをフラグメンテーション(fragmentaion)という。
 Identificationは分割した複数のIPデータグラムに対して同一の値を与えることで、これらのIPデータグラムがあるIPデータグラムからフラグメンテーションされたものだと判断することができる。IPデータグラムの復元は送信先ホストのみが実現できる仕様になっている。

フラグメンテーションに関する情報(Flag/Fragment Offset)

 データグラムが複数の物理ネットワークを経由して配送されるとき、配送途中でフラグメンテーションが必要になった場合を想定する。
 分割されたIPデータグラムには次の内容が記録される。
  • 分割されたIPデータグラムに同一のIdentificationが与えられる。
  • IPデータグラムがフラグメンテーションされたことを示すために、Flagフィールドの3 bit目を1にする。
  • 分割したIPデータグラムが元のIPデータグラムデータグラムにおいて何バイト目から何バイト目のデータを含んでいるのかをオフセット情報としてFragment offsetに記録する。
Flagは3 bitからなる。以下にフォーマットを示す。

0 D M
D bit: Don't Fragment Bit, M bit: More Fragment Bit

 1 bit目は必ず0にする。
 D bitは、このIPデータグラムをルータがフラグメンテーションしてもよいかを示す。ここが0であれば、フラグメンテーションを許可する。一方で、1であれば、MTUがIPデータグラムのサイズより小さかったとしても、IPデータグラムのフラグメンテーションを許可しない。このときルータは、そのIPデータグラムを破棄する。
 M bitは、このIPデータグラムに続くフラグメントが存在するかを示す。存在する場合は1、存在しない場合は0が格納される。分割していないIPデータグラムはこのbitは0である。また、フラグメンテーションしたIPデータグラムにおいて、データの末尾が含まれているフラグメント以外は1、データの末尾が含まれているフラグメントは0が格納される。

 Fragment Offsetは、フラグメントがもつデータの先頭が元のIPデータグラムにおいてどこの位置に存在したかを8 byteを単位として表現したものである。あるフラグメントの先頭が元のIPデータグラムにおける560 byte目のデータであったとき、Fragment Offsetには70が格納される。

TTL(Time To Live) (8 bit)

 配送中のIPデータグラムの寿命を表す。TTLは送信元ホストで初期値が与えられ、配送経路上のルータを介するごとに値を1ずつ減らされていく。TTLが配送途中で0になったならば、このIPデータグラムを破棄する。これによって、不当な送信先IPアドレスをもつIPデータグラムがネットワーク内を永久配送され続け、ループしてしまうことを防いでいる。

上位プロトコル(Protocol) (8 bit)

 IPは、ネットワークインタフェース間のIPデータグラムの配送を実現する。送信元ホストのIPソフトウェアモジュールでは、上位プロトコルから受信したIPデータグラムのデータ部分として、適切なヘッダ部分とともに、IPデータグラムを作成する。たとえば、TCPセグメントをデータにもつIPデータグラムを受信したとき、送信先ホストでは、受信したIPデータグラムからデータ部分を取り出し、TCPソフトウェアモジュールに引き渡す。
 このように、IPの機能は様々な上位プロトコルによって利用されるが、IPソフトウェアモジュールがどの上位プロトコルのソフトウェアモジュールに引き渡せばよいか区別をつける必要がある。
Protocolフィールドの値と上位プロトコルの対応関係は次のように決定されている。
  • ICPM(Internet Control Message Protocol): 1
  • UDP(User Datagram Protocol): 17
  • TCP(Transmission Control Protocol): 6

ヘッダチェックサム(Header Checksum) (16 bit)

 IPは、best-effort typed protocolであるため、IPデータグラムに含まれるデータ部分について信頼性を保障しない。しかし、IPにおいてもヘッダ部分についてのみ、配送途中でエラーが発生しないか確認する。Header Checksumは送信元ホスト上ではいうまでもなく、配送経路上の各ルータ上においても再計算が行われる。これは、配送途中でその他のフィールドの情報が変更および更新されることがあるからである。
 以下にHeader Checksumの計算手順を示す。
  1. IPデータグラムのヘッダ部分を先頭から16 bitずつに区切る。
  2. 区切られたそれぞれについて1の補数を計算する。ただし、Header Checksumの16 bit分は0であるとする。
  3. 前項の計算結果の和を算出する。その値の1の補数をHeader Checksumとする。

Source Address

送信元ネットワークインタフェースアドレスのための32 bitのフィールドである。

Destination Address

送信先ネットワークインタフェースアドレスのための32 bitのフィールドである。

ICPM (Internet Control Message Protocol)

 IPデータグラムの配送失敗の原因がさまざまである。
  • 配送経路が存在しない
  • フラグメンテーションが発生したIPデータグラムを再構成できない。
  • Flagフィールドの要求により、フラグメンテーションが許可されていないため、ネットワークを通過できない。
  • source routingができない。
これらのエラーが発生したとき、送信元ホストに通知する必要があるが、これを実現するプロトコルがICMPである。また、ICMPは次の用途にも使用される。
  • 送信元ホストのルーティングテーブルが不適切がゆえにIPデータグラムの配送経路が冗長であるとき、適切なルーティングテーブルの情報を通知する。
  • ルータの処理がIPデータグラムの受信に追いつかないとき、送信元ホストに送信速度を下げるように要求する。
  • ネットワークインタフェースが正常に作動しているか確認する。

 ICMPメッセージIPデータグラムの配送に必須である。IPの実装にはICMPの実装が必須であるから、ICMPはIPはと同一のレイヤのプロトコルとされている。


  ICMPメッセージは、8 byteのICMP HeaderとICMP Dataによって構成される。ICMPメッセージはIPデータグラムのデータ部分に格納される。ICMPは、エラーの発生原因の所在にかかわらず、送信元ネットワークインタフェースまで通知する。また、ICMPメッセージの配送中にエラーが発生しても、これに対するエラー通知がICMPで配送されることはない。

ICMP MESSAGE
あるネットワークについて、ループした経路があるとき、IPデータグラムはTTLによって配送途中に処理を中断し、ICMPメッセージを送信元に配送するが、ループした経路であるため、ICMPメッセージも同様にTTLによって破棄されてします。このとき、ICMPメッセージのエラー通知を送信してしまうと、先の2例と同様に永久に配送が完了しない。したがって、エラー通知に対するエラー通知は行わないこととなっている。

ICMPによって提供される機能

  1. ICMP echo
  2.  エコー要求(echo request)とエコー応答(echo reply)から構成され、指定されたネットワークインタフェースへの到達可能性を確認する。

    TYPE(8/0) CODE(0) CHECKSUM
    ID SEQUNCE NUMBER
    OPTIONAL DATA
    ...
    ICMP ehco format

    ICMPメッセージのタイプ - TYPE (8 bit)

     echo reqestでは8、echo replyでは0が付与される。

    CODE (8 bit)

     ICMP echoでは、要求、応答ともに0とする。

    CHECKSUM (16 bit)

     CHECKSUMの算出方法は、IPヘッダにおけるCHECKSUMと同様である。

    ID (16 bit)

     ICMPの識別子が格納される。ホストが送信したエコー要求と受信したエコー応答が対応づいているか確認できる。

    SEQUENCE NUMBER

     エコー要求を繰り返し送信する際は、このフィールドの値を1ずつインクリメントする。

  3. 配送エラーの報告

  4. TYPE(3) CODE(0-5) CHECKSUM
    0
    IP HEADER + 64 bit Data
    ...
    ICMP message format for delivery error reports

     IPデータグラムの配送に失敗したとき、エラーの発生とその原因を送信元ホストに通知する。
     このとき、メッセージのTYPEフィールドの値は3、CODEフィールドの値は配送失敗の原因に依存する。
    • Network Unreachable --> Code: 0
    •  送信先ネットワークインタフェースが接続された物理ネットワークに到達できない。

    • Host Unreachable --> Code: 1
    •  送信先ネットワークインタフェースに到達できない。

    • Protocol Unreachable --> Code: 2
    •  送信先ホストに渡すべき上位プロトコルのソフトウェアモジュールが存在しない。

    • Port Unreachable
    •  IPデータグラムのデータ部分を渡すべきポートが送信先ホストに存在しない。

    • Fragment Needed --> Code: 4
    •  フラグメンテーションが禁止されているIPデータグラムが、そのサイズより小さなMTUを用いたネットワークへの配送が必要になり、配送に失敗した。

    • Source Route Failed --> Code: 5
    •  ソースルーティングオプションをもつIPデータグラムが指定された経路による配送に失敗した。

     5 byteから8 byte目の残りのヘッダ部は0である。ICMPメッセージのデータ部には、配送に失敗したIPデータグラムのヘッダ部分とデータ部分のはじめの8 byteが格納される。これによって、配送に失敗したIPデータグラムをおよそ特定することができる。

    その他にも次のような場合に使用されることをまとめて示す。
  5. 始点抑制 (Source Quench)
  6.  あるルータにIPデータグラムが集中して転送され、このるーたの処理能力では、経路制御処理が追いつかなく状態を輻輳(ふくそう)という。これを解決し、転送されてきたIPデータグラムデータグラムを処理するために、送信元ホストに対して送信速度を下げるように要求する必要がある。ICMPはこの要求を通知する。
     TYPE feild: 4
     CODE feild: 0

    TYPE(4) CODE(0) CHECKSUM
    0
    IP HEADER + 64 bit Data
    ...
    ICMP message format for ICMP source quench

  7. 方向変換
  8.  ネットワークトポロジー(通信ネットワーク上のインタフェースの接続形態)の変更、インタフェースの増減が発生してもIPデータグラムは正しく配送しなくてはならない。ルータ間では、RIPやOSPFといったプロトコルによって経路情報を交換している一方で、ホストに対して経路情報を適切に変更するためには、ICMPによって情報がもたらされる。
     TYPE feild: 5  Codeフィールドの値は以下の条件にしたがって割り当てられる。
    • Redirect for Net --> Code: 0
    • IPデータグラムで指定したネットワークへの配送時に、通知するルータにIPデータグラムを転送する。

    • Redirect for Host --> Code: 1
    • IPデータグラムで指定したホストへの配送を行うときに、通知するルータにIPデーらグラムを転送する。

    • Redirect for TOS and Net --> Code: 2
    • IPデータグラムで指定したネットワークへの配送を指定したTOSで行うとき、通知するルータにIPデータグラムを転送する。

    • Redirect for TOS and HOST --> Code: 3
    • IPデータグラムで指定したホストへの配送を指定したTOSを行うとき、通知するルータにIPデータグラムを転送する。
    TYPE(5) CODE(0-3) CHECKSUM
    router IP address
    IP HEADER + 64 bit Data
    ...
    ICMP message format for chage of direction

  9. 時間切れ
  10.  IPデータグラムのTTLが0になるか、フラグメント再構成のタイマが切れるかいづれかが発生した場合、ICMPは送信元ホストに対してこれを通知する。
     TYPE feild: 11
     Codeフィールドの値は以下の条件にしたがって割り当てられる。
    • Time out for TTL --> Code: 0
    • Time out for re-constructing fragments --> Code: 1
    TYPE(11) CODE(0/1) CHECKSUM
    0
    IP HEADER + 64 bit Data
    ...
    ICMP message format for time out

  11. タイムスタンプ取得
  12.  ICMPには、指定したホストからタイムスタンプを取得する機能が備わっている。 Timestamp Requestに送信時のタイムスタンプを記録して送信する。受信側ではICMPソフトウェアモジュールが受信時のタイムスタンプを記録する。さらに、Timestamp Replyを作成すると、応答時の時刻を記録して要求ホストに送信する。
    この機能は、いくつかの技術に応用される。
    • クロックの同期
    • ラウンドトリップタイムの推測

     ICMPタイムスタンプメッセージは以下のフォーマットをとる。
     TYPE --> Request: 13, Reply: 14
     CODE: 0
     ORIGINAL TIMESTAMP: 32 bit. Timestamp when sending a request.
     RECEIVE TIMESTAMP: 32 bit. Timestamp when receiving the request.
     TRANSMIT TIMESTAMP: 32 bit. Timestamp when sending its reply.

    TYPE(13/14) CODE(0) CHECKSUM
    ID SEQUENCE NUMBER
    ORIGINAL TIMESTAMP
    RECEIVE TIMESTAMP
    TRANSMIT TIMESTAMP
    ICMP message format for getting timestamp

  13. アドレスマスク取得
  14.  ディスクレスワークステーションでは、アドレスマスクを記憶しておくことができない。このとき、ブート時にサーバホストからアドレスマスクを取得刷る必要があり、これを実現するのはICMPアドレスマスク取得機能である。
     TYPE --> Request: 17, Reply: 18
     CODE: 0
     ADDRESS MUSK: 32 bit.input the address mask.
    TYPE(17/18) CODE(0) CHECKSUM
    ID SEQUENCE NUMBER
    ADDRESS MUSK
    ICMP message format for getting address mask

    現在では、アドレスマスク取得にはDHCP(Dynamic Host Configuration Protocol)などを用いている。

    サブネットとCIDR

     前述のとおり、1つのクラスを強雨有する複数の物理ネットワークは、それぞれサブネットと呼ばれるが、サブネットに分割されたネットワークにおいて、IPデータグラムを配送する手法についておおまかに2通りある。

    (1) Proxy ARP

     以下の図のような場面を考える。ホストH1、ルータR1、R2、物理ネットワークN1、N2に接続されている。ただし、N1、N2はひとつのIPアドレスを共有しているとする。

    Subnet Routing by Proxy ARP
    Subnet Routing by Proxy ARP

    インターネットからH1宛てのIPデータグラムがR1に到達した場合を考える。R1は、IPアドレスより、H1と同一のネットワークに接続していると判断する。R1はARPを用いて、H1の物理ネットワークアドレスの取得を要求する。このとき、R2がH1に代わって、自分の物理ネットワークアドレスをR1に通知することでR2に物理フレームが送出される。また、受信したIPデータフレームをR2からH1に配送する。
     このように、1つのクラスを共有する物理ネットワークアドレスを接続するルータが、それぞれのIPアドレスを保持し、そのルータを通過させるべきIPデータグラムを配送する際は、送信先へのARP要求に対して、配送途中のルータが自分の物理ネットワークアドレスを通知することでIPデータグラムの中継を実現できる。これをProxy ARPという。
     Proxy ARPは、代理ルータの機能以外に一切変更を必要としないことが利点であるが、ARPに依存したシステムであることから、代理ルータになりすまされる可能性もある。

    (2) Netmask

     32 bitのアドレスをネットワーク部とホスト部に分割することで、IPアドレスを階層化することに成功した。同様に、同一のネットワークを分割したサブネットそれぞれを示す部分をアドレスに組み込む必要がある。この手法において、IPアドレスのホスト部と呼ばれていたビット列をローカル部とする。ローカル部は、サブネット部とホスト部と呼ばれる。このサブネット部が、それぞれの物理ネットワークを対応付ける。
    Subnet Routing by Netmask

     ネットマスクの導入によるサブネットへの分割においては、このサブネット化されたネットワークに接続されたルータにおいては、従来と同様の配送アルゴリズムを用いてIPデータグラムを配送できる。しかし、このサブネットに接続されるルータでは、サブネットを考慮したルーティングを行わなければならない。ルータは、ネットワーク部とサブネット部から得られる物理ネットワークアドレスと次に転送すべきルータのIPアドレスとを対応付ける必要がある。このとき、どのビットを物理ネットワークを示すアドレスであるか。これを判定するのに、サブネットマスクが用いられる。