宛名だけの宅配便
通販で頼んだ荷物は、倉庫から宛名だけを貼って出発します。最初から最後まで道を知っている運転手はいません。
それぞれの営業所が知っているのは、「次にどのトラックに載せるか」だけです。それを繰り返すうちに、荷物は家に届きます。
インターネットのパケットも同じです。ルーターが決めるのは、次の一歩だけです。
このレッスンのゴール
メモ
ルーターをまたいでパケットがたどる道を追える。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| ルーター | ネットワークとネットワークの間でパケットを渡す機器 | |
| 経路表(ルーティングテーブル) | ネットワークごとに、どこへ送るかを書いた表 | |
| ネクストホップ | パケットを次に渡す相手のルーター | |
| デフォルトルート | ほかのどの行にも合わないときに使う行 | default via 10.0.1.1 |
| 直接接続 | ルーターが自分のケーブルでつながっているネットワーク | |
| ホップ | 一台から次の一台へ進む一歩 |
学生が入力するセルは、このプレビューでは空白です。
経路表はネットワークの一覧
アドレスを持つ機器は、どれも経路表を持っています。一行ごとにネットワークが一つ書かれ、そこ宛てのパケットをどこへ送るかが決まっています。
ホストの表は短く、自分のネットワークと デフォルトルート だけです。デフォルトルートは「それ以外は全部ルーターへ」という意味です。
ルーターの表はもっと長く、ケーブルでつながったネットワークをすべて知っています。
h1の経路表を読む
sudo ip netns exec h1 ip routeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
r1の経路表を読む
sudo ip netns exec r1 ip routeここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
二つの表が言っていること
h1 の表は二行です。default via 10.0.1.1 は、すべてを r1 に送るという行です。10.0.1.0/24 dev to-r1 は h1 自身のネットワークです。
r1 の表も二行で、10.0.1.0/24 と 10.0.12.0/24 です。どちらも直接接続です。r1 には、h2 のネットワーク 10.0.3.0/24 の行も、デフォルトルートもありません。
いちばん細かい行が勝つ
一つのパケットが、二つ以上の行に合うことがあります。たとえばデフォルトルートは、どんな宛先にも合います。
ルーターは、スラッシュの後ろの数がいちばん大きい行を選びます。それがいちばん細かく絞り込んだ行だからです。これを最長一致と言います。
どの行にも合わず、デフォルトルートも無ければ、ルーターはパケットを捨てます。そして「そのネットワークには届かない」と送り主に伝えます。
例:会社のルーターの選び方
| 宛先 | 合う行 | 選ばれる行 | ネクストホップ |
|---|---|---|---|
| 172.20.5.9 | 172.20.0.0/16、172.20.5.0/24、default | 172.20.5.0/24 | 172.20.0.2 |
| 172.20.8.9 | 172.20.0.0/16、default | 172.20.0.0/16 | 172.20.0.1 |
| 8.8.8.8 | default | default | 192.0.2.1 |
学生が入力するセルは、このプレビューでは空白です。
h1からh2へping
sudo ip netns exec h1 ping -c 2 -W 1 10.0.3.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
パケットのホップをたどる
sudo ip netns exec h1 traceroute -n -m 4 -w 1 10.0.3.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
r1にどこへ送るか聞く
sudo ip netns exec r1 ip route get 10.0.3.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
パケットが止まった場所
ping は From 10.0.1.1 ... Destination Net Unreachable を二回出します。このメッセージを送ったのは h2 ではなく r1 です。
traceroute に出るホップは 10.0.1.1 の一つだけで、!N という印が付きます。「ネットワークに届かない」という意味です。
r1 は RTNETLINK answers: Network is unreachable と答えます。表に 10.0.3.0/24 の行が無いからです。これを直すのがラボです。
よくある間違い
注意
ルーターは相手までの道を全部知っている、と思いがちです。知っているのは次の一歩だけです。途中のルーターがみな遠くのネットワークの行を持ち、さらに相手の側にも返事のための帰り道が要ります。
さらに挑戦:返事の帰り道
ラボが動いたら、もう一度 sudo ip netns exec r2 ip route を実行しましょう。
r2 が h1 へ返事を送れるのは、どの行のおかげですか。その行を課題の形に書き直して表に足し、自分の next_hop で確かめましょう。