バイト先のプリンターが動かない
ラーメン屋のレジのパソコンから、厨房のプリンターへ注文票を出しています。今まではちゃんと印刷できていました。
新しいプリンターが届き、店長がアドレスを手で打ち込みました。すると、注文票が一枚も出なくなりました。
二つのアドレスはほとんど同じに見えます。でも数字をよく読むと、別のネットワークにいることが分かります。
このレッスンのゴール
メモ
二つの機器が同じネットワークにいるかどうかを判断できる。
重要な言葉
| ことば | いみ | れい |
|---|---|---|
| IPアドレス | ネットワークの中で機器を指す番号 | 192.168.10.21 |
| オクテット | アドレスを四つに区切った一つ一つの数で、0から255まで | |
| サブネットマスク | アドレスのどこまでがネットワークを表すかを示す数 | 255.255.255.0 |
| ネットワーク部 | 同じネットワークの機器がみな共通に持つ部分 | |
| ホスト部 | ネットワークの中の一台を選ぶ部分 | |
| プライベートアドレス | 内側のネットワーク用に取っておかれ、インターネットでは使われない範囲 |
学生が入力するセルは、このプレビューでは空白です。
アドレスは二つの部分でできている
IPアドレスは、192.168.10.21 のように四つのオクテットでできています。どこで区切るかを決めるのがマスクです。
マスクのオクテットが255のところは、ネットワーク部です。0のところは、一台を選ぶホスト部です。
255.255.255.0 は /24 とも書きます。最初の24ビット、つまり三つのオクテットがネットワークを表すという意味です。
例:マスクで区切る
| アドレス | マスク | ネットワーク部 | ホスト部 |
|---|---|---|---|
| 192.168.10.21 | 255.255.255.0(/24) | 192.168.10 | 21 |
| 10.0.12.2 | 255.255.255.0(/24) | 10.0.12 | 2 |
| 172.20.3.8 | 255.255.0.0(/16) | 172.20 | 3.8 |
学生が入力するセルは、このプレビューでは空白です。
Pythonに/24のマスクを聞く
python3 -c "print(__import__('ipaddress').ip_network('10.0.12.0/24').netmask)"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
h1のネットワークを聞く
python3 -c "print(__import__('ipaddress').ip_interface('10.0.1.2/24').network)"ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
ネットワーク部が同じなら同じネットワーク
二台を比べるときは、同じマスクでそれぞれのネットワーク部を出します。二つが一致すれば、同じネットワークです。
同じネットワークなら、二台は直接やり取りできます。違えば、パケットは必ずルーターを通ります。
コンピューターは、オクテットごとにANDという計算をします。マスクが255ならそのまま残り、0なら0になります。
例:ラーメン屋の二台のプリンター
| 機器 | アドレス | /24 のネットワーク部 | レジと同じか |
|---|---|---|---|
| レジのパソコン | 192.168.10.21 | 192.168.10.0 | 本人 |
| 前のプリンター | 192.168.10.60 | 192.168.10.0 | 同じ |
| 新しいプリンター | 192.168.11.60 | 192.168.11.0 | 違う |
学生が入力するセルは、このプレビューでは空白です。
h1にルーターへの送り方を聞く
sudo ip netns exec h1 ip route get 10.0.1.1ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
h1にr2への送り方を聞く
sudo ip netns exec h1 ip route get 10.0.12.2ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。
h1が決めたこと
一つ目の答えは 10.0.1.1 dev to-r1 で始まり、via がありません。ルーターは h1 と同じネットワークにいるので、h1 は直接送ります。
二つ目の答えは 10.0.12.2 via 10.0.1.1 で始まります。10.0.12 は h1 のネットワーク部ではありません。だから h1 は、パケットを自分のルーター 10.0.1.1 に渡します。
内側用に取っておかれた範囲
プライベートアドレスの範囲は三つあります。家も学校もお店も、同じ範囲を何度も使い回しています。インターネットはこれらを運びません。
それ以外のアドレスはグローバルアドレスになれて、世界で一か所でしか使われません。家のスマホは、たいてい 192.168.x.x のようなプライベートアドレスです。
例:三つのプライベートの範囲
| 範囲 | 始まりの数 | よく見る場所 |
|---|---|---|
| 10.0.0.0/8 | 10 | 大きな会社や学校 |
| 172.16.0.0/12 | 172.16 から 172.31 まで | 中くらいのネットワーク |
| 192.168.0.0/16 | 192.168 | 家や小さなお店 |
学生が入力するセルは、このプレビューでは空白です。
よくある間違い
注意
数字が近いアドレスは同じネットワークだと思いがちです。大事なのはネットワーク部だけです。/24 なら、192.168.10.60 と 192.168.11.60 は三つ目のオクテットが違うので、別のネットワークです。
さらに挑戦:255でも0でもないマスク
マスクには、255.255.255.192(/26)のように、一つのオクテットの途中で区切るものもあります。Python の & は、どんな数でもANDを計算します。
Python で 200 & 192 と 100 & 192 を試しましょう。このマスクで 192.168.10.100 と 192.168.10.200 は同じネットワークですか。自分の same_network で答えを確かめましょう。