サブネットマスクに関する備忘録

今のご時世アウトプットしてナンボ...という新(?)常識にならい、

練習を兼ねて私も記事を投稿します。

 

結論から言うと、大変長い文章になってしまいました。

まとめる難しさを痛感しています。

その分、私みたいな初心者向けになっているので、

もういいやってなるまでは読んでみてくれると嬉しいです。

 

記念となる第一弾は、基本情報処理技術者試験対策にこないだ個人的に調べた内容を、

備忘録的に残してみます。
ご覧いただいた方のご参考になれば幸いです。

テーマは「サブネットマスク」です!

・ある過去問(令和元年秋期の午後の問題)を解くことを目的にしたものです。
・私のような初学者の方を対象にしています(達人のご閲覧も歓迎)

■テーマとする問題
https://www.fe-siken.com/kakomon/01_aki/pm01.html
問題見るのめんどい、ちょっと興味あるだけって方は、

URLクリックしなくて大丈夫です。
ざっくり全体的に話すので。
ちなみに上記URLには問題だけでなく解答も解説もあるのですが、
私は一目見ただけではわからなかった(というより色々知らなすぎた)ので調べました。

 

内容は以下の通り。

1.そもそも何の話?
2.数字の羅列の見方
 2-1 IPアドレスの表し方
 2-2 ネットワークアドレス部とホストアドレス部
 2-3 サブネットマスク
 2-4 IPアドレスプレフィックス
3.問題を解く
 3-1 問われていること
 3-2 具体的な回答

 

1.そもそも何の話?


広いくくりで言えば、ネットワークの話です。
そして、テーマである「サブネットマスク」というのは、

IPアドレス」に関するものです。
IPアドレスというのは、ネットワークにおける住所で、
コンピュータの一つ一つに割り当てられています。
この割り当ては、「ルータ」がうまいことやってくれています。
ルータはwifiでネットをご利用の方であればおそらく家のどこかにあるでしょう。
インターネットでデータのやりとりができるのは、

コンピュータの住所が存在するおかげです。

 

さて、IPアドレスは具体的な例としては、
192.168.1.1
とか
192.168.1.3
とか、そういう数字になっています。

 

ちなみに、ご自身のコンピュータのIPアドレスを確認できます。
windowsでは、コマンドプロンプトを立ち上げて「ipconfig」と入力後Enterキー、
macでは左上のリンゴマークから「システム環境設定」→「ネットワーク」から、
それぞれ確認が可能です。

 

2.数字の羅列の見方


2-1.IPアドレスの表し方


192.168.1.3というIPアドレスを例にとります。
IPアドレスは、実は32桁の「2進数」からできています。
2進数の詳細な説明は省きますが、簡単に言うと0と1のみで数を数えることです。
32桁の2進数を、8桁ごとに区切って表したものが、IPアドレスです。
(※ここで達人級の方は、「ならIPv4が前提って言えよ」

とおっしゃるかもしれませんが、まあ、その通りです。)

具体的には、
192 = 11000000(←2進数)
168 = 10101000(←2進数)
1 = 00000001(←2進数)
3 = 00000011(←2進数)
なので、
192.168.1.3 というIPアドレスは、
11000000 10101000 00000001 00000011(←8桁ごとに区切った2進数)
と同じです。


0と1だけで表されている桁の一つを、「ビット」と呼びます。
つまり、32"桁"の2進数は、32"ビット"の2進数ということです。

 

2-2.ネットワークアドレス部とホストアドレス部


この32ビットの2進数は、

さらに「ネットワークアドレス部」と「ホストアドレス部」に分けられています。
こんな感じです。

 

11000000 10101000 00000001   |   00000011 (←192.168.1.3 というIPアドレス)
ネットワークアドレス部                  ホストアドレス部

 

この例では、下8ビットのところで区切りましたが、
どこで区切るかというのは、実際には「クラス」というもので決められています。
クラスA, クラスB, クラスCなどといいます。
上記の区切り方は、クラスCです。
(一応申し上げると、プログラミングのクラスとは無関係です)

 

さて、ネットワークアドレス部とは、
インターネットから「LAN」の住所を探すときに使うもの。
ホストアドレス部とは、
「LAN」内で個々のコンピュータの住所を探すときに使うもの。
といったイメージで良いと思います。
LANとは、Local Area Networkの略で、
ご家庭内や会社内だけでのネットワークのことです。

 

例えば、何かのデータが送られてくるときは、
まずネットワークアドレス部でLANを特定し、
さらにホストアドレス部で個々のコンピュータを特定する、
という感じです。

 

2-3.サブネットマスク


先ほどの

11000000 10101000 00000001 | 00000011 (←192.168.1.3 というIPアドレス)
ネットワークアドレス部            ホストアドレス部

の場合、ホストアドレス部は(クラスCを前提とすると)8ビットあります。
8ビットの2進数は0~255まで表現できますので、

そのまま考えればLAN内256台分のコンピュータの住所を表現できそうですが、

ホストアドレス部がすべて0もしくはすべて1というのは特別な意味を持つので、
実際にはLAN内における254台分のコンピュータの住所を表せます。

 

ここで、ある会社が254台分を部署ごとに分けて管理したいと考えたとします。
っていうか、事実そういう必要が世間的にあるのでしょう。
この254台をさらに分割する方法が存在します。
それが、「サブネットマスク」です!(やっと出てきた)

 

サブネットマスクも、32ビットの2進数です。
具体的には、こんな感じです。
11111111 11111111 11111111 11110000

サブネットマスクは、
必ず左側に1が続くようにして寄り、右側に0が続くように寄ります。
つまり、
11111111 11111111 11111111 11000000
とか、
11111111 11111111 11111111 00000000
といった感じですね。

 

このサブネットマスクを、IPアドレスと重ねて、
ホストアドレス部でサブネットマスクの1が重複したところを、
「サブネット」として分けられます。

 

具体的に、例として
192.168.1.3に
11111111 11111111 11111111 11110000というサブネットマスクを用いてみましょう。

 

ネットワークアドレス部            ホストアドレス部

11000000 10101000 00000001 | 00000011 ←IPアドレス(192.168.1.3)
11111111   11111111   11111111     11110000 ←サブネットマスク

 

なので、
ホストアドレス部かつサブネットマスクが1のところ、つまり
11000000 10101000 00000001 | 00000011 ←IPアドレス(192.168.1.3)
             ここがサブネット(=部署とか事業所ごとの割り当て)です。
ホストアドレス部は、サブネットマスクにより
11000000 10101000 00000001 | 00000011IPアドレス(192.168.1.3)
                 この部分となります。
この例ですと、サブネットとホストアドレス部はそれぞれ4ビットあります。
4ビットの2進数は0~15の数字を表現できますので、
16の部署と16のコンピュータの住所を表現できるIPアドレスというわけです。

 

今までは192.168.1.3を具体例としてきましたが、
実際にはサブネットとホストアドレス部にはその会社の部署と

コンピュータに応じて好きに値を入れられますから、
上記の例のサブネットマスクなら、

11000000 10101000 00000001 | YYYYXXXX
YYYYに部署ごとのサブネットを、
XXXXに各コンピュータの住所を入れられるわけですね。

192.168.1.3はそのうちの一つだったということです。

 

2-4. IPアドレスプレフィックス


サブネットマスクをいちいち
11111111 11111111 11111111 11110000
とか表現するのは冗長なので、スマートに表す方法があります。
それが「IPアドレスプレフィックス」です。

 

/を用いて、続けて数字を書くと、

サブネットマスクは、左から"数字分のビット数"が1ね。」

という意味になります。
例えば、先ほどの16の部署と16のコンピュータのくだりを例に適用すると、
192.168.1.3/28(←/28の部分がIPアドレスプレフィックス
と書けば、
サブネットマスクは、左から28ビットが1ね。」
という意味になりますから、
11000000 10101000 00000001 | 00000011 ←IPアドレス(192.168.1.3)
11111111  11111111   11111111    11110000 ←サブネットマスク
という表現と同じになります。

 

実際は、IPアドレスを一般的に表現する場合は、

192.168.1.0/24
(11000000 10101000 00000001 00000000)
                                                   赤字がサブネットとホストアドレス部
といったように、サブネット以降の右側は

0とすることが多いようです。

 

3.問題を解く


3-1. 問われていること


問題文ははしょって、
無理やりまとめるとこんな内容です。

「 ある会社で、
部署A 192.168.64.0/24から サーバー 192.168.128.0/20へのアクセスはNGだけど、
部署B 192.168.65.0/24から サーバー 192.168.128.0/20へのアクセスはOKにしたい。

で、ルールとしてその辺をまとめてたら、間違って
192.168.64.0/23(IPアドレスSとします)からサーバー 192.168.128.0/20をOKって

書いちゃった。
これ、何がどうヤバいかわかる?どうすればいいと思う?」

 

3-2 具体的な回答


クラスが明記されていないので、どこまでがネットワークアドレス部かは
わかりませんが、IPアドレスプレフィックスが書いてあるので
少なくとも会社が部署ごとに好きに割り当てられるビットはわかります。
そのビットをZとすると、

部署Aは、192.168.64.0/24、すなわち
11000000 10101000 01000000 ZZZZZZZZ となり、

部署Bは 192.168.65.0/24、すなわち
11000000 10101000 01000001 ZZZZZZZZ となり、

IPアドレスSは、192.168.64.0/23、すなわち
11000000 10101000 0100000Z ZZZZZZZZ となります。

 

IPアドレスSに、例えば
11000000 10101000 01000000 00000000というIPアドレスが入ってきたとしましょう。

これは、部署Aのコンピュータのうちの一つです。
ところがルール上これをOKと書いてしまっているわけですから、
「部署A 192.168.64.0/24から サーバー 192.168.128.0/20へのアクセスはNG」

という意向と矛盾している状態です。

ではどうすればよいかというと、
単に部署BのIPアドレスを正しく書いてあげればよいです。
つまり、
192.168.64.0/23→192.168.65.0/24からサーバー 192.168.128.0/20をOKにする。
です。

 

 
おしまい

 

おわりに

お疲れさまでした。
ここまでお付き合いいただきありがとうございます。

知った風に書きましたが私も勉強中です。
ご意見ご指摘ありましたら是非お願いします。
(言い方は優し目でお願いします笑)

その場合、回答が遅れましたらすみません。

 

 

参考サイト:https://wa3.i-3-i.info/word12216.html

      https://www.fe-siken.com/kakomon/01_aki/pm01.html

参考文献:キタミ式イラストIT塾 基本情報技術者 令和02年 (情報処理技術者試験)