スクリーンショット_2019-08-25_12

どうやってコンピューター間で通信をするの? ~IT系の仕事を全く分からない人がプログラミング出来るまで ~

初めに

前回は、TCP/IPについて解説しました。ちょっと抽象的で難しかったかもしれませんが、ネットワークで通信するには、きちんとしたお作法があるということだけ認識して下さい。

今回は実際にネットワークで通信を行う際に使用されるプロトコル、IPについて解説したいと思います。

IPとは?

IPとは「Internet Protocol」の略で、IPアドレスと呼ばれるコンピューターの住所情報に基づいて、データを送信するプロトコルになります。身近な例ですと、手紙(データ)を特定の住所(IPアドレス)に届ける郵便屋(IP)がイメージがつきやすいと思います。

IPではIPアドレスの理解が非常に大事になります。
続いて、IPアドレスについて説明します。

ネットワーク部・ホスト部

IPアドレスはネットワーク上での位置を示していて、住所に当たります。IPアドレスの知識がないとただの数字の羅列に見えますが、実は意味があります。

192.168.3.11

上記のような数字を見たことある人が多いではないでしょうか?
実は2つに区切ることができるんです。

192.168.3 までがネットワーク部と呼ばれる、今接続しているコンピューターがどれぐらいの規模のネットワークに所属しているかを表しています。

右から1つめに当たる部分はホスト部と呼ばれる、コンピューター自身に振り分けられた番号になります。

IPアドレスを見ると、どの規模のネットワークの何番目にコンピューターの住所が定められているかある程度わかるようになってます。

ネットワーク部とホスト部の分け方には5種類あります。会社規模、ちょっとでかい部屋、自宅、同時送信用、研究用
分け方に関しては、ここで説明するとややこしくなるので割愛しますが、認識だけしておくといいと思います。

サブネットマスクについて

先ほどはIPアドレスはネットワーク部とホスト部に分けれるという話をしました。ただ上の分け方だけですと、無駄なホスト分のIPアドレスが存在する、同じネットワーク上の扱いをされ環境を切り出せないというデメリットがあります。

そこで自分たちでネットワーク部とホスト部を自由に分けたい!として使われる仕組みがサブネットマスクです。

私たちが使用しているIPアドレスはサブネットマスクが必須で適用されていて、実は先ほどのネットワーク部とホスト部切り分けはされていません。

255.255.255.0

上のような数字がサブネットマスクになります。ネットワークの設定をするときに見たことある数字かもしれません。

サブネットマスクを適用すると同じIPアドレスでも、サブネットマスクの組み合わせによって、違うネットワーク部とホスト部を表現することができます。

#ネットワークA                  #ネットワークB
- IPアドレス                       - IPアドレス
192.168.3.11                       192.168.3.11 
- サブネットマスク           - サブネットマスク
255.255.255.0                   255.255.254.0

上はIPアドレスは同一ですが、サブネットマスクが異なるため実は違うネットワークであることを表現しています。

IPアドレスとサブネットマスクを別々で書くのは面倒なので、以下のような書き方が一般的です。

IPアドレス/サブネットマスク(桁数)
192.168.3.11/24

実はIPアドレスとサブネットマスクは2進数(0,1のみで表す表記法)で表現されていて、IPアドレスの数値とサブネットマスクの数値を足し合わせてネットワーク部とホスト部を定義しているのですが、理系の大学の授業になっちゃうのでここでは割愛!

ちょっとごちゃごちゃしてきましたが、IPアドレスとサブネットマスクの組み合わせで住所の表現方法の幅が増えてるんだぐらいの認識で大丈夫です!

グローバルIPアドレスとプライベートIPアドレス

ここまでIPアドレスの表現方法の説明をしてきましたが、こう思った人はいないでしょうか?

IPアドレスはコンピューターの住所って言ってるのに、他とダブりそうじゃね?

そうなんです。本来はコンピューターの住所なので、IPアドレスはダブってはいけないんです。

IPアドレスは実は世界でダブってはいけないグローバルIPアドレスと同じ環境でダブってはいけないプライベートIPアドレスの2種類があります。

例えるなら、マンション(グローバルIPアドレス)とマンション内の部屋番号(プライベートIPアドレス)の関係だと思ってください。〇〇マンションの住所は全世界で1個しか存在してはいけませんが、101号室みたいな表記は他のマンションでもしていますよね?ただ同じマンション内で101号室が2つあるとおかしなことになってしまいます。

なんでこんなことしているの?って疑問に思った方も多いと思います。全部グローバルIPでいいじゃんと。
理由は単純にIPアドレスの数が足りないからです。
IPアドレスの企画を定める際に、IPアドレスの桁数が少なすぎたためです。。(ここまで広がると思っていなかったのかな)

グローバルIPアドレスとは、ルーターに与えられている世界で唯一のIPアドレスになります。プロバイダ(ネットワーク事業者)が管理していてユーザーが変更することはできません。

プライベートIPアドレスとはルーターが割り当てている、同じネットワーク内で割り当てられるIPアドレスになります。同じネットワーク内でダブらなかったらよいので、他のネットワークでも同じIPアドレスが使用されている場合があります。

NATについて

さきほど、グローバルIPアドレスとプライベートIPアドレスの話をしました。

1つ理解して欲しいのが、インターネットから見えているのはグローバルIPアドレスになります。プライペートIPアドレスは同じネットワーク内でしかアクセスできません

つまり、私たちが実際にインターネットでやりとりしているのは、グローバルIPアドレスでのやりとりになります。

では、プライベートIPアドレスでインターネットに接続できているのはなんででしょうか?

プライベートIPアドレスをグローバルIPアドレスとして扱うことができるNAT(Network Address Translation)という仕組みがあります。

NATを用いて、プライベートIPアドレスとグローバルIPを変換、またはその逆の変換をして、グローバルIPアドレスでやりとりできるように見せています。

プライベートアドレスが振り分けられているコンピューターでも、実はNATを通してインターネット上でやりとりができています。

これも、IPアドレスの枯渇問題による工夫になります。

IPアドレスの振り分け方 動的,静的IPアドレス

ここまでIPアドレスの説明をずっとしていましたが、IPアドレスをいちいち設定するのは面倒ではないですか?

そこで、自動でIPアドレスを振り分けてくれるDHCP(Dynamic Host Configuration Protocol)と呼ばれる仕組みがあります。

あらかじめ振り分けるIPアドレスの範囲を決めると、割り当てられていないIPアドレスに自動で振り分けてくれます。
これでIPアドレスを意識せず設定することができるので、楽になります。

DHCPを用いてIPアドレスを設定したIPアドレスを動的IPとよび、自分で固定のIPアドレスを設定するのを静的IPと呼びます。特定のコンピューターにアクセスしたい場合は静的IPを設定するので、どっちも理解しましょう!

IPアドレスはわかりづらい。。 DNSについて

IPアドレスはコンピューターの住所であるということを説明しました。ただ、IPアドレスはパッと見ただの数字です。
僕たちは人間なので数字だけで判断するのは難しいですよね。

そこで、IPアドレスをある名前として扱うDNS (Domain Name System)とよばれる仕組みがあります。

IPアドレスを別のわかりやすい名前に置き換えたものをドメインと呼んでいます。聞いたことがある人も多いと思います。

ドメインの命名規則は明確に決まっているのですが、脱線しちゃうのでここでは割愛!

たとえば、有名なドメインとしては以下が挙げられます。
身近でIPアドレスよりは遥かにわかりやすいですよね。

www.google.com
www.yahoo.co.jp

なにか新しいページを作成したい場合は、登録したいIPアドレスをDNSを管理している業者に登録してもらう必要があります。(年間5000円維持費がかかります。)

(おまけ) 実際にIPアドレスを使ってサーバーにアクセスしよう

長々とIPアドレスについて説明してきました。
そろそろ手を動かしてみましょう!

試しに、googleのドメインから、グローバルIPアドレスを調べてアクセスしましょう。

ターミナルを開いて、グローバルipを調べます。(ターミナルはまた次回!)
nslookupというドメイン名からIPアドレスを調べるコマンドを叩きます。

$ nslookup www.google.com
Server:		192.168.3.1
Address:	192.168.3.1#53

Non-authoritative answer:
Name:	www.google.com
Address: 172.217.161.68

グローバルIPは、172.217.161.68でしたね。
googleのような大きい会社は同じドメインでも登録しているIPアドレスはいっぱいありますので、毎回取得できるIPアドレスは異なると思います。

pingという、疎通確認のコマンドを使ってIPアドレスにアクセスできるか確かめてみます。4つのデータを送信できたことが確認できました。

$ ping 172.217.161.68
PING 172.217.161.68 (172.217.161.68): 56 data bytes
64 bytes from 172.217.161.68: icmp_seq=0 ttl=55 time=46.618 ms
64 bytes from 172.217.161.68: icmp_seq=1 ttl=55 time=117.581 ms
64 bytes from 172.217.161.68: icmp_seq=2 ttl=55 time=41.151 ms
64 bytes from 172.217.161.68: icmp_seq=3 ttl=55 time=62.027 ms
--- 172.217.161.68 ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 41.151/66.844/117.581/30.277 ms

実際にIPアドレスを用いて、データが送信できることが確認できました!

まとめ

今回はボリューミーでしたね。
IPついて説明しました。

下の図が理解できれば完璧です!
ネットワークの基本的な構成は以下になりますので、各々がどういう役割か理解すると、インターネットがどうやって成り立っているか構造が見えるかと思います。(数の規模がちがうだけ)

IPアドレスが理解できれば、どこのサーバーアクセスしている意味が理解できるかと思います!

次回は!

今回で座学終わり!
お疲れ様でした!
インターネットがなんなのか理解してくださったら、幸いです。

次回からは実際にプログラミングする環境準備をしていきましょう!
AWSでインスタンスを立てるをテーマにしたいと思います!

この記事が気に入ったらサポートをしてみませんか?