別ネットワークに接続する際のIP通信の仕組み
キーワード:IP通信、MACアドレス、IPアドレス、サブネットマスク、デフォルトゲートウェイ、イーサネット、ARP
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
IP通信についてのメモです。
IP通信は、LAN通信で最も使われているらしいイーサネット通信の一つ。
OSI参照モデルと関連させると以下のようなイメージ。
また、実際にやり取りするパケットの構造は、下図のように上位の層のヘッダが下位の層のデータ部分に次々と格納される形となる。
ところで、PCなどの端末にはそれぞれ固有のMACアドレスと呼ばれる番号が割り振られている。
MACアドレスの例:32:61:3C:4E:B6:05
MACアドレスは端末ごとに固有で、原則として別の端末が同じMACアドレスをもっていることはないと考えていい(実際はかぶってることもある)。
また、ネットワーク上の端末にはそれぞれIPアドレスとサブネットマスクによって住所が設定される。
IPアドレスの例: 192.168.1.100
サブネットマスクの例: 255.255.0.0
IPアドレスはサブネットマスクによってネットワーク部とホスト部に分かれる。
ネットワーク部はその端末のネットワークのアドレスで、ホスト部がネットワーク内での端末のアドレスを表している。
IPアドレスとサブネットマスクについては以下のページなどを参照のこと。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
まず、簡単な例として、端末1が同ネットワーク上のアドレス192.168.1.102にある端末2と通信する仕組みを説明する。
イーサネットで通信を行うには、通信相手のMACアドレスを知る必要がある。
物理的に接続されてはいるが、イーサネットパケットのヘッダには宛先としてMACアドレスを記載する必要があるため、MACアドレスを知らないとパケットを生成できない(先ほどのパケット構造参照)。
端末1は送信先のIPアドレスは知っているが(上位のアプリケーションなどで設定されることが多いと思う)、MACアドレスは知らない。
そこで、ARPというプロトコルでまずは相手のMACアドレスを取得しようと試みる。ARPでは、端末1が「IPアドレス192.168.1.102のアドレスを持ってる端末はだれ?」という質問をブロードキャストアドレス宛に送信する。
それを受け取った端末2は、自分のMACアドレスを端末1に返答する。
これで端末1はIPアドレス192.168.1.100に対応するMACアドレスを知ることができ、無事にパケットは送信される。
ブロードキャストは同ネットワークにいる端末3にも届くが、IPアドレスが違うので返答しない。
ARPの仕組みがあることで、端末が変更になってもIPアドレスさえ正しく設定されていれば通信できるようになっている。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
次に端末1と端末2が別ネットワークにあり、ルータを介している場合を考える。
端末1はアドレス133.15.1.100と通信しよう(パケットを送ろう)と思ったとき、サブネットマスクを用いた計算により自分のアドレスと通信先のアドレスではネットワークが異なることに気づく。
原則として異なるネットワークに直接パケットを送ることはできない。
このとき特に通信ルートが設定されていなければ、端末1はデフォルトゲートウェイとして設定されたアドレス192.168.1.10にパケットを送る。
ここでデフォルトゲートウェイにパケットを送るためにも、当然デフォルトゲートウェイのMACアドレスを取得する必要があり、それには上述の手順と同様ARPが使用される。
ARPで取得されたMACアドレスは一定時間メモリに記録されるため、その間は記録されたアドレスをもとに通信を行うことで無駄なやり取りを減らすようになっている。
デフォルトゲートウェイに送られるパケットでは、未確認だが、おそらくイーサネットヘッダのMAC宛先アドレスにデフォルトゲートウェイのMACアドレスが設定され、IPヘッダのIP宛先アドレスには最終的な宛先である133.15.1.100が設定されるのではないかと思う。
今回はパケットを受信したルータに端末2が接続されているので、ルータと端末2の間で同様なやり取りが行われ、端末2にパケットが届く。
ルータが最終的なアドレスの端末とつながっていない場合は、さらにルータのデフォルトゲートウェイなどにパケットを投げることになる。
デフォルトゲートウェイのアドレスが間違っていると、ルータのMACアドレスを取得できずにパケットを送信できなかったり、関係ないルータに送ってしまい最終目的地までパケットがたどりつけないということがあり得る。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
結局別ネットワークに接続する際の通信手順をまとめると以下のような流れになる。
(1)端末1が宛先アドレスのネットワークを自分と比較
(2)端末1がARPでデフォルトゲートウェイのMACアドレスを取得
(3)端末1がルータにパケット送信
(5)ルータが端末2にパケットを送信