通信プロトコルはなぜたくさんあるのか?
荷物を発送するときに、段ボール箱や伝票、運搬の方法などの、それぞれに決まりごとや手順があると思います。たくさんの機器が通信を中継するコンピュータネットワークの世界でも、同様のことが言えます。
「アルファベットの略語が一杯出てくる」
これは私がITパスポートの勉強してた当時の感想です。ネットワーク分野に限らず3, 4文字の略語がうじゃうじゃ出てきて、すぐに
「こりゃ丸暗記するものではないな」
と思ったものです。
代わりにしたことといえば、エピソード記憶を定着させることです。実際にそれらの技術が使われている様子について調べたり、可能であれば実際に触れるなどを試みました。
これによって「略語の正式名称と、その意図」を理解すれば、それらは単なるアルファベットの羅列ではなくなるはずです。
前置きが長くなりましたが、この記事ではITパスポート対策テキスト (私の手元にあるやつ) だと微妙に端折られている「通信プロトコルの階層構造」について、ゆるく解説していきます。
これを知ることで、複数のプロトコルが組み合わさって通信パケットを形作っていることが分かり、それぞれのプロトコルの理解にも繋がると思います。
TCP/IP階層モデル
通信パケットの中で複数プロトコルが組み合わさっている様子は、よく次の図のようなレイヤ (layer, 階層) として表現されます。
図の下側が電気信号とかの物理に近い部分で、そこにソフトウェアに近い領域のものが乗っかる、みたいなイメージです。
すごくざっくり言うと、下から順番に
家の中 (LAN内) の、どの機器と通信するか (Ethernet / Wi-Fi)
インターネットの、どこと通信するか (IP)
パソコンの、どのアプリケーションで送受信するかなど (TCP / UDP)
どんなコンテンツを送受信するか (HTTP, DNS, その他多数)
みたいな制御が、それぞれのレイヤで行われていると考えてください。そうするとネットワーク全体での通信処理の流れが分かりやすくなりませんか? いっぺんにあれもこれもと考えるよりはかなりスッキリするはずです。
このサイトを読むとき、どんなプロトコルが使われるか?
さて、この記事を読めているということは、あなたも既にTCP/IPの恩恵を受けているはずです。ちょうど良いのでこれで説明していきますね。
次のスクショは、私がnoteのトップページにアクセスしたときの通信パケットをWiresharkというソフトでキャプチャした様子です。
アプリケーション層
note (が利用しているAWS) のサーバから、SSL/TLS (Secure Socket Layer / Transport Layer Security) で暗号化されたデータの断片がたくさん流れてきていますね。そして画像の一番下に、
「その中身はHTTP (HyperText Transfer Protocol) である」
との記載があります。いわゆるHTTPSですね。
この状態では、実際に何が入っているかは分かりませんが、今あなたが閲覧している文書や画像などなどは、概ねこのようにしてパソコンやスマホにやってくると考えてよいでしょう。
ちなみに「S」がついてないHTTPの場合、ここに平文のままのテキストやらリクエストやらが載っかります。Wiresharkとかでキャプチャすると、送信されたパスワードなどが本当に読めちゃったりします……
トランスポート層
そして、これら暗号化済みのデータはそれぞれTCP (Transmission Control Protocol) セグメントに載せられていることが分かります。画像だと下から上になっちゃってますけど。
通信を確実に行うために、セッションを張った上で様々な通信制御を行います。例えば、途中のパケットが無くなってしまったときの再送処理とかですね。
「そんな複雑は制御はいいから、もっと早くさばいてくれ!」
みたいなアプリケーションはこいつの代わりにUDPを使います。
DNSみたいに、状況にあわせてTCPとUDPを使い分けるプロトコルもあったりします。
なお、両者とも「ポート番号を用いてアプリケーションとOS (ソケット)を紐付ける」という役割を持ちます。
インターネット層
TCPセグメントはIP (Internet Protocol) パケットの上に載せられます。家やISP (プロバイダ) に置かれたルータは、これのヘッダに記載された宛先IPアドレスを見て、次の転送先にパケットを送ります。例えばパソコン視点だと、
「家の中の誰と通信すればインターネットに到達できる?」
みたいな流れでルータにパケットを渡します。
他のレイヤは通信の目的に合わせて違うプロトコルに変わったりしますが、このレイヤに限っては、今日のインターネットにおいては常にIPと言ってよいでしょう。
ネットワークインターフェース層
IPパケットにも乗り物があるんですね。私のPCにはLANケーブルが繋いであるのでEthernet (イーサネット) フレームです。
もしあなたの家にスイッチングハブやブリッジモードのルータがあれば、彼らはEthernetヘッダに載ったMACアドレスを基に、インターネットに出る前の通信をさばいています。
Wi-Fiを使う場合、ここだけ802.11フレームに置き換わったり、加えてWPA2 (Wi-Fi Protected Access 2) の暗号化が行われたりします。
まとめ?
パソコンやスマホなどが常日頃、通信のために割と複雑な処理をしてくれている、ってことがなんとなーく伝わったでしょうか?
全体を考えるのがとっても大変なので、こうして階層に分けることで、いわゆる「関心の分離」ってやつをやってるわけでございます……あ、これソフトウェアでもよく出る考え方なので調べて損はしないと思います。
本文で触れられなかったプロトコルもたくさんありますが、
「今はどこのレイヤの話をしているか?」
を考えながら資料を読むと、深く理解することができるはずです。多分。
……ところで字数が2,500に届いたのですけど。わたくし息抜きにこれを書いてたつもりだったのですが、おかしいですね?
なんかもう、ここまで来たらYouTubeに同じ内容の解説動画でも投稿しようかしらとか思い始めてます。最後まで斜め読みしてくださった皆様、ありがとうございました。
……あ、そうそう、わたくし普段はTwitterにいるのです。よろしかったらフォローしてくださいな。ではでは。
この記事が気に入ったらサポートをしてみませんか?