3秒でわかる
機器やソフト同士が通信するための共通の取り決め。手順とデータの形をそろえることで、作り手の違う実装同士でも会話が成立します。
もう少し詳しく
どういうものか
通信する二者の間で、何をどの順番でどんな形式でやり取りするかを定めた約束事。日本語と英語のように、話す側と聞く側が同じ規則を使っていなければ意味が通じない。プロトコルは、その規則を文書として決め、誰が実装しても噛み合うようにしたものになる。
代表例を挙げると、Web ページの取得は HTTP、暗号化を伴う通信は TLS、メール送信は SMTP、ファイル転送は FTP、時刻合わせは NTP、名前解決は DNS がそれぞれ担当する。
なぜ必要か
プロトコルが標準化されているおかげで、iPhone のブラウザから Linux のサーバーへ、まったく別の会社が作った実装同士で通信できる。もし各社が独自の手順を使っていれば、組み合わせの数だけ対応が必要になる。
もう 1 つの利点が層構造になる。通信は役割ごとに層に分かれ、上の層は下の層の中身を知らなくてよい。HTTP は「相手まで確実にバイト列が届く」ことだけを前提にでき、その実現方法は TCP に任せられる。
具体例
ブラウザがページを取りにいくときに実際に流れるテキスト。
[ ブラウザが送る ]
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
[ サーバーが返す ]
HTTP/1.1 200 OK
<a href="/glossary/content-type" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">Content-Type</a>: text/html; charset=UTF-8
Content-Length: 1256
<!DOCTYPE html>
...1 行目に何をしたいか、続く行に付帯情報、空行のあとに本体という順序が決まっている。この順序こそがプロトコルになる。
つまずきやすいところ
HTTP と HTTPS を別物として覚えてしまうこと。HTTPS は HTTP を TLS の上で流しているだけで、やり取りの中身の文法は同じになる。
TCP と UDP の使い分けも誤解されやすい。TCP は届いたことを確認しながら順番も保証するため、ファイルや Web に向く。UDP は確認をしないぶん遅延が小さく、音声通話や動画配信に向く。速いから優れているという話ではなく、失われたデータを再送する価値があるかどうかで選ぶ。
ポート番号を「プロトコルそのもの」と思うのも危うい。80 番や 443 番は慣習的な割り当てで、設定を変えれば別の番号でも動く。
似た用語との違い
| 語 | 指すもの |
|---|---|
| プロトコル | やり取りの手順と形式の取り決め |
| ポート | 同じ機器の中でどのプログラム宛かを示す番号 |
| API | 特定のサービスが公開する機能の呼び出し口 |