
武蔵野個別指導塾の特徴
高校情報I ネットワーク部とホスト部—マスクとの対応から同じ範囲に属する宛先を判定する|武蔵野個別指導塾

/26のマスクと宛先をANDで照合し、区切りを変えたときに判定が変わる理由まで考えます。
よくあるのは、高校生が2つの宛先の先頭の十進数を見て、同じネットワークだと決める場面です。判定には、どこまでを共通部分として比べるかという条件が必要です。指定された長さまでのビットが一致するか、同じマスクとのANDの結果が一致するかを調べます。
出方には、2つの宛先が同じ範囲にあるかを判定する型、アドレスとマスクから範囲の先頭を求める型、区切りを変えたときに判定が変わる理由を説明する型があります。十進数の見た目だけで判断せず、境界に当たる組を2進数に直して確かめましょう。
境界を決めてから比べる
IPv4アドレスは32ビットで表します。ふつうは8ビットずつ4組に分け、それぞれを十進数で書きます。各組は0から255までです。点は読みやすくする区切りであり、ネットワーク部とホスト部の境界が必ず点の位置にあるという意味ではありません。
プレフィックス長は、先頭からネットワーク部として扱うビット数です。例えば /26 と指定されたら、先頭26ビットを比べ、残り6ビットをホスト部とみなします。/26では最初の3組の24ビットに加えて、最後の組の左から2ビットがネットワーク部です。図1のように、最後の組の途中で境界が分かれます。

図1のマスクは、ネットワーク部に対応する26ビットが1、残り6ビットが0です。アドレスとマスクを同じ位置どうしでANDすると、両方が1の位置だけ1になり、ほかは0になります。したがって、マスクが1の位置では元のビットが残り、0の位置では元の値に関係なく0になります。
ANDの結果は、この指定の下でのネットワークアドレスです。2つのアドレスに同じマスクを適用し、結果が一致すれば、その指定の範囲に属します。これは先頭26ビットが一致するという見方と同じ判定です。異なるプレフィックス長で得た結果を、条件をそろえずに比較してはいけません。
例に使うアドレスは説明用の範囲から選んだ学習用の値です。実際の通信先を示すものではありません。ここで求めるのは指定されたビット列の範囲であり、実機の設定や、その範囲で使える端末の台数ではありません。
最後の組は左から128、64、32、16、8、4、2、1の重みを持ちます。例えば十進数の70は64と4と2の和なので、8ビットでは01000110です。上位2ビットを取り出したいときは、残り6ビットを消すマスク11000000を使います。これを十進数に戻すと192です。
境界を含む組を8桁にそろえることが、計算の出発点です。先頭の0を落とすと、左から何ビット目かを取り違えます。また、ネットワーク部はアドレスの一部、マスクはその部分を選ぶための別の32ビットです。同じ値や同じ役割として扱わないでください。
基本例題:/26で2つの宛先を照合する
学習用の宛先Aを192.0.2.70、宛先Bを192.0.2.95とします。両方に /26 を指定します。同じ範囲かを、各ネットワークアドレスを十進数の4組で求めて答えてください。
まず、マスクの先頭26ビットを1にします。最初の3組はそれぞれ11111111で、最後の組は11000000です。よってマスクは255.255.255.192です。
次に、点の前の3組はAもBも192.0.2で一致し、マスクがすべて1なのでANDの後も変わりません。最後の組について、変換とANDを1行ずつ並べます。
| 対象 | 最後の組の2進数 |
|---|---|
| Aの70 | 01000110 |
| Bの95 | 01011111 |
| マスクの192 | 11000000 |
| AとマスクのAND | 01000000 |
| BとマスクのAND | 01000000 |
01000000は十進数で64です。したがってAのネットワークアドレスは192.0.2.64、Bも192.0.2.64です。結果が一致するので同じ /26 の範囲です。図2のように、最後の組の左2ビットがどちらも01であることからも同じ結論になります。

図2で残り6ビットは異なりますが、それはこの条件での判定を変えません。Aの下位6ビットは000110、Bは011111です。共通の01の後ろにそれぞれを戻すと01000110と01011111になり、元の70と95を復元できます。共通部分だけを記録して元のアドレスそのものが同一になったわけではありません。
この範囲で最後の6ビットを000000から111111まで変えると、最後の組は64から127までです。70と95はいずれもこの範囲内にあります。端の数も含むビット列の範囲として照合しており、端末に割り当てられる数を求めたのではありません。
標準例題:境目をまたぐ2つの値
宛先Cを198.51.100.126、宛先Dを198.51.100.130とします。共通の条件を /26 とし、それぞれのネットワークアドレスを十進数の4組で求め、同じ範囲か答えてください。
先頭3組は一致し、マスクの先頭3組は255です。最後の組を8ビットにすると、126は01111110、130は10000010です。マスクの最後の組は11000000です。
Cでは01111110と11000000のANDが01000000となり、十進数では64です。Dでは10000010と11000000のANDが10000000となり、十進数では128です。よってCは198.51.100.64、Dは198.51.100.128に対応し、同じ範囲ではありません。
前方一致でも確かめます。Cの最後の組の先頭2ビットは01、Dは10です。25ビット目からすでに違うので、26ビットまで一致することはありません。先頭の192や198といった十進数の組が同じであることは、必要な前方一致の一部しか示しません。
最後の組の範囲へ戻すと、Cは64から127、Dは128から191に入ります。126と130の差は4ですが、指定された境界の両側です。数が近いことと同じ範囲に属することは別の条件です。反対に、同じ範囲内では数の差がもっと大きくても判定は変わりません。
発展例題:区切りを変えて判定する
宛先Eを203.0.113.40、宛先Fを203.0.113.100とします。まず両方に /25、次に両方に /26 を指定します。それぞれの条件についてネットワークアドレスを4組で求め、同じ範囲か答えてください。
最後の組を2進数に直すと、40は00101000、100は01100100です。最初の3組は同じ203.0.113で、どちらの条件でもその24ビットは残ります。違いは最後の組から何ビットを残すかです。
/25では最後の組の先頭1ビットを残します。マスクの最後の組は10000000、十進数では128です。40とのANDは00000000、100とのANDも00000000です。両方のネットワークアドレスは203.0.113.0で、同じ範囲です。
/26では最後の組の先頭2ビットを残します。マスクは11000000です。40とのANDは00000000、100とのANDは01000000です。ネットワークアドレスはそれぞれ203.0.113.0と203.0.113.64となり、異なる範囲です。
元の条件へ戻すと、/25の最後の組の範囲はどちらも0から127です。/26では40が0から63、100が64から127に入ります。/25で共通だった先頭1ビットに、/26ではもう1ビットを加えて比べるため、違いが現れました。区切りを長くすれば、共通部分として検査する位置も増えます。
ただし、/25の結果と /26の結果を混ぜて、値が同じだから同じ範囲と結論することはできません。例えば先頭の値が同じでも、範囲の終わりが異なります。判定結果にはプレフィックス長を添えて、どの範囲を指すかを明確にします。
誤答を境界まで戻して直す
宛先Gを192.0.2.63、宛先Hを192.0.2.64とし、両方を /26 で判定します。「先頭3組が同じなので同じ範囲」という答えは誤りです。/26の比較には、その3組の24ビットの後にさらに2ビット必要だからです。
図3のように、最後の組を比べます。63は00111111、64は01000000です。先頭2ビットはそれぞれ00と01で一致しません。マスク11000000とのANDは00000000と01000000なので、ネットワークアドレスは192.0.2.0と192.0.2.64です。異なる範囲と修正します。

図3の2つの値は隣り合っていますが、/26では63が0から63、64が64から127に入ります。図の境界は大小の差ではなく、指定の長さまでの一致を示しています。先頭3組だけで判断できるのは、比較条件がその位置までの場合に限ります。
もう1つの誤りは、ANDを足し算と同じように扱うことです。1と1は1、1と0、0と1、0と0はそれぞれ0です。桁上がりはありません。マスクの0の位置が残っていたら、対応する桁を縦に並べてやり直します。
練習:条件と答えの形をそろえる
次のアドレスは学習用です。各問のネットワークアドレスは十進数の4組で書き、同じ範囲かどうかも指定された条件で答えてください。範囲の端はビット列として含めます。
- 192.0.2.18と192.0.2.50に /26 を指定します。それぞれのネットワークアドレスと判定を求めてください。
- 198.51.100.65と198.51.100.200に /25 を指定します。それぞれのネットワークアドレスと判定を求めてください。
- 203.0.113.146に /27 を指定します。マスクとネットワークアドレスを4組で求め、最後の組の範囲を両端を含めて答えてください。
- 192.0.2.80と192.0.2.112を比較します。両方に /26 を指定した場合と /27 を指定した場合について、それぞれ同じ範囲か答え、ネットワークアドレスを示してください。
- 198.51.100.31と198.51.100.32に /27 を指定したとき、「最後の組が近いので同じ範囲」という説明を検証します。それぞれのネットワークアドレスを示し、説明を訂正してください。
練習の答えと確かめ方
-
18は00010010、50は00110010です。/26のマスクの最後の組11000000とのANDはいずれも00000000です。両方のネットワークアドレスは192.0.2.0で、同じ範囲です。最後の組の範囲は0から63であり、18と50はともに入ります。
-
65は01000001、200は11001000です。/25のマスクの最後の組10000000とのANDはそれぞれ00000000、10000000です。ネットワークアドレスは198.51.100.0と198.51.100.128で、異なる範囲です。65は0から127、200は128から255に入り、元の値に戻しても判定が一致します。
-
/27のマスクは先頭27ビットが1なので、最後の組は11100000、十進数で224です。マスクは255.255.255.224です。146は10010010であり、ANDは10000000、十進数では128です。ネットワークアドレスは203.0.113.128、最後の組の範囲は128から159です。146はこの範囲に入り、下位5ビット10010を先頭3ビット100に戻すと元の値になります。
-
80は01010000、112は01110000です。/26なら先頭2ビットがともに01で、両方のネットワークアドレスは192.0.2.64です。同じ範囲で、最後の組は64から127です。/27なら先頭3ビットは010と011なので、ネットワークアドレスは192.0.2.64と192.0.2.96です。前者は64から95、後者は96から127に入り、異なる範囲です。
-
31は00011111、32は00100000です。/27のマスク11100000とのANDは00000000と00100000です。ネットワークアドレスは198.51.100.0と198.51.100.32で、異なる範囲です。最後の組はそれぞれ0から31、32から63に入ります。差が1であっても境界をまたぐので、近さだけでは判定できないと訂正します。
覚えておくこと
- プレフィックス長は先頭から比較するビット数です。
- マスクの1はネットワーク部、0は残りに対応します。
- 同じマスクとのANDが一致すれば、指定された同じ範囲です。
- 点の位置や十進数の近さだけでは境界を判定できません。
- 答えを元のアドレスと範囲に戻して確かめます。
先頭3組で止まる人は、最後の組を8桁に書き、/の数から24を引いて残す桁数を印で示してみましょう。ANDの結果が合わない人は、マスクとアドレスの各桁を縦にそろえ、1と1の場所だけを探します。個別指導では、区切りを1ビット動かしたときに判定が変わる位置を一緒に確認します。境界を言葉とビット列の両方で示せれば、宛先の比較を根拠まで説明できます。
読んで終わりにするか、ここから変えるか。
武蔵境駅徒歩30秒、講師1人に生徒1人の完全1対1。授業のあいだ、先生は隣を離れません。いまの詰まりを、無料相談でそのまま話してください。
まず15分だけ電話で話したい方は、無料電話相談(15分)から。塾からお電話を差し上げます。
本気になった日が、入塾の日。
お子様の教育、迷ったら「丸投げ」してください。必ず、期待以上の結果で返します。武蔵野で育む、武蔵境で学ぶ。
電話は年中無休。365日、24時間、お電話可能。




