独り言

プログラミングの講師をしています。新人研修で扱う技術の解説と個人の技術メモ、技術書の紹介など

【情報処理】ネットワークの基本

ここではネットワークの基本について学んでいきます。

ネットワークとは

ネットワークとはそもそもどういう意味でしょうか。
ネットとは直訳すると網という意味があります。
網目状のように、何かと何かが繋がり合っている、あるいは関連し合っている状態がネットワークです。
そう考えると、世の中にはネットワークはいくつもあります。

例えば、駅と駅が繋がっている路線図もネットワークです。
飛行機の便を繋がりとする空港同士もネットワーク。
TwitterFaceBookなどのようなSNSのフォロワーの繋がりもネットワークです。

このように繋がりを表すものは世の中にたくさんあるのですが、ここでは特にコンピュータネットワークについて学んでいきます。
コンピュータネットワークとは、その名通り、コンピュータ同士のネットワーク(繋がり)を表したものです。

コンピュータ同士でネットワークがあることで何が良いのでしょうか。
例えば、インターネットに接続して何かを検索する作業はネットワークに繋がっていなければいけません。
また、メールを送信したり、プリンターを使って資料を印刷する場合も、ネットワークが必要です。
スマホでオンラインゲームをする場合、LINEでやり取りする場合、Twitterを見る場合など、これら全てにネットワークが必要です。
つまり、現代の暮らしにおいて、コンピュータネットワークは不可欠なとなっています。

LANとWAN

コンピュータネットワークは大きく2種類に分けることができるので、まずはその2つについて解説していきます。

LAN

LANとは、Local Area Networkの略です。
Localは、局所的なという意味があります。
同じ建物内、例えば、会社内、学校内、家庭内などのネットワークが一般的にはLANにあたります。
LANケーブルや無線LANを使って同じ建物内でのネットワークをつなぎます。

WAN

WANとは、Wide Area Networkの略です。
簡単に言うと異なる拠点間のLANを接続したネットワークのことです。
WANは、通信事業者(ISP、プロバイダーなどとも呼ばれる)によって接続されるネットワークになります。

インターネットというのは、世界中のネットワークを相互に接続した巨大なWANのことです。
厳密にはLANとWAN意外にもいくつかのネットワークが存在しますが、言葉としてよく出てくるのがLANとWANなので、知っておきましょう。

IPアドレス

ここからはIPアドレスについて解説します。
IPアドレスはInternetProtocolアドレスの略で、ネットワーク上の住所を表す数値となります。
誰かに対して手紙や荷物を届けたい時、その人の家の住所を指定しなければ正しく届きませんね。
そして住所は、場所が異なれば必ず異なる住所になり、重複することなく必ず一意に定まります。
それと同じように、コンピュータ同士でのやりとりも、やり取りしたい相手のコンピュータが特定できなければ通信ができません。 この、コンピュータを一意に特定するための住所がIPアドレスです。
住所とは言っても、コンピュータの場合、全ての情報は数値としてしか表現できません。
そのため、IPアドレスもただの数値です。

IPv4IPv6

IPアドレスには、実は2つのバージョンがあります。
それがIPv4IPv6です。
それぞれバージョン4とバージョン6。
当然かと思うかもしれませんが、バージョン6の方が新しいです。
とはいえ、IPv6も仕組み自体は20年以上前に考えられたもので、特別新しい仕組みというわけでもありません。

ですが、これを書いている2020年現在はまだIPv4の方が一般的です。

ではIPv4IPv6ではいったい何が違うのでしょうか。
ざっくりと言ってしまうと、扱える数値の数が異なります。
先ほどIPアドレスの説明で、IPアドレスとはコンピュータに割り振った数値であると話しました。
ただ、この数値というは、好き勝手割り振れるわけではありません。
割り振ることのできる数が決まっており、好き勝手割り振られないように管理団体によって管理されています。

IPv4の場合、数値は32ビットで表します。
32ビットで表すとはつまり、0と1の組み合わせ32個で表現できるという事です。
これで表現できる数はどれだけあるかというと、2の32乗です。
これは計算すると約43億になります。

では、この43億という数値は、インターネットに接続されるコンピュータの数としては多いでしょうか、それとも少ないでしょうか。
43億という数値だけを見ると、漠然と大きな数値のようにも感じますが、インターネットに接続される数としては少ないことが分かります。
なぜなら、世界の人口は2019年時点で77億とのこと。
仮に1人1台がスマホを持ってインターネットに接続したとするなら、それだけで足りなくなります。
また、ネットに接続するのはスマホだけではありません。
家で使用するPC、学校で使用するPC、会社で使用するPCもあります。
また、現在はテレビなどの家電製品もインターネットに接続されていますし、IoT技術によりあらゆるものがインターネットに接続される時代です。
そう考えると43億というのは多そうで実は少ないことが分かります。

インターネットは、APRANETと呼ばれる、アメリカのいくつかの大学と研究機関によるプロジェクトで作成されたネットワークが起源になっています。
その時代はコンピュータはまだ値段も高く、一般家庭に普及するようなものではなかったので、きっとIPv4の状態でも問題はなかったのでしょう。
しかし、時代が進むにつれて、コンピュータの値段が安くなり、一般家庭に普及したこともあり、IPv4ではいずれIPアドレスが足りなくなると予想されていました。
これをIPアドレス枯渇問題と言います。
この問題を解決するために作られたのがIPv6です。
IPv6は、128ビットの数値で表現します。
128ビットで表現できる数は、億や兆どころではなく、想像を絶する膨大な数です。
実質無限に割り振れると考えても良いくらいの数です。

ただ、IPv6が登場したことでIPアドレス枯渇問題が解決したわけではありませんでした。
今までIPv4で動いているものをIPv6に移行する作業は、それなりに大変な作業だったようです。
現行IPv4で動いているものをわざわざIPv6にコストをかけて移行したくはありませんね。
ということで、IPv4のアドレスをどうにか有効活用しようと、様々な技術が登場しました。
ここではその一部を紹介します。

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

IPv4の中では、IPアドレスを2つに分けることができます。
それがグローバルIPアドレスと、プライベートIPアドレスです。

簡単に説明すると、プライベートIPアドレスはLAN内で有効なIPアドレスで、グローバルIPアドレスはインターネット上で有効なIPアドレスとなります。

同じ建物内(LAN内)のコンピュータ同士は、プライベートIPアドレスは重複してはダメで、一意になる必要があります。
逆に言うと建物が異なってしまえば、プライベートIPアドレスが同じコンピュータは存在しても問題ありません。
一方、インターネットに接続する際には、一のグローバルIPアドレスを使用する必要があります。

ではそれぞれどのような値になっているのかを確認してみましょう。
グローバルIPアドレスの値は、下記のコマンドで確認することができます。
http://www.cman.jp/network/support/go_access.cgi

プライベートIPアドレスは、Windowsの場合はコマンドプロントからコマンドを実行することで確認ができます。
コマンドプロンプトを起動し、ipconfig と入力します。

出力結果で「IPv4 アドレス」と書かれた部分がIPv4IPアドレスです。
どちらも数値が.(ピリオド)区切りで4つ並んでいるはずです。
これは、32ビットを8ビット毎に.で区切って10進数で表示しています。
環境によって数値は異なるかと思いますが、0~255の数値が4つ並ぶ形になります。

仮に同じ環境に2台以上のPCがあるとするなら、それぞれのPCでグローバルIPアドレスとプライベートIPアドレスを確認してみましょう。
おそらく、グローバルIPアドレスは同じ値となり、プライベートIPアドレスは異なる値になっているはずです。
プライベートアドレスは同じネットワーク内で重複してはいけないので、異なる値になっているのは自然な状態ですね。
ではなぜグローバルIPアドレスは同じなのでしょうか。
これこそIPアドレスを有効活用するための技術の一つで、NAT(厳密にはNAPT)と呼ばれるルータの機能です。
NATは、プライベートIPアドレスグローバルIPアドレスの変換を行ってくれます。
そしてポート番号という仕組みを使うことで、複数のノード(PCやスマホなど、ネットワークに接続する端末)で1つのグローバルIPアドレスでインターネットに接続できるようにしているのです。

このような技術を使うことで、IPv4のアドレスを有効活用しているのです。
他にもIPアドレスを効率よく使用する技術があります。
このあたりは興味がある人は自分で調べながら勉強してみてください。

プロトコル

続いてはネットワークプロトコルについての解説です。
先に説明したように、IPアドレスがあればコンピュータを一意に特定できるようになるわけですが、それだけでコンピュータネットワークが成り立つわけではありません。

ここで人間同士のコミュニケーションを考えてみます。
日本語しか話せない日本人と、英語しか話せないアメリカ人が、それぞれ自分の国の言葉でコミュニケーションを取ろうとしたらどうなるでしょうか。
お互い伝えたいことが伝わらず、うまくコミュニケーションを取れないことが想像できますね。
ただし人間の場合、言葉が通じなくても、相手の表情やしぐさから何を伝えたいか読み取ったり、ジェスチャーを使うなど、様々な手段でコミュニケーションが取れるので、実際には何とかなるかもしれません。

しかし、コンピュータというのは予め決められたルールにのっとって動くことしかできません。
空気を読んで相手が何をしたいのかを察知してくれたりはしません。
そのため、コンピュータ同士がコミュニケーション(通信)を行うには、コンピュータ用のルールが必要になります。
そのルール、約束ごとのことをネットワークプロトコルと呼びます。

通信のルールだと言われてもピンとこないかもしれませんね。
つまりどういうことなのか。
現在コンピュータのOSには様々なOSがあります。
WindowsMacAndroidiOSLinuxなどがあります。
それぞれのOSが、他のOSとの通信のことを考えずに、独自の通信方法でOSを作ってしまったらどうなるでしょう。
おそらく通信することはできません。
また、コンピュータのハードを製造しているメーカーも数多くありますね。
Apple富士通NECSonyなど。
これらのメーカーが、他のメーカーとの通信のことを考えずに独自の通信方法でハードを作成してしまったらどうなるでしょう。
これまた通信はうまくいかないでしょう。

皆さんがメールでコミュニケーションを取るとき、G-mailを使う人もいれば、Outlookを使う人もいます。
他にも様々なメールソフト(メーラー)が存在しますが、相手がどのメーラーを使用しているかを考えながらメールを作成している人はいないでしょう。
つまり、どんなメーラーを使用してもメールのやり取りをすることができるのですが、メーラーを作成する人が、独自にメールの通信方法でソフトを作成してしまったらどうなるでしょう。
他のメーラーを使用している人とはメールのやり取りができなくなることでしょう。

何が言いたいかというと、コンピュータのハードウェアやソフトウェアを作成する人たちが、自分たちのルールで勝手に作成してしまった場合、異なるハードウェアやソフトウェアを使ったときに通信ができなくなってしまうという事です。
そうならないように、つまりどんなハードウェアでどんなOSでどんなアプリケーションを使っていても、コンピュータ同士が通信をできるようにしようと定められたルールがネットワークプロトコルです。

TCP/IPOSI参照モデル

ネットワークプロトコルですが、実は2つのモデルがあります。
TCP/IPOSI参照モデルです。

ただ、実際のところ使われているのはTCP/IPです。
TCP/IPはインターネットの起源となったARPANETで採用されたネットワークプロトコルです。
OSI参照モデルはISO(国際標準化機構)という団体が定めた規格ですが、実際に実装されて運用されていたTCP/IPの方がデファクトスタンダード(事実上の標準)として使用されています。

TCP/IPについては細かく解説はしないので、興味があれば書籍や他のサイトで学習してみてください。