プログラミング講座 第11回

第11回の目標:プログラミングを通してIPアドレスに関する理解を深める。

1.IPアドレス

ネットワークを介して他のコンピュータと通信をする際には、各コンピュータを何らかの方法で識別する必要がある。

インターネット上の各コンピュータを識別するIDをIPアドレスという。

IPアドレスにはバージョン4バージョン6があり、それぞれIPv4IPv6と呼ぶ。

2.IPv4

32bitのデータである。

そのままでは人間は読みにくいので、11000000.10101000.01100100.00001010 のように8bitずつの4つに区切って表すことがある。

それでもまだ読みにくいので、2進数を10進数に変換して、192.168.100.10 のように表すことが多い。

10進数にしても分かりにくい人向けに、IPアドレスに対して"www.hogehoge.co.jp"のような文字列を対応させ、そちらを使うこともある。この文字列をドメイン名という。

3.IPv6

32bitのデータで2の32乗個のパターンを表現できる。それはおよそ43億であるが、世界のコンピュータが増えたことで、IPv4が足りなくなってきている。

そこで128bitIPv6が作られた。が、これを書いている2024年の段階ではまだIPv4が主流であるようだ。ここではIPv6について詳しく触れない。

4.MACアドレス

通信処理は複雑であり、通信プロトコルは階層になっている。IPアドレスはOSI階層モデルでいう第3層のネットワーク層で使われる。他にも第2層のデータリンク層で使われるMACアドレスがある。ここではMACアドレスについて詳しく触れない。

5.IPv4 再度

32bitのIPv4を8bitずつの4つに区切った1つ分で、2の8乗通りのパターンを、つまり、0から255を表せる。

例題1 長さが8の配列(配列のどの値も1か0とする)をパラメータとして引き受けて、それを2進数とみなし、10進数に変換したものを返す関数convert10を定義せよ。

結果:

5.サブネットマスク

同じのネットワーク内のコンピュータへデータを送るときと、別のネットワークのコンピュータへデータを送るときでは違う処理がなされる。同じネットワーク内のコンピュータへは比較的容易にデータを送ることができる。

ネットワーク同士をつなぐ中継装置をルータというが、別のネットワークへデータを送る際には、まずルータへデータを送ることになる。ルータは経路の情報を持っていて、ルーター間でデータが送られていって、結果的に対象のネットワークの対象のコンピュータへデータが届けられる。

IPv4にはネットワークのIDを意味する部分と、ネットワーク内のコンピュータのIDを意味する部分がある。

IPv4のどこでネットワークのIDとコンピュータのIDが区切られるかを表すのがサブネットマスクである。

例えば、IPv4が以下であり

11000000.10101000.01100100.00001010

サブネットマスクが以下であるとする

11111111.11111111.11111111.00000000

サブネットマスクが1であるところがネットワークのIDであるから、IPv4の先頭から24bit(つまり11000000.10101000.01100100)がネットワークのIDである。

ネットワークのID以外の部分がコンピュータのIDであるから、IPv4の末尾の8bit(つまり00001010)がコンピュータのIDである。

2進数は人間には辛いので普通は10進数で書くが、上の例は10進数で以下のように表される。

IPアドレス:192.168.100.10

サブネットマスク:255.255.255.0

サブネットマスクは先頭からどこかまで1が並び、その後0が並ぶ。区切りは8bitずつの位置とは限らない。例えば下のようなこともある。

11111111.11111111.11111111.11000000 (10進数で255.255.255.192)

また、

11000000.10101000.01100100.00001010(192.168.100.10)と11000000.10101000.01100100.10000010(192.168.100.130)は

サブネットマスクを

11111111.11111111.11111111.00000000 (255.255.255.0)だと思うと同じネットワークであるが

11111111.11111111.11111111.11000000 (255.255.255.192)だと思うと異なるネットワークにあることがわかる。

例題2 長さが32の配列(配列のどの値も1か0とする)3つをパラメータとして引き受けて、それを2進数とみなし、1つめはコンピュータAのIPv4、2つめはコンピュータBのIPv4、3つめはサブネットマスクとする。コンピュータAとコンピュータBが同じネットワークにあればtrueを、そうでなければfalseを返す関数sameNetworkを定義せよ。

結果:

第10回へ 目次へ 第12回へ