今や仕事や生活に欠かせない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アドレス) | 送信元ネットワークインターフェース |
|---|---|---|
| default | 192.168.1.1 | en0 |
192.168.1.1は自宅のルーターのIPアドレスです。
defaultは個別で指定している宛先以外の全てを指します。(8.8.8.8宛もdefaultに含まれます)
よって、8.8.8.8に送信するときは、ルーター宛にen0から送信することを意味します。
このように、各機器がルーティングテーブルを持つことで、宛先IPアドレスに至るまでの経路が確定します。
物理レベルでどう送信するか
ただし経路が分かったとしても、それだけでは情報を送れません。
実際に情報を送信するには、物理レベルでどのネットワークインターフェース(自分)からどのネットワークインターフェース(相手)へ送信するかを明確にする必要があります。
まず、自身のどのネットワークインターフェースから送信するかは、前述したようにルーティングテーブルに記載されています。
次に、相手のどのネットワークインターフェースへ送信するかは、ARPテーブルを参照します。
| 参照するテーブル | |
|---|---|
| どのネットワークインターフェースから? | ルーティングテーブル |
| どのネットワークインターフェースへ? | ARPテーブル |
ARPテーブルには、最終的な宛先ではなく、直接の送信先IPアドレスに対応するネットワークインターフェース(MACアドレス)が記載されています。
例えば私のPCであれば、送信先がルーターの場合は、以下のMACアドレスを持つネットワークインターフェース宛に送信する、ということが分かります。
| 送信先IPアドレス | MACアドレス |
|---|---|
| 192.168.1.1 | 00:1A:2B:3C:4D:5E |
ここで、送信先IPアドレスとは、ルーティングテーブルのネクストホップのことです。
つまり、ルーティングテーブルによって次に送る相手のIPアドレスが分かり、ARPテーブルによって、そのIPアドレスを持つ機器のネットワークインターフェース(MACアドレス)が分かる、という寸法です。
余談
ところで、送信元ネットワークインターフェースはeth0などの論理名で指定し、送信先ネットワークインターフェースはMACアドレスで指定するのでしょうか。
OS内部では自身のネットワークインターフェースを論理名で扱っています。この論理名は物理ネットワークインターフェースに紐づいています。したがって、自身のネットワークインターフェースは論理名を指定すればOKです。
一方論理名は機器内部で使用するものなので、外部のネットワークインターフェースを指定する際は、一意の名前であるMACアドレスを使用します。
よって、送信先指定にはMACアドレスを使用します。
コメント