この記事では、動画 「エンジニアが生き残るためのテクノロジーの授業 #3:ネットワークがつながる理由を知る」をまとめています。今回は「ネットワークの構成」「通信相手の識別方法」「データを早く正しく届けるための工夫」「メールとWebのしくみ」についてご紹介。まだ動画を見られていない方、このコラムでネットワークの基本を学習しませんか。
普段インターネットに接続しているときは無意識に使っているネットワークですが、つながらなくなると困ってしまいます。トラブルが起きたときにその発生場所や原因を調べるには、ネットワークで使われるプロトコルなどについての知識が求められます。どのようなネットワークの構成があり、どのような番号でやりとりされているのか、その概要だけでも押さえておきましょう。
ネットワークの構成を知る
私たちがよく見かけるネットワークの構成として、クライアントサーバーという構成と、P2P(Peer to Peer)という構成があります。
クライアントサーバーはWebやメールなどに使われている構成で、私たちが使っているパソコンやスマートフォンなどの端末をクライアント、プロバイダや企業などが用意しているものをサーバーといいます。クライアントはサーバーに接続してデータのやりとりをするため、必ずサーバーが必要です。サーバーへのアクセスが集中すると、応答速度が低下しますし、サーバーがダウンすると使用できなくなります。
一方のP2Pはそれぞれのパソコンが対等に通信する方法で、サーバーが必要ありません。それぞれが持っているデータをやりとりして情報を共有するため、一部の端末が動いていなくても他の端末とやりとりできるメリットがあります。また、特定の端末にアクセスが集中することが少ないこともメリットです。
しかし、P2Pではデータがどこに保存されているのかわからないため、企業などではクライアントサーバーのようにデータの一元管理が可能な方法が選ばれます。
ネットワークを分割する
クライアントサーバーでもP2Pでも、すべてのコンピュータが同じネットワークにつながっていると困ることがあります。例えば、インターネットはオープンな世界で便利な一方で、企業が持っている情報に外部から勝手にアクセスされると困ってしまいます。そこで、ネットワークを分割することを考えてみます。
インターネットと社内のネットワークを分けて管理する方法として、境界にファイアウォールという機器を設置する場合があります。ファイアウォールでは、外部からの通信は拒否し、社内からの通信のみを通す、といった処理が行われます。
このとき、外部からの通信の中には許可したいものもあります。例えば、会社のホームページなどが配置されているWebサーバーであれば、外部からアクセスできる必要があります。また、メールの場合も、外部から届いたメールを受け取る必要があります。
ネットワークを分割するのは社内と社外の間だけではありません。社内でも、部署が異なると閲覧できてはいけないデータがあります。また、ネットワークを分けることで管理が楽になり、マルウェアへの感染などが広がる範囲を狭い範囲に絞れる可能性もあります。
この場合はファイアウォールで分けるのではなく、ルーターなどの機器でネットワークを分割します。
プロトコルの階層構造
ネットワークを分割しても、それぞれのネットワークの境界や内部で他の製品と通信できる必要があります。このとき、それぞれが違うルールで通信をしようとすると正しくやりとりできません。一方が日本語を話して、もう一方が英語を話していては会話が成立しないように、共通の言葉を使う必要があるのです。
このプロトコルは階層構造になっており、よく知られているものとして「OSI参照モデル」と「TCP/IP」があります。「OSI参照モデル」は理論的には優れた階層構造で、7つの層で構成されています。しかし、実用上では4層の「TCP/IP」が使われています。
現在のインターネットも、基本的にはこの「TCP/IP」に沿って考えることが多く、よく使われているプロトコルが右のように対応しています。
このような階層構造は、私たちの身近なところでも使われています。
このように階層構造が分かれていることのメリットは、一部を交換できることです。例えば、郵便配達の場合、封筒に入れた後に郵便を使わずにメール便などを使うこともできます。これはプロトコルでも同じで、トランスポート層でTCPの代わりにUDPを使う場合があります。
通信相手を識別する
ネットワークの構成を紹介したところで、次はどのように通信相手を識別するのかを考えてみましょう。
ネットワークに接続した機器を識別する番号としてIPアドレスがあります。機器を識別するといっても、パソコン単位というよりはネットワークインターフェイスに対して1つ付与されます。例えば、パソコンに無線LANと有線のインターフェイスがあれば、2つのIPアドレスが付与されます。
上の図はIPv4と呼ばれるバージョンのもので、32桁の0と1の2進数で表現されます。32桁なので、32ビットです。ただし、人間がこの0と1の羅列をみてもすぐに認識できないので、一般的にはこれを8ビットずつ区切り、さらに2進数を10進数に変換して、ピリオドでつなげて表現します。
つまり、世界中の端末をIPアドレスだけで識別しようと考えると、アドレスの数が不足するのです。そこで使われているのがNATやNAPTといった技術です。これは、インターネットに接続しているルーターにグローバルIPアドレスを付与し、そのルーターの内部ではその組織内で使えるプライベートIPアドレスというIPアドレスを付与する方法です。
しかし、それでもIPv4アドレスとして使えるものは減っており、2011年頃から、世界中で在庫が枯渇しています。現在は、使われていないIPアドレスをやりくりしている状況です。
そこで、32ビットのIPv4アドレスだけでなく、IPv6アドレスも使われるようになっています。IPv6アドレスは0と1が128個並んだものです。128個だと4倍のように思えるかもしれませんが、1ビット増えると2倍になりますので、膨大な数が用意されています。
これも2進数では人間が把握するのは大変なので、IPv4と同じように区切って表現します。IPv6では16ビットずつ区切って、2進数を16進数に変換し、こちらはコロンでつなげます。
例えば、インターネットに接続する部分では、IPv6で直接接続する「IPoE」と呼ばれる方式が登場しています。自宅の中でLANを作るときと同じように直接インターネットまで接続する方法で、ルーター以外に専用の機器を設置する必要がなくなります。
これらにより、IPv4とIPv6が混在しても、それぞれが通信できるようになっています。また、1つの機器にIPv4とIPv6の両方を扱えるデュアルスタックという方法も使われています。
IPアドレスとドメイン名を対応づける
IPアドレスがわかったところで、私たちは普段あまりIPアドレスを意識していません。例えば、Webブラウザでアクセスするときは、URLを入力します。このようなURLはただの文字の並びですが、コンピュータはIPアドレスで通信するため、URLをIPアドレスに変換する必要があります。
パソコンの中ではIPアドレスが分からないので、そのIPアドレスを調べるために、プロバイダに問い合わせます。例えば、「seminar.masuipeo.com」というアドレスを問い合わせたとしましょう。
ここで、プロバイダが管理しているDNSサーバーは、すべてのIPアドレスを知っているわけではないので、まずルートDNSサーバーというところに「.com」のDNSサーバーのIPアドレスを問い合わせます。
ここで、毎回このようなやりとりをするのではなく、一度問い合わせた内容はキャッシュして一定時間保存しておきます。これにより、よく使われるところは何度も問い合わせる必要がなくなります。
ネットワーク内の場所を識別する
IPアドレスで相手を識別できたとしても、そのIPアドレスが割り当てられた端末がどこにあるかを識別しないといけません。つまり、住所がわかっていても、その住所がどこにあるのかを知らないとそこに辿り着けないわけです。ここで、緯度と経度のような値が必要になります。
ネットワークではMACアドレスと呼ばれ、ネットワークのインターフェイスにメーカーが割り当てた番号のことです。MACアドレスはハイフンやコロンで区切って表現し、その前半を見ればどこのメーカーのものかがわかります。
MACアドレスはメーカーが付与したものなので、基本的には変えられません。このため、セキュリティ面でも使われており、例えばMACアドレスフィルタリングがあります。これは、事前にネットワークに接続できるMACアドレスを登録しておく方法で、登録されていない端末はそのネットワークに接続できません。
企業などでは、勝手に社内のネットワークに接続されると困るため、接続できる端末のMACアドレスを登録しておく方法が使われています。
同じコンピュータ内のサービスを識別する
IPアドレスやMACアドレスで端末やサーバーを識別しても、1台のコンピュータの中では複数のアプリケーションが動いています。例えば、サーバー側では同じコンピュータの中でWebサーバーやメールサーバー、データベースサーバーなどが動いています。私たちの使うパソコンでも、Webブラウザだけでなくメールソフトなどを使っています。
サーバー側では、よく知られているポート番号ということで、ウェルノウンポートという番号があります。Web関係であれば、HTTPの80番や、HTTPSの443番などは覚えておくとよいでしょう。
また、メールの送信であれば、SMTPの25番やSMTP over SSLの465番、サブミッションポートの587番などが使われます。
このように、ネットワークでは相手を識別するためにさまざまな番号やプロトコルが使われ、うまく接続できるようになっています。それぞれの番号やプロトコルの役割について把握しておくと、トラブルが起きた場合にも原因の特定に役立つかもしれません。ぜひ詳しく調べてみてください。
#1「現代のITエンジニアに求められるスキルとは?」
#2「プログラミングに必要なアルゴリズムの考え方とは?」