logo
Published on

IPがどのように機能するか

Authors

IPがどのように機能するか自信を持って説明できるようになるための記事です。
クラウドサービス利用時などIPの知識が役に立つ場面は多いので、ぜひ最後までご覧ください。

Table of Contents

まずは、あらゆる文脈で登場するIPアドレスについて説明します。

IPアドレス

IPアドレスとは、IPネットワーク1に接続されたコンピュータなどに割り振られる識別番号です。
32ビットの整数値で表し、8ビットずつドットで区切って10進数で表記します2
たとえば、10.11.12.13です。

IPアドレスは、各ホストが所属するネットワークを示すネットワーク部と、ネットワークに所属する各ホストを示すホスト部に分かれています。

内訳はユーザーが自由に決めることができ、その情報のことをネットマスクと呼びます。
IPアドレス32ビットのうち、ネットワーク部が何ビット分あるかをIPアドレスの右隣に/で区切って表記します。
表記の仕方は2パターンあり、ネットワーク部が24ビットの場合は以下のように表記します。

  • 10.11.12.13/255.255.255.0
  • 10.11.12.13/24

ちなみに、ホスト部がすべて0あるいは1の場合は特別な意味を持ちます。

  • ホスト部がすべて0: サブネット3自体を表す。
  • ホスト部がすべて1: サブネット上にある機器全員にパケットを送付するブロードキャストを表す。

最初に理解しておきたいIPアドレスについて説明できたので、次は全体像であるIPネットワークを見ていきましょう。

IPネットワーク

IPネットワークの全体像

PCから何らかのWebサイトを閲覧するケースを考えます。

IPネットワーク

全体のネットワークは、サブネットという小さなネットワークをルーターで接続することによって出来上がります。
通信の流れは以下です。

  1. PC1からハブ1を経由4しつつ最寄りのルーター1にパケットを届ける
  2. ルーター1が次にパケットを届けるべきルーターを判断し、ルーター3にパケットを届ける
  3. ルーター3が目的のサーバーにパケットを届ける

ルーター1がルーター2ではなくルーター3にパケットを届けるべきと判断する仕組みが肝です。
これについては後ほど経路表のところで説明します。
経路表を深堀りする前に、パケットの具体的な中身を見ていきましょう。

パケットの基本

パケットはヘッダーとデータで構成され、前者には宛先を表すアドレスなどの制御情報が入っており、後者には実際に送信したいデータが入っています。
IPという文脈において、ヘッダーには以下2種類があります。

  • IPヘッダー: ルーターなどが使うIP用のヘッダー
  • MACヘッダー: ハブなどが使うイーサネット用のヘッダー

これらヘッダーに記録される情報を使って、先ほど図解した内容を補足します。

パケットの基本

各要素間のパケットのヘッダーに記載されている内容を示した図です。
ポイントは以下です。

  • IPヘッダーには常に最終目的地であるサーバーのIPアドレスが記載されている
  • MACヘッダーには次の目的地のMACアドレス5が記載されている

これらのヘッダーを読み書きしながら、パケットはルーターを経由して目的のサーバーに届けられます。


IPネットワークの全体像が説明できたので、次はPC/サーバーの動作を見ていきます。

PC/サーバーの動作

IPという観点ではPCとサーバーは同じような動きをするのでまとめて説明します。
送信動作は以下です。

  1. TCPから送信依頼される
  2. IPヘッダーを作る
    • 宛先IPアドレスに、TCPから通知された通信相手のIPアドレスを設定する。
    • 送信元IPアドレスに、送信元となるLANアダプタを判断してそのIPアドレスを設定する。詳細は後述。
    • その他必要な情報6を設定する。
  3. MACヘッダーを作る
    • 宛先MACアドレスに、送信先のルーターなどのMACアドレスを設定する。詳細は後述。
    • 送信元MACアドレスに、送信元となるLANアダプタに書き込まれているMACアドレスを読み出して設定する。
  4. イーサネットに送信依頼する

受信動作は以下です。

  1. イーサネットからパケットを渡される
  2. IPヘッダーを見て以下を実施
    • 自分宛かどうかを確認。自分宛でなければICMP7というメッセージを使って通信相手にエラーを通知。
    • フラグメンテーション8によるパケット分割の有無を確認。分割されていたら復元。
  3. TCPにパケットを渡す

大きな流れは説明できたので、後回しにしていた送信元IPアドレスと宛先MACアドレスの設定方法を見ていきます。

送信元IPアドレスの設定方法: 経路表

先ほど

送信元IPアドレスに、送信元となるLANアダプタを判断してそのIPアドレスを設定する。

と説明しました。
LANアダプタは複数存在する場合があるので、どのLANアダプタが対象なのか判断する必要があります。
その判断に使われるのが経路表で、以下は例です。

Network DestinationNetmaskGatewayInterface
0.0.0.00.0.0.010.10.1.110.10.1.16
127.0.0.0255.0.0.0127.0.0.1127.0.0.1
192.168.1.0255.255.255.010.10.1.210.10.1.16
  • Network Destination と Netmask: パケットの最終目的地を示す。
  • Gateway: 中継先のルーターのIPアドレスを示す。これが右のInterface欄と同じ場合9は、ルーターを経由せずに、宛先IPアドレスのマシンに直接送信できる。
  • Interface: パケットを出力するインターフェースを示す。

たとえば3行目だったら、192.168.1.0というIPネットワークに所属するマシンにパケットを送るには、10.10.1.16のインターフェースから10.10.1.2のルーターに送ればいいということです。

Network Destination はあくまでIPネットワークを示すことに注意してください。
たとえば、192.168.1.21という宛先IPアドレスにパケットを送る場合、192.168.1.0のネットワーク部である192.168.1に部分一致するので3行目に該当する、というふうに考えます。
このように、宛先IPアドレスの左側の部分一致で経路表を検索します。
ちなみに、複数の行に該当する場合は、最長一致する行が選ばれます。

送信元のLANアダプタのIPアドレスを判断する話に戻ります。
LANアダプタのIPアドレスは経路表のInterface欄に記載されているので、宛先IPアドレスが192.168.1.21の場合は10.10.1.16になります。
このように、宛先IPアドレスと経路表があれば送信元IPアドレスを決定できます。

宛先MACアドレスの設定方法: 経路表とARP

宛先MACアドレスは中継先のルーターのMACアドレスです。
中継先のルーターのIPアドレスは経路表のGateway欄に記載されています。
宛先IPアドレスが192.168.1.21の場合は10.10.1.2です。

このIPアドレスからMACアドレスを導き出すためのプロトコルがARPです。
ARPは、イーサネットで繋がっている全員にパケットを届けるブロードキャストを使って、「10.10.1.2というIPアドレスはいませんか?いたらMACアドレスを返答してください。」と問いかける仕組みです。
そうすれば、いずれかのマシンがMACアドレスを返答してくれます。
このように、宛先IPアドレスと経路表があれば宛先MACアドレスを決定できます。


次はルーターの動作を見ていきます。

ルーターの動作

ルーターのパケット送受信動作は以下です。

  1. イーサネットからパケットを渡される。
  2. 宛先MACアドレスに自分が該当するかどうかを確認。該当しないなら棄てる。
  3. IPヘッダーの宛先IPアドレスと経路表を使って出力ポートを決定。後ほど具体例を出して補足します。
  4. TTLというパケットの生存期限を表すIPヘッダーのフィールドを更新。ルーターを経由する都度、この値を1ずつ減らしていく。それが0になったらパケットを棄てる。
  5. パケットが大きければフラグメンテーション機能8で分割する。
  6. MACヘッダーを作る
    • 経路表のGateway欄から送信先のIPアドレスを決定し、ARPでMACアドレスを導き出して、宛先MACアドレスに設定する。
    • 出力ポートに割り当てられているMACアドレスを、送信元MACアドレスに設定する。
  7. イーサネットに送信依頼する

デフォルト・ゲートウェイを使ったルーティング

先ほどの

IPヘッダーの宛先IPアドレスと経路表を使って出力ポートを決定。後ほど具体例を出して補足します。

についてです。
基本的にPC/サーバーで説明した経路表の部分と同様の動きなのですが、デフォルト・ゲートウェイという重要な概念についての説明がまだなのでここで触れます。

宛先IPアドレスが10.11.12.13だとして、経路表は上記と同様のものを使います。

Network DestinationNetmaskGatewayInterface
0.0.0.00.0.0.010.10.1.110.10.1.16
127.0.0.0255.0.0.0127.0.0.1127.0.0.1
192.168.1.0255.255.255.010.10.1.210.10.1.16

どの行が該当するのでしょうか?

2行目を見てみます。
127.0.0.0のネットワーク部は127ですが、10.11.12.13と部分一致しないので該当しません。

次に3行目を見てみます。
192.168.1.0のネットワーク部は192.168.1ですが、同じく10.11.12.13と部分一致しないので該当しません。

該当する行がないように見えますが、実は1行目が該当します。
ネットマスクが0.0.0.0、つまりネットワーク部がないのがポイントです。
ネットワーク部がないので、部分一致するかどうか比較する対象がありません。
これをどう捉えるかは人それぞれかもしれませんが、あらゆるIPアドレスと部分一致するとみなします。

この行のことをデフォルト・ゲートウェイと呼びます。
この行以外に該当しなければ、デフォルト・ゲートウェイを使ってパケットを送信します。

この行以外に該当すれば、デフォルト・ゲートウェイが採用されることはありません。
なぜなら、この場合にデフォルト・ゲートウェイが最長一致することはありえないからです。


ここまででPC/サーバーとルーターの基本動作が説明できました。
最後にルーターが持つ他の機能を見ていきます。

ルーターの他の機能

アドレス変換

アドレス変換とは、グローバルアドレスとプライベートアドレスを相互に変換する機能です。

  • グローバルアドレス: 全世界で一意なIPアドレス。
  • プライベートアドレス: 社内用のネットワークなどで使われるIPアドレス。ネットワークが異なれば同じアドレスを使うことができる。アドレスの範囲は以下。
    • 10.0.0.010.255.255.255
    • 172.16.0.0172.31.255.255
    • 192.168.0.0192.168.255.255

IPアドレスが十分にあればグローバルアドレスのみでいいのですが、そういうわけではないので、IPアドレスを節約するためにプライベートアドレスを使います。

それでは、アドレス変換の流れを見ていきましょう。
プライベートアドレス10.10.1.1のクライアント1から、グローバルアドレス198.18.8.31のルーターを経由して、グローバルアドレス192.0.2.79のサーバーと通信する場合を考えます。

アドレス変換
  1. 送信元のIPアドレスをプライベートアドレス10.10.1.1からグローバルアドレス198.18.8.31に変換。このグローバルアドレスはアドレス変換装置のインターネット側にあるポートに割り当てたもの。
  2. ポート番号も書き換える。ここでは1025から5436に変換。5436はアドレス変換装置が未使用の番号を適当に選んだもの。
  3. 書き換える前のプライベートアドレスとポート番号、書き換えた後のグローバルアドレスとポート番号を対応表に記録。
  4. パケットをサーバーへ送信。
  5. サーバーはアドレス変換装置198.18.8.31:5436宛にパケットを送信。
  6. アドレス変換装置は、対応表から10.10.1.1:1025宛へのパケットだと判断して、クライアント1にパケットを送信。
  7. 必要な回数これらの送受信を繰り返す。
  8. アクセス動作が終了したら、対応表に登録したものを削除10

パケットフィルタリング

パケットを中継するときに、MACヘッダー, IPヘッダー, TCPヘッダーの内容を調べてそれが事前に設定した条件に合致したら、パケットを中継する、あるいは、棄てるという動作を行います。

奥深いテーマなのですが、この記事のスコープが広がりすぎるので、これ以上は割愛します。


ここまでで一通り説明したかったことは以上です。
最後にこの記事のゴールが達成できたか振り返ります。

ふりかえり

この記事のゴールは達成できたでしょうか?

IPがどのように機能するか自信を持って説明できるようになる

具体的には以下観点で言語化をすることが大切だと思います。

  • PC, ルーター, サーバーに着目した通信の流れ
  • 宛先IPアドレス, 送信元IPアドレスがどう決定されるのか
  • 宛先MACアドレス, 送信元MACアドレスがどう決定され、どう書き換わっていくのか

これらが言語化できれば、付随するIPアドレス, 経路表, ARPなどの知識もおさえられるはずです。
アドレス変換とパケットフィルタリングについては上記観点から外れてしまうかもしれませんが、ルーターを語る以上避けては通れないテーマなので、今回説明に加えました。

今回は以上です。
最後までご覧いただきありがとうございました。

参考

Footnotes

  1. インターネットやLANなど。

  2. IPv4の説明。IPv6では128ビットの整数値で表す。

  3. ハブに何台かのコンピュータが接続されたもの。ハブ含め後ほど図解で言及。

  4. ハブの経由については以降省略。

  5. イーサネット用のアドレス。IPアドレスはIP用のアドレス。

  6. 詳細はIPv4#パケット - Wikipedia参照

  7. 詳細はICMPとは?TCP/IPの通信状態を確認するプロトコル参照。

  8. 詳細はJPRS用語辞典|IPフラグメンテーション(IP fragmentation)参照。 2

  9. Gateway欄が空欄になることもある。この場合も宛先IPアドレスのマシンに直接送信できる。

  10. 対応表に存在しないクライアントへは、インターネットからアクセスできない。裏を返すと、対応表に手動で登録しておけば、インターネットからアクセスできるようになる。