IPアドレスを使用した通信の仕組み:ルーティングテーブルとARPテーブル

今や仕事や生活に欠かせないIP通信の仕組みを簡単にまとめます。

IP通信の基本

IP通信では、宛先をIPアドレスで指定すると、そのIPアドレスを持つ機器に情報が届きます。
例えば、GoogleのパブリックDNS (8.8.8.8) 宛にpingを送ってみると、IPパケットが8.8.8.8に届き、返答があったことが分かります。

$ping -c 3 8.8.8.8

PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=119 time=8.406 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=119 time=14.977 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=119 time=8.645 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 8.406/10.676/14.977/3.043 ms

なぜ、IPアドレスを指定するだけで、情報が届くのか?
そのキーとなるのが、ルーティングテーブルとARPテーブルです。

ルーティングテーブルの経路情報を参照する

送信先が同じネットワークセグメントに属していない限り、情報を届けるには複数のルーターを経由する必要があります。

例えば、8.8.8.8までの経路を確認すると、以下のように複数のルーターを経由していることが分かります。

$traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 40 byte packets
 1  192.168.1.1  4.547 ms  3.819 ms  4.015 ms
 2  150.249.73.1  6.061 ms  5.899 ms  6.138 ms
 3  92.203.139.76  5.858 ms  6.046 ms  6.075 ms
 4  219.98.228.221  5.946 ms  6.233 ms  5.723 ms
 5  202.213.193.53  5.998 ms
    202.213.193.85  5.977 ms
    202.213.193.53  5.923 ms
 6  120.74.58.43  8.152 ms
    219.98.234.43  7.922 ms
    120.74.58.43  10.075 ms
 7  202.213.198.74  5.948 ms  5.985 ms  5.963 ms
 8  108.170.248.171  5.931 ms
    142.251.66.207  6.151 ms
    108.170.248.243  5.805 ms
 9  209.85.243.1  7.994 ms
    209.85.253.57  6.019 ms
    142.250.214.149  5.969 ms
10  8.8.8.8  6.094 ms  5.885 ms  5.937 ms

どのルーターを経由すれば宛先に辿り着けるのか、その経路情報を持っているのが、ルーティングテーブルです。
ルーティングテーブルには以下の情報が記載されています。

  • 宛先IPアドレス
  • ネクストホップ(次の送信先IPアドレス)
  • 送信元ネットワークインターフェース

例えば私のPCのルーティングテーブルは以下のようになっています。

宛先IPアドレスネクストホップ(次の送信先IPアドレス)送信元ネットワークインターフェース
default192.168.1.1en0

192.168.1.1は自宅のルーターのIPアドレスです。
defaultは個別で指定している宛先以外の全てを指します。(8.8.8.8宛もdefaultに含まれます)

よって、8.8.8.8に送信するときは、ルーター宛にen0から送信することを意味します。

このように、各機器がルーティングテーブルを持つことで、宛先IPアドレスに至るまでの経路が確定します。

ルーティングテーブルの構築方法は、OSPFなどいくつかのアルゴリズムが存在します。

物理レベルでどう送信するか

ただし経路が分かったとしても、それだけでは情報を送れません。
実際に情報を送信するには、物理レベルでどのネットワークインターフェース(自分)からどのネットワークインターフェース(相手)へ送信するかを明確にする必要があります。

まず、自身のどのネットワークインターフェースから送信するかは、前述したようにルーティングテーブルに記載されています。
次に、相手のどのネットワークインターフェースへ送信するかは、ARPテーブルを参照します。

参照するテーブル
どのネットワークインターフェースから?ルーティングテーブル
どのネットワークインターフェースへ?ARPテーブル

ARPテーブルには、最終的な宛先ではなく、直接の送信先IPアドレスに対応するネットワークインターフェース(MACアドレス)が記載されています。

例えば私のPCであれば、送信先がルーターの場合は、以下のMACアドレスを持つネットワークインターフェース宛に送信する、ということが分かります。

送信先IPアドレスMACアドレス
192.168.1.100:1A:2B:3C:4D:5E


ここで、送信先IPアドレスとは、ルーティングテーブルのネクストホップのことです。
つまり、ルーティングテーブルによって次に送る相手のIPアドレスが分かり、ARPテーブルによって、そのIPアドレスを持つ機器のネットワークインターフェース(MACアドレス)が分かる、という寸法です。

余談

ところで、送信元ネットワークインターフェースはeth0などの論理名で指定し、送信先ネットワークインターフェースはMACアドレスで指定するのでしょうか。

OS内部では自身のネットワークインターフェースを論理名で扱っています。この論理名は物理ネットワークインターフェースに紐づいています。したがって、自身のネットワークインターフェースは論理名を指定すればOKです。

一方論理名は機器内部で使用するものなので、外部のネットワークインターフェースを指定する際は、一意の名前であるMACアドレスを使用します。
よって、送信先指定にはMACアドレスを使用します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする