この記事について
この記事ではインターネットを構成するネットワークの通信の仕組みについて、教養として知りたい方のためになるべくわかりやすくなるようにまとめてみました。
おことわり
一度でもネットワークについて勉強したことがある方でしたらご存知かと思いますがネットワークは階層上に作られたプロトコルという数多くの通信機器間、ソフトウェア間の取り決めによってつくられています。なるべく細かい知識・用語を知らずに、概要を理解できるようにしたいという気持ちから割愛・抽象化したものが多くあります。その点ご了承いただけますと幸いです。
クライアントとサーバ - ネットワーク通信の基本的な概念
まず覚えておきたい概念がクライアントとサーバです。ネットワーク上のコンピュータが通信する際に、必ずアクセス元とアクセス先という関係があります。アクセス先として、他のコンピュータからの通信を受け取るものをサーバ、逆にアクセス元としてサーバにアクセスをするコンピュータをクライアントといいます。
クライアントの代表例としては普段私たちが触っているPCやスマートフォンです。これらは、ブラウザのWEBページを配信してくれるWEBサーバなど、世界中の様々なサーバにクライアントとしてアクセスします。
なお、1点注意点として、クライアントとサーバは相対的な概念であることに注意ください。例えば、下記の図のような関係です。サーバAはクライアントのPCにとってはサーバではありますが、逆にサーバBに対してはサーバAはサーバBのクライアントという立ち位置になります。
クライアント、サーバという関係をベースにそれではネットワークを支える仕組みを一つずつみてみましょう。
IPアドレス - ネットワーク上の住所
現実世界で住所という概念を通じて郵便がとどけられるのと同じように、ネットワーク上ではIPアドレスというアドレスを使ってコンピュータ間の通信を行います。
ネットワークに繋がるコンピュータであれば全てのコンピュータにIPアドレスが付与されています。実際にみてみましょう。
Windowsの場合はコマンドプロンプト、Macの場合は端末というアプリを立ち上げてみましょう。Windowsの場合はスタート画面で検索すると出てきます。また、Macの場合はLaunchpadのアプリケーションの中のその他のフォルダに入っています。
どちらも以下のような黒い画面がでるアプリケーションです。コマンドラインツールというアプリケーションで、コンピュータに直接コマンドという命令を入力して操作するためのアプリケーションです。
立ち上げられたらWindowsの場合はipconfig、Macの場合はifconfigと入力してエンターキーを入力してみましょう。以下のような表示が出れば成功です。
# Windowsの場合
$ ipconfig
Windows IP 構成
Wireless LAN adoptor Wifi:
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::719a:f48f:8570:1922%38
IPv4 アドレス . . . . . . . . . . . .: 192.168.56.1
サブネット マスク . . . . . . . . . .: 255.255.255.0
デフォルト ゲートウェイ . . . . . . .:
Wireless LAN adapter ローカル エリア接続* 1:
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
--------- 以下略 -------
# Macの場合
$ ifconfig
lo0: flags=8049 mtu 16384
options=1203
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
nd6 options=201
en0: flags=8863 mtu 1500
options=400
ether 08:f8:bc:69:b1:25
inet6 fe80::18f2:4058:3f28:5ea9%en0 prefixlen 64 secured scopeid 0x6
inet 192.168.2.110 netmask 0xffffff00 broadcast 192.168.2.255
nd6 options=201
media: autoselect
status: active
--------- 以下略 -------
Windowsのipconfigの場合はIPv4アドレス、IPv6アドレス、Macの場合はinet、inet6と書かれているものがIPアドレスです。なお、今日では一つのPCが必ずしも一つのネットワークに属しているとは限らないため、複数のIPアドレスが登録されています。
また、今回ここまで紹介してきたIPアドレスは、「127.0.0.1」という形式のIPv4というIPアドレスでした。このIPアドレスは、世界中大量の端末がネットワークに接続しているということから枯渇問題が発生しています。そのため今日ではIPv6という「fe80::719a:f48f:8570:1922%38」といったIPアドレスも使われています。
将来的にはIPv6の形式のIPに全て移行することが想定されますが、IPv6はまだ実運用上の課題も多く、試験運用中というステータスに近い存在です。現実に現状のネットワークはIPv4が主として使われることが多いため、以降原則IPv4をベースにして解説していきます。
ポート番号 - ネットワーク通信におけるコンピュータ間の扉
ネットワークの住所がIPアドレスだったのに対し、ポート番号は通信のためのドアになります。コンピュータ間の通信を行う場合、以下の図のように、クライアント、サーバ双方がIPアドレスと共にポート番号も用意する必要があります。
上の図に記載がありますが、一般にクライアント側は通信ごとにポート番号が変動するのに対し、サーバ側はポート番号を変更させません。これは、ポート番号を固定しておかないと、クライアントはサーバに対してどのポート番号にアクセスすれば良いのかわからないためです。一方のクライアントはサーバのように外からのアクセスを原則受けつけていません。そのため、サーバへ通信を行う時に毎回一時的なポート番号を発行し、通信が終了したらそのポート番号は破棄してしまうことができるのです。
また、ポート番号を利用することで、1つのサーバが複数のサーバアプリケーションとして運用することができます。下は80番ポートでWEBサーバとしてWEBページの配信、25番ポートでメールサーバとしてのメール送信を受け付けているサーバの例です。
ネットワーク間のPCが通信するための情報は他にもありますが、まずはこのIPアドレスとポート番号の2つを覚えることが基本中の基本ですのでこの機会に是非覚えてください。
ルーター - 個々のネットワーク間のつなぎ役
一見、インターネットというと大きな巨大なネットワークに全てのコンピュータが接続されているように思えますが、実際はプライベートネットワークという小さなネットワークがそれぞれのネットワークの間にある仲介役をとおしてつながっているという構成です。
そんなネットワーク間のつなぎ役の役割をもつのがルーターというコンピュータです。今日お店で購入したり、インターネットプロバイダと契約した際に借りられるルーターのことです。
なお、ルーター自身の外部ネットワークへの仲介役としての機能は、正しくはルーターの中にあるNAT、あるいはNAPTという通信機能です。つまりルーターの1機能に過ぎません。この他にネットワークに繋いだコンピュータにIPアドレスを発行してあげるDHCPサーバ機能など、ルーターはインターネットとの接続仲介に限らず、ご自宅のプライベートネットワークを構成する上での中心的役割をになっているコンピュータです。
ルーターの仕組み
それではルーターのネットワーク間の仲介をする仕組みをみてみましょう。
ルータは接続されたクライアント端末のIPが属するプライベートネットワークのIPのほか、仲介役として役割を果たすため、外のネットワークのIPも持っています。それぞれのIPのことをプライベートIP、グローバルIPと呼びます。
ルーター自身がグローバルIPを持つことによって、自力で外のサーバにアクセスできないプライベートネットワーク内のクライアント端末のインターネット接続を代行してくれます。
なお、上の図のように、ルーターが複数のクライアント端末を管理し、それぞれのクライアントが同時にインターネットの通信を行っていた場合、アクセス元ポート番号で、それぞれの端末を識別しています。このようにして間違ったクライアントに通信データを送ることを防いでくれています。
グローバルIPアドレスを確認してみる
それではグローバルIPアドレスとアクセス元ポートを確認してみましょう。私の方でこちらのツールを作りました。アクセスしてみてください。ご自身が接続しているグローバルIPアドレスと、ポート番号が表示されます。
もしもWifiルーターを通してのアクセスだった場合、先ほどのipconfigやifconfigで表示されなかったIPアドレスが表示されていると思います。これはルーターを介してアクセスしているためです。上記のツール上ではご自宅のルーターが持つグローバルIP、またはご自宅のルーターが仲介をお願いしている、さらに外側のネットワークのグローバルIPを表示しているためです。
また、もしもルーター内に2台以上PCやスマートフォンを繋いでいた場合、こちらのページで出力されるIPアドレスは同一であるものの、ポート番号が違っていると思います。これはポート番号でそれぞれの端末ごとの通信を識別管理しているためです。
なお、ある程度時間を開けてから再度上記のページをみてください。ポート番号が変わっていると思います。これは、アクセス元ポートがサーバと違って通信の受信をうけるものではないため、定期的に破棄して新しいポート番号を発行しているためです。
DNSサーバとドメイン - IPアドレスとドメインの紐付けとその管理
ここまでIPアドレスとポート番号について解説しました。しかしながら、普段WEBブラウザでWEBサイトを閲覧するときは「http://sample.com/article」といったURLを入力したり、メールを送信するときは「miyau5555@sample.com」といったメールアドレスを使います。IPアドレスやポート番号を意識することはありません。これは何故でしょうか。
ポート番号は先ほど説明したように、サーバ側は固定されたポート番号を持つため、WEBサーバは原則80番、メール送信は25番ポートと決まっているためです。それ以外のポート番号を例外的に使うようなケースがない限り入力する必要がないためです。ややマニアックなため、詳細は割愛しますが、URLに関しては万が一80番ポートを使わない場合、「http://sample.com:8080/article」というようにポート番号を指定することはできます。
では、IPアドレスはどこにあるのでしょうか。実はメールアドレス、URL共通にある「sample.com」という部分はドメインと呼ばれ、このドメインとIPアドレスを紐づけて管理しているサーバに問い合わせてIPアドレスを取得しているからです。
このIPアドレスとドメインの対応表を管理しているサーバのことをDNSサーバと言います。
DNSサーバの基本的な仕組み
URLを入力してWEBサーバにアクセスしてWEBページを受け取る前に、クライアントはまずDNSサーバに当該ドメインはどのIPアドレスと紐づいているのかを問い合わせています。問い合わせたDNSサーバは当該ドメインに紐づくIPアドレスを知っていたらそのまま返して終了します。もしも知らない場合は親にあたるDNSサーバに問い合わせます。その親DNSサーバも知らない場合はさらにその親にあたる祖父DNSサーバに...という形でDNSサーバを通じて当該ドメインに対応するIPアドレスを探します。
このDNSサーバを通じた、ドメインに紐づくIPアドレスの問い合わせを名前解決といいます。名前解決によって判明したドメインのIPアドレスを通じて、クライアントはアクセスしたいサーバにアクセスしています。
名前解決をみてみる
実際にどのように名前解決をしているか確認してみましょう。
先ほども使ったコマンドラインツールを利用します。nslookupというコマンドを使うことで確認ができます。nslookupはご利用中のPCがアクセスしているDNSサーバと名前解決によって取得したIPアドレスを確認することができるコマンドです。
試しに私の運営サイトドメインであるmiyau5555.infoの名前解決をしてみてください。以下のように入力します。
% nslookup <ドメイン名>
# 例
% nslookup miyau5555.info
以下のような出力がでれば成功です。なお、Windowsの場合日本語で出力されることがあったり、環境によってはServerがUnknownになっている可能性がありますが、IPアドレスが表示されていれば問題ありません。
% nslookup miyau5555.info
Server: 192.168.2.1
Address: 192.168.2.1#53
Non-authoritative answer:
Name: miyau5555.info
Address: 153.127.40.51
最初の2行ServerとAddressとなっているところが問い合わせたDNSサーバです。 Addressに表示されるIPアドレスが問い合わせに使ったDNSサーバのアドレスです。
ルーターを使っている場合、実はルーターのIPアドレスです。ルーターは接続クライアント用のDNSサーバーを持っております。
後段のNon-authoritative answer:より下にあるIPアドレスがmiyau5555.infoに紐づくサーバのIPアドレスです。miyau555.infoは上記のIPアドレスが付与されたサーバで運用しています。
「Non-authoritative answer:」または、「権限のない回答という表記」があると思います。これは当該ドメインが問い合わせたDNSサーバが元より登録されていたDNSサーバではなく、親DNSサーバに問い合わせて教えてもらったことを示しています。
使い方がわかったらyahoo.co.jpやgoogle.comなどもみてみましょう。同様にnslookupによってアクセスするIPアドレスがわかります。
キャッシュ管理を通じたルートサーバの負荷軽減
ここまで述べたようにDNSサーバは問い合わせられたドメインの紐づくIPを知らない場合、親に当たるDNSサーバに問い合わせます。親DNSサーバも知らない場合はさらに祖父DNSサーバに問い合わせていきます。このように階層的な親子関係があるので、ルートサーバという全ての親にあたるDNSサーバが世界に13台存在します。
毎回インターネットアクセスするたびにルートサーバにアクセスするかというと、そいういうわけではありません。下の図のように、問い合わせた際にキャッシュというデータを一定期間保存することで、DNSサーバは頻繁に親にあたるDNSサーバになるべく問い合わせないように対応しています。
これは、親に当たるDNSサーバの負荷がたまらないようにすることと、通信にかかるアクセス時間を短縮するために行われています。
このキャッシュという一時データを保持することを通じた負荷軽減策はDNSサーバに限らず、コンピュータのシステム処理全般に使われる考え方です。是非この機会に覚えておいてください。
DNSラウンドロビン - DNSを使ったサーバの負荷分散
最後にもう一つ、DNSが行う特徴的な機能をご紹介します。
先ほど、nslookupを使ってIPアドレスの名前解決をしましたが、googleやyahooの場合、時間をおいてもう一度名前解決をしてみると返ってくるIPアドレスが変わったり、複数のIPアドレスが返されることがあるとおもいます。これは何故でしょうか。
実は、DNSサーバ上にドメインとIPアドレスを紐づける際に、IPアドレスは複数紐づけることができます。
複数IPアドレスを紐づけることによって、名前解決を行った際にIPアドレスを複数返したり、複数登録されたIPアドレスのうちの1つを選んで返すことができます。このようにすることで、1つのサーバにアクセスが集中することを防いでシステム負荷による障害を防いでいます。
このようなDNSサーバを利用した負荷分散のことをDNSラウンドロビンと言います。サーバ側の負荷分散の仕組みはDNSラウンドロビン以外にもありますが手軽さがあるということで、DNSラウンドロビンを採用するシステムは数多くあります。
おわりに - さらなる学習をしたい方へ
以上がインターネットの基本となる仕組みでした。最初のお断りで申し上げたように今回は触りとなる全体図だけを紹介しました。さらなる学習をしたい方向けに以下のご紹介をします。
WEBサーバの仕組みを知りたい方へ
今回は、クライアント側のインターネットの接続の仕組みを中心に説明しましたので、サーバサイド側の仕組みの代表としてWEBサーバの通信の仕組みを以下の記事にまとめました。もしもご興味がありましたら読んでみてください。
ITパスポート試験・基本情報技術者試験の試験範囲を勉強してみる
より体系的に学びたいという方は、ITパスポート、またはITパスポートの次のステップとしての試験にあたる基本情報技術者試験の勉強をしてみることをおすすめします。
両試験ともにIT領域の知識が満遍なく体系的に扱われています。試験を受ける気がなくても、シラバスの領域を勉強するだけでネットワークに限らず広いIT知識を得ることができると思います。
どちらも様々な参考書がでておりますので試験を受ける・受けないを気にせず一冊手にとってみると良いかもしれません。
ネットワーク専門書で勉強する
ネットワークの知識の専門書もいくつかあります。初学者向けの一冊としては以下がおすすめです。こちらもご興味がありましたら手にとってみてください。
この記事を通じて少しでもインターネットの接続の仕組みについて理解をすることができたり、さらに発展して勉強したいとおもっていただけましたら幸いです。最後まで読んでいただきありがとうございました。
Photo by Roberto Junior on Unsplash