迫真の氷結晶

初投稿です。

  • HOME
  • 自己紹介
  • 作品集
  • ポエム系

デフォルトゲートウェイは同一セグメント内のホストじゃなきゃダメだよ

2020-01-17
  • #技術系
  • #ネットワーク

「なんだこのアホみたいなタイトルは」と分かっている人は思うかもしれませんが、道端を歩きながら、なぜかふと「デフォルトゲートウェイは同一セグメント内のホストじゃなきゃダメだよね?」と初歩的なことが気がかりになってしまい、明示的にそう言っているサイトも存在しなかったので後学のためにもまとめときます。

デフォルトゲートウェイには、同一セグメント内のホストを指定しなければなりません。

そのホストのMACアドレスを知っている必要があるからです。

(本当は順序が逆で、「同一ネットワークでないネットワークと通信するためにデフォルトゲートウェイが必要」なんですけどね…!)

似たような意味かつより具体的に、いくつか言い換えてみます。

  • 「ARPでMACアドレスを解決できる」相手のIPアドレスをデフォルトゲートウェイの値として設定できます。
  • 「リンク上」にあるホストのIPアドレスをデフォルトゲートウェイの値として設定できます。
  • 「直接接続」しているホストのIPアドレスをデフォルトゲートウェイの値として設定できます。

この3つの文章はほとんど同じ意味です。

大前提

ゲートウェイの動きを理解する上での大前提は、

MACアドレスを知らないホストと通信することはできない

ということです。

ホストは、自分のMACアドレス宛ではないEthernetフレームは破棄してしまいます(ブロードキャストなどは除く)。たとえ宛先IPアドレスが確かに自分のものだったとしても、宛先MACアドレスが自分宛でなければ、宛先IPアドレスが自分のものかを確認することもせずそのフレームを捨ててしまいます。

デフォルトゲートウェイを設定すると何が起こるか

あなたがルーターやパソコンだとしましょう。

  1. 今、デフォルトゲートウェイが 192.168.10.1 に設定されました。
  2. あるIPパケットがあり、その宛先 114.514.810.931(実在しません) がマッチしたのはデフォルトルート(0.0.0.0/0)だけでした。これは知らない宛先なので、このパケットを、(デフォルト)ゲートウェイに代わりに宛先まで届けてもらいたいです。
  3. そこで、宛先IPアドレスはそのままにしておいた上で、宛先MACアドレスを「 192.168.10.1 のホストに対応するMACアドレス」としたパケット(Ethernetフレーム)を用意して送出することで、「 114.514.810.931 宛のIPパケットをバケツリレーしてくださいと、192.168.10.1 (というIPアドレスを持ったホスト)に対してお願いした 」ことになるのです。

同一ネットワーク内/直接接続/リンク上でなければいけない理由

上の、3つ目のステップで、デフォルトゲートウェイに設定したホストの、MACアドレスが必要になります。

しかし、設定値としてはデフォルトゲートウェイのホストのIPアドレスが設定されています。

そこで、設定されたIPアドレスから、そのホストのMACアドレスを調べたいです。

したがって、「このIPアドレスを持ってる人はMACアドレスを教えてください」とARPリクエストをブロードキャストします。

ここで、ゲートウェイとして設定されたIPアドレスが外部ネットワークのものだと、ARPリプライが返ってこないのでMACアドレスが分からず、先ほどの「バケツリレーのお願い」に失敗します。

宛先が FF:FF:FF:FF:FF:FF であるARPブロードキャストはネットワークを超えて外部に転送されないので、外部ネットワークのホストにこのARPパケットは届きません。

何度ARPリクエストを送信してもゲートウェイのMACアドレスが分からず、送ろうとしていたパケットがいつまでたっても転送できないので、結局タイムアウトでパケットが消失するでしょう。

同じネットワーク内のホストだけがこのARPリクエストを受け取り、返事をすることができるので、デフォルトゲートウェイは同一ネットワークのホストでなければならないのです。

追記

どのサイトも長ったらしくて読みづらいなと思って自分で書いてみたら長ったらしくて読みづらくなりました。キレそう。

図やイラストを載せるだけで相当分かりやすさが変わると思うけど面倒くさいので文字で済ませました。許し亭ゆるして。