派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【コラム】ネットワークがつながる理由を知る:エンジニアが生き残るためのテクノロジーの授業 #3

この記事では、動画 「エンジニアが生き残るためのテクノロジーの授業 #3:ネットワークがつながる理由を知る」をまとめています。今回は「ネットワークの構成」「通信相手の識別方法」「データを早く正しく届けるための工夫」「メールとWebのしくみ」についてご紹介。まだ動画を見られていない方、このコラムでネットワークの基本を学習しませんか。

普段インターネットに接続しているときは無意識に使っているネットワークですが、つながらなくなると困ってしまいます。トラブルが起きたときにその発生場所や原因を調べるには、ネットワークで使われるプロトコルなどについての知識が求められます。どのようなネットワークの構成があり、どのような番号でやりとりされているのか、その概要だけでも押さえておきましょう。

【筆者】
増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピューターを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『Pythonではじめるアルゴリズム入門』『IT用語図鑑』『図解まるわかりセキュリティのしくみ』(以上、翔泳社)、『プログラマのためのディープラーニングのしくみがわかる数学入門』『プログラミング言語図鑑』(以上、ソシム)、『基礎からのプログラミングリテラシー』(技術評論社)などがある。

  ネットワークの構成を知る

私たちがよく見かけるネットワークの構成として、クライアントサーバーという構成と、P2P(Peer to Peer)という構成があります。

f:id:itstaffing:20210707122455j:plain

クライアントサーバーはWebやメールなどに使われている構成で、私たちが使っているパソコンやスマートフォンなどの端末をクライアント、プロバイダや企業などが用意しているものをサーバーといいます。クライアントはサーバーに接続してデータのやりとりをするため、必ずサーバーが必要です。サーバーへのアクセスが集中すると、応答速度が低下しますし、サーバーがダウンすると使用できなくなります。

一方のP2Pはそれぞれのパソコンが対等に通信する方法で、サーバーが必要ありません。それぞれが持っているデータをやりとりして情報を共有するため、一部の端末が動いていなくても他の端末とやりとりできるメリットがあります。また、特定の端末にアクセスが集中することが少ないこともメリットです。

しかし、P2Pではデータがどこに保存されているのかわからないため、企業などではクライアントサーバーのようにデータの一元管理が可能な方法が選ばれます。

  ネットワークを分割する

クライアントサーバーでもP2Pでも、すべてのコンピュータが同じネットワークにつながっていると困ることがあります。例えば、インターネットはオープンな世界で便利な一方で、企業が持っている情報に外部から勝手にアクセスされると困ってしまいます。そこで、ネットワークを分割することを考えてみます。

インターネットと社内のネットワークを分けて管理する方法として、境界にファイアウォールという機器を設置する場合があります。ファイアウォールでは、外部からの通信は拒否し、社内からの通信のみを通す、といった処理が行われます。

f:id:itstaffing:20210707122459j:plain

このとき、外部からの通信の中には許可したいものもあります。例えば、会社のホームページなどが配置されているWebサーバーであれば、外部からアクセスできる必要があります。また、メールの場合も、外部から届いたメールを受け取る必要があります。

このような場合、社内のネットワークに直接アクセスされると、セキュリティ上のリスクがあるため、DMZ(非武装地帯)と呼ばれる領域を作り、ここにWebサーバーやメールサーバーを配置します。

ネットワークを分割するのは社内と社外の間だけではありません。社内でも、部署が異なると閲覧できてはいけないデータがあります。また、ネットワークを分けることで管理が楽になり、マルウェアへの感染などが広がる範囲を狭い範囲に絞れる可能性もあります。

この場合はファイアウォールで分けるのではなく、ルーターなどの機器でネットワークを分割します。

f:id:itstaffing:20210707122502j:plain

  プロトコルの階層構造

ネットワークを分割しても、それぞれのネットワークの境界や内部で他の製品と通信できる必要があります。このとき、それぞれが違うルールで通信をしようとすると正しくやりとりできません。一方が日本語を話して、もう一方が英語を話していては会話が成立しないように、共通の言葉を使う必要があるのです。

そこで、通信のフォーマットや手順、宛先の指定方法、エラー時の処理などを決めたルールのことを「プロトコル」と言います。そして、インターネットの世界では共通のプロトコルを使うことで、どんなメーカーのどんな製品であっても、通信できるようになっています。

このプロトコルは階層構造になっており、よく知られているものとして「OSI参照モデル」と「TCP/IP」があります。「OSI参照モデル」は理論的には優れた階層構造で、7つの層で構成されています。しかし、実用上では4層の「TCP/IP」が使われています。

現在のインターネットも、基本的にはこの「TCP/IP」に沿って考えることが多く、よく使われているプロトコルが右のように対応しています。

f:id:itstaffing:20210707122506j:plain

このような階層構造は、私たちの身近なところでも使われています。

例えば、郵便を配達する場面を考えてみましょう。私たちが手紙を送るとき、まずは文章を書きます。そして、それを封筒に入れて、相手の名前と住所を書きます。封筒をポストに投函すると、郵便配達にて相手のポストに届き、その住所に住む人の中から宛名になっている人が郵便を開き、中身の手紙を読めます。この階層構造がプロトコルと対応しています。

このように階層構造が分かれていることのメリットは、一部を交換できることです。例えば、郵便配達の場合、封筒に入れた後に郵便を使わずにメール便などを使うこともできます。これはプロトコルでも同じで、トランスポート層でTCPの代わりにUDPを使う場合があります。

  通信相手を識別する

ネットワークの構成を紹介したところで、次はどのように通信相手を識別するのかを考えてみましょう。

ネットワークに接続した機器を識別する番号としてIPアドレスがあります。機器を識別するといっても、パソコン単位というよりはネットワークインターフェイスに対して1つ付与されます。例えば、パソコンに無線LANと有線のインターフェイスがあれば、2つのIPアドレスが付与されます。

f:id:itstaffing:20210707122510j:plain

上の図はIPv4と呼ばれるバージョンのもので、32桁の0と1の2進数で表現されます。32桁なので、32ビットです。ただし、人間がこの0と1の羅列をみてもすぐに認識できないので、一般的にはこれを8ビットずつ区切り、さらに2進数を10進数に変換して、ピリオドでつなげて表現します。

このIPv4アドレスは0と1の2進数で32ビットなので、2の32乗、つまり最大で約43億個です。世界には70億人の人がいますし、一人でパソコンやスマートフォンなど複数の端末を持つ人が増えており、家庭とオフィスでは複数のコンピュータを使い分けているような状況であり、43億では足りません。

つまり、世界中の端末をIPアドレスだけで識別しようと考えると、アドレスの数が不足するのです。そこで使われているのがNATやNAPTといった技術です。これは、インターネットに接続しているルーターにグローバルIPアドレスを付与し、そのルーターの内部ではその組織内で使えるプライベートIPアドレスというIPアドレスを付与する方法です。

ルーターがIPアドレスの変換を行うことで、ルーターの内側ではインターネットで使われないIPアドレスを使えます。これにより、組織の内部では自由にIPアドレスを付与でき、必要なIPアドレスの数を減らせます。

しかし、それでもIPv4アドレスとして使えるものは減っており、2011年頃から、世界中で在庫が枯渇しています。現在は、使われていないIPアドレスをやりくりしている状況です。

f:id:itstaffing:20210707122514j:plain

そこで、32ビットのIPv4アドレスだけでなく、IPv6アドレスも使われるようになっています。IPv6アドレスは0と1が128個並んだものです。128個だと4倍のように思えるかもしれませんが、1ビット増えると2倍になりますので、膨大な数が用意されています。

f:id:itstaffing:20210707122517j:plain

これも2進数では人間が把握するのは大変なので、IPv4と同じように区切って表現します。IPv6では16ビットずつ区切って、2進数を16進数に変換し、こちらはコロンでつなげます。

このIPv6アドレスを使って接続するときに気になるのは、これまでのIPv4との互換性です。IPv4とIPv6のネットワークが接続できないと困るので、さまざまな手法で変換して接続されています。

例えば、インターネットに接続する部分では、IPv6で直接接続する「IPoE」と呼ばれる方式が登場しています。自宅の中でLANを作るときと同じように直接インターネットまで接続する方法で、ルーター以外に専用の機器を設置する必要がなくなります。

また、IPv6のネットワーク上でIPv4の通信を行うために、「IPv4 over IPv6」という技術があります。逆に、IPv4のネットワーク上でIPv6の通信を行うために、6to4という技術が使われます。

これらにより、IPv4とIPv6が混在しても、それぞれが通信できるようになっています。また、1つの機器にIPv4とIPv6の両方を扱えるデュアルスタックという方法も使われています。

  IPアドレスとドメイン名を対応づける

IPアドレスがわかったところで、私たちは普段あまりIPアドレスを意識していません。例えば、Webブラウザでアクセスするときは、URLを入力します。このようなURLはただの文字の並びですが、コンピュータはIPアドレスで通信するため、URLをIPアドレスに変換する必要があります。

このときに使われるのがDNSです。DNSによってURLとIPアドレスを変換してくれるので、人間が数字を覚える必要はありません。例えば、私たちがWebブラウザからURLを入力した場面を考えてみましょう。

パソコンの中ではIPアドレスが分からないので、そのIPアドレスを調べるために、プロバイダに問い合わせます。例えば、「seminar.masuipeo.com」というアドレスを問い合わせたとしましょう。

f:id:itstaffing:20210707122520j:plain

ここで、プロバイダが管理しているDNSサーバーは、すべてのIPアドレスを知っているわけではないので、まずルートDNSサーバーというところに「.com」のDNSサーバーのIPアドレスを問い合わせます。

すると、「.com」のDNSサーバーの場所を返すので、次はこの「.com」のDNSサーバーに「masuipeo.com」のDNSサーバーのIPアドレスを問い合わせます。この結果を受けて、「masuipeo.com」のDNSサーバーに「seminar.masuipeo.com」のIPアドレスを問い合わせます。問い合わせると結果が返ってくるので、問い合わせたところにIPアドレスを返します。

ここで、毎回このようなやりとりをするのではなく、一度問い合わせた内容はキャッシュして一定時間保存しておきます。これにより、よく使われるところは何度も問い合わせる必要がなくなります。

  ネットワーク内の場所を識別する

IPアドレスで相手を識別できたとしても、そのIPアドレスが割り当てられた端末がどこにあるかを識別しないといけません。つまり、住所がわかっていても、その住所がどこにあるのかを知らないとそこに辿り着けないわけです。ここで、緯度と経度のような値が必要になります。

ネットワークではMACアドレスと呼ばれ、ネットワークのインターフェイスにメーカーが割り当てた番号のことです。MACアドレスはハイフンやコロンで区切って表現し、その前半を見ればどこのメーカーのものかがわかります。

f:id:itstaffing:20210707122523j:plain

MACアドレスはメーカーが付与したものなので、基本的には変えられません。このため、セキュリティ面でも使われており、例えばMACアドレスフィルタリングがあります。これは、事前にネットワークに接続できるMACアドレスを登録しておく方法で、登録されていない端末はそのネットワークに接続できません。

企業などでは、勝手に社内のネットワークに接続されると困るため、接続できる端末のMACアドレスを登録しておく方法が使われています。

f:id:itstaffing:20210707122525j:plain

  同じコンピュータ内のサービスを識別する

IPアドレスやMACアドレスで端末やサーバーを識別しても、1台のコンピュータの中では複数のアプリケーションが動いています。例えば、サーバー側では同じコンピュータの中でWebサーバーやメールサーバー、データベースサーバーなどが動いています。私たちの使うパソコンでも、Webブラウザだけでなくメールソフトなどを使っています。

このとき、IPアドレスだけでは通信相手を識別できません。そこで、ポート番号という番号でアプリを識別します。

サーバー側では、よく知られているポート番号ということで、ウェルノウンポートという番号があります。Web関係であれば、HTTPの80番や、HTTPSの443番などは覚えておくとよいでしょう。

また、メールの送信であれば、SMTPの25番やSMTP over SSLの465番、サブミッションポートの587番などが使われます。

f:id:itstaffing:20210707122528j:plain

このように、ネットワークでは相手を識別するためにさまざまな番号やプロトコルが使われ、うまく接続できるようになっています。それぞれの番号やプロトコルの役割について把握しておくと、トラブルが起きた場合にも原因の特定に役立つかもしれません。ぜひ詳しく調べてみてください。

▼ これまでの「コラム:エンジニアが生き残るためのテクノロジーの授業」

#1「現代のITエンジニアに求められるスキルとは?」
#2「プログラミングに必要なアルゴリズムの考え方とは?」