Webエンジニアのブログ

「マスタリングTCP/IP 入門編」要約 第4章「IPプロトコル」

マスタリングTCP/IP 入門編 第5版」の第4章の要約です。

IPプロトコル

IP(Internet Protocol)はパケットを目的のコンピュータに届けるという重要な役割がある。 TCP/IPの心臓部ともいえるのがインターネット層で、これはIPとICMPという2つのプロトコルから構成されている。

現在使われているIPは今後のネットワークの発達に対応しきれないため、IPv6という新しいIPプロトコルが作られた。そのためまずはIPv4について説明し、その後IPv6について説明する。

IPはOSI参照モデルの第3層

IPはOSI参照モデルの第3層であるネットワーク層に相当する。 ネットワーク層の役割を一言でいうと、コンピュータ間でパケットの通信を実現することにある。

インターネットの世界ではIPアドレスが付けられた機器をホストと呼ぶ。正確に言うとIPアドレスが付けられているが経路制御(ルーティング)を行わない機器という意味。 経路制御も行うのがルーターと呼び、ホストとはまた違うものとして区別される。 一般的にホストとルーターを合わせてノードと呼ぶ。

IPの基礎知識

IPには3つの役割がある。

  • IPアドレス
  • 終点ホストまでのパケット配送
  • IPパケットの分割処理と再構築処理

IPアドレスはネットワーク層のアドレス

ネットワーク層における住所がIPアドレスである。 TCP/IPで通信するすべてのホストやルーターには必ずこのIPアドレスを設定しなければならない。

経路制御

経路制御(ルーティング)は宛先IPアドレスのホストまでパケットを届けるための機能。

ルーターやホストはIPパケットに次の転送先となるホストなどを指示するだけで、最終目的地までの経路を提示するわけではない。 それぞれのルーターとルーターとの区間などで繰り返し転送処理が行われ、最終的な宛先ホストまでパケットがたどり着く。 これらの転送先はルーティングテーブルと呼ばれる情報として持っている。

パケットとして分割する

下位層であるデータリンクでは、最大転送単位というものを異なる性質として持っている。 そのためIPでは大きなパケットを複数の小さなパケットに分割する分割処理(フラグメンテーション)を行う。

IPはコネクションレス型

IPはコネクションレス型であり、通信相手とのコネクションは確立しない。 上位層に送信すべきデータが発生したらすぐにIPパケットにデータを詰めて送信する。

つまりコネクション型ということは、いつ誰からパケットが送られてくるか分からないため、常にネットワークを監視して自分宛てのパケットが来たらそれを受信して処理しなければならない。 このようなコネクションレス型は無駄な通信をするように思えるが、機能の簡略化と高速化のために採用されている。 コネクション型はコネクションレス型に比べて処理が複雑であり、コネクション情報を管理するのも大変である。また通信の度にコネクションを確立すると処理速度の低下にもつながる。 もしコネクション型が必要となる場合は、上位層であるTCPで提供する。

IPアドレスの基礎知識

IPアドレス(IPv4アドレス)は32ビットで表され、一般的には8ビットずつの4組に分け、172.0.0.1のように10進数で表現する。 32ビットということはIPアドレスで表現できる数は2^32、およそ43億となる。

ネットワーク部とホスト部

IPアドレスはネットワーク部とホスト部から構成される。 どこまでがネットワーク部でどこからがホスト部なのかは、歴史的に2種類の区別がある。初期のIPではクラスというもので分けられていたが、現在ではサブネットマスクによって分けられる。

クラスは「最初のビットが0ならここまでがネットワーク部」、といったように予めそれぞれの範囲が決められていたため、効率的にIPアドレスを利用できなかった。そのため現在はサブネットマスクが主に使われている。 サブネットマスクは、例えば172.20.100.52というIPアドレスに/26と付ければ、左から26ビットがネットワーク部だということを示すことができる。/26の部分がサブネットマスクになる。

このようなクラスに縛られないアドレス制御はCIDR(Classless InterDomain Routing)と呼ばれている。

ブロードキャストアドレス

ネットワークの全てのホストに配信したいときは、ホスト部のビットを全て1にする。このアドレスをブロードキャストアドレスという。 例えば172.20.0.0/16のブロードキャストアドレスは172.20.255.255になる。

プライベートIPアドレス

インターネットに接続しない独立したネットワークの場合は、そのネットワーク内だけでIPアドレスがユニークであればいいため、プライベートIPアドレスが誕生した。 プライベートIPアドレスは以下のように範囲が決められている。この範囲外にあるIPアドレスはグローバルIPアドレスと呼ばれる。

  • 10.0.0.0~10.255.255.255
  • 172.16.0.0~172.31.255.255
  • 192.168.0.0~192.168.255.255

プライベートIPアドレスとグローバルIPアドレスとを変換するためにはNAT(Network Address Translation)という技術を用いる。

グローバルIPアドレス

グローバルIPアドレスは全世界的にICANNという所で一元管理されている。日本国内ではJPNICがグローバルIPアドレスの割り当て機関として活動しており、他の機関が割り当てることは禁止されている。

経路制御(ルーティング

受け取ったIPアドレスを宛先のホストに送るための情報をルーティングテーブルという。 ルーティングテーブルには管理者が事前に設定するスタティックルーティングと、他ルーターと情報交換して自動的に作成するダイナミックルーティングがある。

デフォルトルート

デフォルトルートはどの経路制御表にもマッチしない場合のルートのことである。 0.0.0.0/0、またはdefaultと記述する。よくある疑問だが、0.0.0.0/32とした場合は0.0.0.0というIPアドレス自体を示すことになる。そのため/0を付けてIPアドレス自体を示している訳ではない、ということを表している。

ループバックアドレス

同じコンピュータ内部で通信したい場合には172.0.0.1(localhost)というIPアドレスが使われる。このアドレスを利用した場合はネットワークにパケットが流れない。

IPの分割処理と再構築処理

前述した通り、データリンクによって最大転送単位(MTU)が異なる。そういったデータリンクの性質を抽象化するため、IPアドレスの分割処理(フラグメンテーション)をしなければならない。

経路MTU探索

経路MTUとは、送信先ホストから宛先ホストまで分割処理が必要にならない最大のMTUのことである。 つまり経路MTU探索は、経路MTUを発見し、送信元ホストでデータを分割してから送信する方法である。これにより送信先だけでフラグメンテーションを行えばよいため、途中経路で分割処理や再構築処理を行わなくともよくなる。

IPv6

IPv6はIPv4アドレスの枯渇問題を解決するために標準化され、利用がはじまったインターネットプロトコルである。 IPv6では128ビット長になっている。

IPプロトコルの移行は、インターネットに接続しているホストなどの全てのIPを変更しなければならないため、膨大な手間がかかる作業である。 そのためIPv6ではIPv4の不満を一挙に解消しようとしている。またIPv4との互換性を持たせる努力が行われている。

IPv4ヘッダ

IPを利用して通信を行うときには、データにIPヘッダが付けられて送信される。 このIPヘッダにはIPによってパケットの配送を制御するときに必要になる情報が格納されている。

  • IPのバージョン
  • ヘッダ長(IPヘッダ自体の長さ)
  • パケット長(IPヘッダとIPデータを加えたパケット全体の長さ)
  • 識別子(フラグメントを復元する際の識別子)
  • フラグ(パケットの分割に関わる制御)
  • ヘッダチェックサム(IPヘッダが壊れていないことを保証するもの)
  • 送信元IPアドレス
  • 宛先IPアドレス

第4章 終わり

以上がIPプロトコルについての説明。 エンジニアにとっては身近に感じられる内容であったため、まとめていて楽しかった。


{ "name": "hareku", "job": "Software Engineer" }