違う機器が同じネットワークで話せる理由
スマートフォンでWebページを開くとき、通信相手のサーバーは同じメーカーの製品とは限りません。OSや処理装置も違います。それでも通信できるのは、機器の内部設計ではなく、外部とデータをやり取りする方法について共通の約束があるからです。
約束には、データの並べ方、通信を始める手順、宛先の表し方、受信したことの伝え方、異常が起きた場合の処理などが含まれます。人の会話に言語だけでなく、話す順番や返事の仕方が必要なのと似ています。送信側だけが規則を守っても成立せず、通信に参加する双方が同じ規則を解釈できなければなりません。
共通の規則が公開され、広く実装されることで、開発元の異なる機器やソフトウェアも接続できます。この性質を相互運用性といいます。LANとWANのように規模や管理者が異なるネットワークをつないだインターネットでは、相互運用性が特に重要です。
TCPとIPは一つの仕事を分担している
「TCP/IP」は単独のプロトコル名ではなく、インターネットで使われる複数のプロトコルをまとめた呼び方です。仕事を層に分け、各層が担当を受け持ちます。代表的な役割を上から順に見ると、次のようになります。
- HTTPは、Webブラウザがサーバーへ何を要求し、サーバーがどのように応答するかを定めます。HTTPSでは、HTTPの通信を暗号化などによって保護します。
- TCPは、データを順序どおりに受け渡すため、届いたかを確認し、必要に応じて再送します。一方、UDPは確認や再送を基本機能に含めず、簡潔な方法でデータを送ります。用途に応じて使い分けられます。
- IPは、データに送信元と宛先の情報を持たせ、複数のネットワークを経由して届ける役割を担います。ここで使う識別情報がIPアドレスです。
- さらに下では、有線LANや無線LANなどが、同じネットワーク内で信号を運びます。
この分担には、ある部分の技術を変更しても、決められた受け渡し方を守れば他の部分をそのまま利用しやすいという利点があります。Webアプリケーションは、途中にある通信機器の一つひとつを操作せず、下の層がデータを届ける機能を利用できます。
Webページが届くまでを順に追う
ブラウザにWebサイトの名前を入力した場面を考えます。まず、ドメイン名とDNSの仕組みを使い、人が扱いやすいドメイン名に対応するIPアドレスを調べます。次に、ブラウザは相手との通信を準備し、HTTPの形式でページのデータを要求します。このときブラウザはサービスを求めるクライアント、Webサイト側は要求に応じるサーバーであり、クライアントサーバモデルの関係になっています。
送るデータは扱いやすい大きさに分けられ、ヘッダーと呼ばれる制御情報が付け加えられます。この小さな単位がパケットです。通信経路上のルーターは、IPの宛先を見て次に渡す方向を選びます。すべてのパケットが必ず同じ経路を通るとは限りません。受信側では必要な情報を確認してデータを組み立て、上の層へ渡します。最終的にブラウザが受け取った文書や画像などを画面に表示します。
つまり一回の閲覧でも、名前を調べる規則、宛先へ運ぶ規則、確実に受け渡す規則、Webの要求と応答を表す規則が協力しています。「通信できない」という現象だけでは、どの段階に原因があるかは分かりません。ドメイン名をIPアドレスへ変換できない場合と、相手へ到達した後にWebサーバーからエラーが返る場合とでは、調べる場所が異なります。
同じ「届ける」でも速さと確実さは選べる
すべての通信が同じ性質を必要とするわけではありません。ファイルの転送では、一部が欠けたまま完了すると内容が壊れるため、正確さが重要です。一方、音声通話やオンライン配信のように時間の流れに沿って処理する通信では、遅れて届いた古いデータを待つより、多少の欠けを許して先へ進む設計が適する場合があります。
TCPは到着確認、順序の管理、再送などを行うため信頼性を高められますが、その処理には通信量や待ち時間が伴います。UDPはそれらをアプリケーション側の判断に任せるため、必ず「UDPのほうが優れている」「TCPなら遅い」と決まるわけではありません。必要な確実さ、遅延への強さ、アプリケーション側の設計を合わせて選びます。プロトコルは便利さを一律に保証する魔法ではなく、どの性質をどの層で実現するかを定めた設計なのです。
アドレス欄には複数の約束が見えている
Webブラウザのアドレス欄に現れる https:// の部分は、利用する通信方法を示しています。この https はプロトコルを表す名前で、その後ろには接続先を示すドメイン名や、サーバー内の場所を示す情報が続きます。普段は短い文字列として見えていても、ブラウザはそこから必要な情報を読み分けています。
また、プロトコルという語は通信だけの専用語ではありません。英語の protocol には、外交上の儀礼や正式な手順といった意味もあります。コンピュータ分野でも、「参加者が決められた順序と形式に従う」という中心の考え方は共通しています。人同士の礼儀とは異なり、コンピュータは曖昧さを文脈で補えないため、データ形式や処理手順を具体的に定める必要があります。