3 Minutes NetWorking Supplement
No.25

3Minutes NetWorking Supplement

補講第25回ルーティングとルータ

■ ネットワークをつなげる

おねーさん

おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3 Minutes Networking、

ほげたん

Supplement !!

おねーさん

えっとね、ほげたん。今回は、「ちょっと思いついて試してみたら出来ちゃったので書かずにはいられなかった」話。

ほげたん

なにその前フリ。

おねーさん

さて、ルータがなければFWでつなげればいいじゃない。……、じゃなくて。
ルータがなければ異なるネットワークにはつながらない、だったわよね。

ほげたん

ルータのかわりにFWを使うとか、もう何がしたいかわからないよ。んで、そうだね、ルータがないとネットワークはつながらない。他のネットワークへ送信できない。例えば、次のようなのはダメだったよね。

つながらないホスト

[FigureSP25-01:つながらないホスト]

おねーさん

そうね、ルータの存在しない同一セグメントに異なるネットワークのIPアドレスを持つホストがあっても、この2台は直接通信できない。ルータを配置しなきゃダメ、なのよね。

ほげたん

そうだよ、ルータを配置して、「サブネットを分ける」ことが必要だよね。そしてそれぞれのホストのデフォルトゲートウェイをルータにしないと。つまり、図でいうとこう。

ルータを配置

[FigureSP25-02:ルータを配置]

おねーさん

うん。そうすれば、確かにホスト同士で送信できるようになる。

ほげたん

常識だよ、おね〜さん。ルータはサブネットをつなぐ役割なんだよ。「ルータがなければ異なるネットワークへの経路を作れないのでつながらない」だよ。これに例外はない。

おねーさん

ふふふ。「例外はない」ね。……あははははっ、ほげたん、そうだといいわね。

ほげたん

……まさか、おね〜さんっ!!

おねーさん

その「まさか」なのよ。ほら、一休さんも「己自身を疑え、世界を疑え」っていってるじゃない。

ほげたん

おね〜さん。ホント「あっかんべぇ一休」好きだよね。
ともかく、ルータなしでもつながるの? そんなの聞いたことないよ?

おねーさん

それを説明するためには、「ホストがどのようにしてパケットを送っているか」から考えましょう。

■ ホストの送信プロセス

おねーさん

さて、今回はホストとしてWindowsを使うけど、まぁ普通のホストは大体同じプロセスだと思ってくれちゃっていいわ。
では、レイヤ4のTCP/UDPからレイヤ3に処理が移った段階から説明しましょう。

  1. 宛先IPアドレスがアプリケーションの指示により決定
  2. ルーティングテーブルを参照。宛先IPアドレスとロンゲストマッチにより、送信インタフェース、ゲートウェイ決定
  3. 送信元IPアドレスを送信インタフェースのIPアドレスに
  4. ARPキャッシュ参照。宛先MACアドレスの入手
    1. ARPエントリ検索
      1. ゲートウェイがない(自分自身)の場合、宛先IPアドレスのARPエントリを検索
      2. ゲートウェイがある場合、ゲートウェイのIPアドレスのARPエントリを検索
    2. ARPエントリがないならばARP実行
      1. ゲートウェイがない(自分自身)の場合、宛先IPアドレスでARPリクエスト
      2. ゲートウェイがある場合、ゲートウェイのIPアドレスのARPリクエスト
  5. 送信インタフェースのMACアドレスを送信元MACアドレスに
  6. 送信インタフェースからフレーム送信(CSMA/CDまたは全二重イーサネットによる制御)
ほげたん

うん。レイヤ3、レイヤ2の処理は確かにこうなるよね。

おねーさん

よね。さてさて、ここで考えるポイントは1つ。つまり何故ルータがないと別サブネット宛がつながらないのか。ほげたん、なんで?

ほげたん

なんでって。……どうして?

おねーさん

質問に質問で返さない。ん〜じゃあ、「ルータがあった場合」のことを考えてみましょ。これは実際の例があったほうがわかりやすいわね。さっきのFigureSP25-02でいきましょ。これのホストAがホストBへ送信する。

ルータを配置

[FigureSP25-02:ルータを配置]

ほげたん

ルータがある場合だね。んと、さっきの手順でいくと…。

  1. 宛先IPアドレスが10.0.0.1に決定
  2. ルーティングテーブルを参照。送信インタフェース192.168.0.5、ゲートウェイ192.168.0.1に決定
  3. 送信元IPアドレスを192.168.0.5に
  4. ARPキャッシュ参照。宛先MACアドレスの入手
    1. ARPエントリ検索
      1. 192.168.0.1のARPエントリを検索
    2. ARPエントリがないならばARP実行
      1. 192.168.0.1にARPリクエスト
  5. 送信インタフェースのMACアドレスを送信元MACアドレスに
  6. 送信インタフェースからフレーム送信(CSMA/CDまたは全二重イーサネットによる制御)
おねーさん

ルーティングテーブルは、route printコマンドで確認できるわね。

ホストAのルーティングテーブル(ルータあり)

[FigureSP25-03:ホストAのルーティングテーブル(ルータあり)]

ほげたん

あぁ、うん。いつも「show …」って打ってから、「あぁ違う違う」ってやる奴ね。

おねーさん

そうそう、毎回やるわよね。ともかく、このルーティングテーブルのデフォルトルートである0.0.0.0が一致するので、送信インタフェース192.168.0.5、ゲートウェイ192.168.0.1が決定する、と。

ほげたん

そうだよ。あとは192.168.0.1へARPしてMACアドレス入手して、送信しちゃえばOK。

おねーさん

ふふふ、ちょっと考えてみましょう。手順(4)、(5)、(6)。これはARPとイーサネットによる送信よね。これはIPとはある意味無関係よね。パパの決め科白から考えると。

ほげたん

パパさんの決め科白? ……あぁ、「レイヤは独立している!!」だね。ARPはレイヤ3に分類されることが多いけど、実際的にはレイヤ2.5ぐらいというか、まぁIPというプロトコルからは独立してるよね。

おねーさん

そうよね。ARPは「宛先IPアドレスのMACアドレスを調べる」だけしかしないからね。さて、パパの決め科白的に「レイヤは独立してる」ので、(4)、(5)、(6)は(3)が無事終了すればそのあとは実行される、ってことね?

ほげたん

ん〜、そうなるのかな。IP的なプロセス、つまり(1)、(2)、(3)が終われば、(4)から先はやってくれるってことになってもおかしくないよね。

おねーさん

うん。「ARP、イーサネットはIPとは独立しており、IPのプロセスが終われば実行される」。これ、覚えておいてね。

ほげたん

「レイヤは独立している!!」、だね。

おねーさん

じゃあ、次はルータがない場合のFigureSP25-01で手順を考えてみて?

つながらないホスト

[FigureSP25-01:つながらないホスト]

ほげたん

ルータがない場合は……。

  1. 宛先IPアドレスが10.0.0.1に決定
  2. ルーティングテーブルを参照。エントリなし、パケット破棄
おねーさん

ルータが、つまりデフォルトルートを指定していない場合のルーティングテーブルはこうなるわね。

ホストAのルーティングテーブル(ルータなし)

[FigureSP25-04:ホストAのルーティングテーブル(ルータなし)]

ほげたん

うん、デフォルトルートが存在しない、つまりルーティングテーブルに一致するものがないので、この場合パケット破棄になる、と。

おねーさん

はい、ほげたん。じゃあさっきの質問をもう一度させてもらうわ。「何故ルータがないと別サブネット宛がつながらないのか」?

ほげたん

……ルーティングテーブルに一致するものがないので、破棄されちゃう、から?

おねーさん

ふふふ、わかってきた、ほげたん?

ほげたん

なんとなくね。

■ ルータなしでの接続

おねーさん

つまりね。このルーティングテーブルにもし一致する行があったとすれば、問題ないってことなわけよ。さっきの言葉を思い出してね。

ほげたん

「ARP、イーサネットはIPとは独立しており、IPのプロセスが終われば実行される」だったよね。つまり、手順でいえば(2)さえ通過するならば、あとはARP、イーサネットが実行されるってこと?

おねーさん

そうそう、そうなるわけ。よって、(2)で破棄されてしまうのが問題ならば、破棄されないようにしちゃえばいいのよ。

ほげたん

破棄されないためには、ルーティングテーブルに一致する行が必要。ってことは、手動で追加すればいいのかな?

おねーさん

そう、ルーティングテーブルに宛先IPアドレスに対応するゲートウェイなしの行を作成すればよいってことね。FigureSP25-01の場合、どういう行が必要?

ほげたん

宛先IPアドレスである10.0.0.1に対して、ゲートウェイがなし、送信インタフェース192.168.0.5の行、かな?

おねーさん

そう。じゃあ、さっそく追加してみましょ。

ホストAのルーティングテーブル(追加)

[FigureSP25-05:ホストAのルーティングテーブル(追加)]

ほげたん

赤い下線のところがそうだね。宛先が10.0.0.0/24の場合、送信インタフェース192.168.0.5、ゲートウェイ192.168.0.5、と。

おねーさん

うん。で、ホストB側にも同じようにルーティングテーブルに行を追加してね。そうしないと応答が返ってこないから。じゃあ、ホストBにpingを実行してみましょう。

pingの実行結果

[FigureSP25-06:pingの実行結果]

ほげたん

おおおっ、届いてる!! ルータないのに、別サブネットの10.0.0.1に。

おねーさん

ほげたんが素直に驚いてくれてうれしいから、ARPキャッシュも見せちゃおう。

ARPキャッシュ

[FigureSP25-07:ARPキャッシュ]

ほげたん

インタフェースのIPアドレスが192.168.0.5なのに、ARPキャッシュに10.0.0.1のダイナミックのエントリとか。もう普通じゃありえないよね。

おねーさん

まぁ、普通のARPキャッシュは同サブネット内のホストのIPアドレスしかエントリが存在しないはず、だもんねぇ。

ほげたん

いやこれ、わかる人が見たら「何この擬装画像」っていいかねない内容じゃない?

おねーさん

ふふふ、かもね。つまりこの追加により、別サブネット宛の通信を直接行う設定にしたってわけね。

ほげたん

うんうん、確かに。同一サブネット宛と同じように、直接宛先へARP、送信を行ったわけだね。

おねーさん

さて、これを一歩推し進めると。
デフォルトルートを、ゲートウェイなしにしちゃえば、もっとすごくならない?

ホストAのルーティングテーブル(追加2)

[FigureSP25-05:ホストAのルーティングテーブル(追加2)]

ほげたん

こうなると……、すべての別サブネットを直接アクセスするようになる、よね。

おねーさん

そういうこと。これでpingを実行すると?

pingの実行結果2

[FigureSP25-09:pingの実行結果2]

ほげたん

おおお、やっぱりpingが通る。

おねーさん

いや実はね、おね〜さん、メールソフト立ちあげた状態でこれの実験しててね。そしたら、ARPキャッシュにメールサーバのIPアドレスのエントリがあって笑っちゃった。あ、もちろんinvalidなエントリね。

ほげたん

あー、すべてのサブネットあてに対してARP実行しちゃうからそうなるんだね。

■ ルータの役割

おねーさん

さて、「ルータがなくても別サブネットと通信する」方法はわかったかな?
といっても、直接宛先とつながっている場合のみ、だけどね。

ほげたん

レイヤ2的につながっていれば、だね。同一セグメント上、同一ブロードキャストドメイン上でARPが通るならば、って条件だね。

おねーさん

そうなるわね。

ほげたん

……これってさ、ルータは別サブネットと通信するためには必要ないってことだよね?

おねーさん

そうね、別にルータがなくてもつながるからね。

ほげたん

じゃあ、ルータの役割は? なんのためにルータが必要なの?

おねーさん

そうねぇ、これはあくまでも「同一ブロードキャストドメイン上」でなければできないのはわかるわよね。つまり「世界が1つのブロードキャストドメイン上にあれば、ルータは存在しなくてもよい」。これってどれだけ無茶いってるかわかるわよね?

ほげたん

あー、うん。そうだね。世界が、もしくはある程度の規模のネットワークが1つのブロードキャストドメインなんて、まともに通信ができなくなること請け合いだね。

おねーさん

そう。つまりルータの役割とは「ブロードキャストドメインを分割したうえでネットワークをつなぐ」。

ほげたん

トラフィックの点からブロードキャストドメインは分割せざるを得ない。ブロードキャストドメインを分割するということはレイヤ2が分断されるということになるよね。

おねーさん

レイヤ2が分断されるということは、直接通信できない。つまり「中継処理」が必須になるわけね。そこで「経路選択」の機能を持つルータが必要となる、ということね。

ほげたん

「交通手段」の「乗り換え」を考えないとダメってことだね。

おねーさん

そういうことね。

ほげたん

しかし、あれだね。今回の話は面白いし、「ルータ」について考えさせてくれる内容だけど、実際使う上では全く役に立たないね。

おねーさん

ふふふ。そこがいいんじゃないの。あと、レイヤの独立がわかる例としてもいいでしょ。

ほげたん

まぁ、確かにそうかも。

おねーさん

色々考えるネタとなって面白いでしょ。んじゃまた次回っと。
おね〜さんと、

ほげたん

ほげたんのっ!!

おねーさん

3分間ネットワーク、

ほげたん

サプリメントでした〜〜〜っ!!

ほげたんほげたんの今日のポイント
  • レイヤは独立している。
  • ブロードキャストドメインを分割したうえでネットワークをつなぐためにはルータが必要。

3 Minutes NetWorking Supplement No.25

管理人:aji-ssz@selene.is.dream.jp