別ネットワークに接続する際のIP通信の仕組み

キーワード:IP通信、MACアドレスIPアドレスサブネットマスクデフォルトゲートウェイイーサネットARP

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

IP通信についてのメモです。

IP通信は、LAN通信で最も使われているらしいイーサネット通信の一つ。

OSI参照モデルと関連させると以下のようなイメージ。

 

 

f:id:PIKA2:20190407201301p:plain

また、実際にやり取りするパケットの構造は、下図のように上位の層のヘッダが下位の層のデータ部分に次々と格納される形となる。

f:id:PIKA2:20190407204641p:plain

 

ところで、PCなどの端末にはそれぞれ固有のMACアドレスと呼ばれる番号が割り振られている。

  MACアドレスの例:32:61:3C:4E:B6:05

MACアドレスは端末ごとに固有で、原則として別の端末が同じMACアドレスをもっていることはないと考えていい(実際はかぶってることもある)。

 

また、ネットワーク上の端末にはそれぞれIPアドレスサブネットマスクによって住所が設定される。

  IPアドレスの例:    192.168.1.100

  サブネットマスクの例: 255.255.0.0

IPアドレスサブネットマスクによってネットワーク部とホスト部に分かれる。

ネットワーク部はその端末のネットワークのアドレスで、ホスト部がネットワーク内での端末のアドレスを表している。

 IPアドレスサブネットマスクについては以下のページなどを参照のこと。

サブネットマスク計算(IPv4)/サブネット一覧(早見表)

 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

まず、簡単な例として、端末1が同ネットワーク上のアドレス192.168.1.102にある端末2と通信する仕組みを説明する。

          

        f:id:PIKA2:20190407205457p:plain

イーサネットで通信を行うには、通信相手の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が別ネットワークにあり、ルータを介している場合を考える。

f:id:PIKA2:20190407210935p:plain

端末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がルータにパケット送信

(4)ルータがARPで宛先アドレスのMACアドレスを取得

(5)ルータが端末2にパケットを送信