プロトコル(Protocol)

（自分の記憶の中から思い出して殴り書きをしているので、情報が正確ではありません。それでもよければご覧いただければと思います。m(__)m）

# プロトコル＝共通言語

> 👨wiki：プロトコルまたはプロトコール（英語: protocol[1]、フランス語: protocole[2]）とは、複数の当事者が対象となる事柄を確実に実行するための手順について定めたもの。

Webの世界で、プロトコルとは、
結論：**通信するためのルール**です。

タイパ重視の人のために、もう一度いいます。
プロトコルとは結論、**通信するためのルール**です。以上です

まずは、例を示してみます。
- [HTTP](https://qiita.com/hirokishimizu39/items/2bf208e34bab4e72f560)
- TCP/IP
- [API](#)
    - REST API

よく聞くこれらがプロトコルの例です。

Webエンジニアとして働くうえで、この**プロトコル**はすごく大事です。
なぜでしょうか。。。
これは、**英語**が大事だといわれるのと同じです。

> 👩帰国子女ステファニー：英語は喋れたほうがいいよ～～！

よくこういうの聞きます。
なぜみんなこういうのか。
グローバル化が進み、世界中の人々と協力するには、日本語だけでは足りないからです。英語は世界中で20億人が使用しています。日本語は1.5億人しか話せません。これでは、みんなで協力できません。そこで、共通言語として、20億人と会話できる英語が必要になります。[^1]






# Column. 
突然ですが、

> 👧(3歳)Q. Webエンジニアって結局なにしてるの？ 

と姪っ子に質問されたら、なんと答えますか？
ぼくは、こう答えようと思います。

> 「世界中の人々と手を取り合って、協力する。」そんな平和な世界を作っているんだよ！ 

そう、Webエンジニアの仕事の本質は、「時空間をこえた世界中をつなぐ、リソース(データ,情報,人)のやり取り」にあると思います。なぜなら、Webの始まり、[WWW](https://qiita.com/hirokishimizu39/items/1dc36a1b41ffc1fba3aa)の生まれた歴史がまさに、**世界中のひとと情報のやり取りをしたい**という願望(Goal)から始まったからです。




# Web(世界中のひとと情報のやり取りをする)の世界での共通言語
**Webエンジニアの仕事**(Why,Goal)が、**世界中のひとと情報のやり取りをすること**だと分かったところで、 **具体的**(How) にどうやってやりとりするのか。それが、**プロトコル**で決定します。

例えば、プロトコルを[OSI参照モデル](#)でカテゴライズして列挙してみると、以下のようなものがあります。(不明なものがあれば、進んで読んでみてください。)
- ネットワーク
    - IP
- トランスポート
    - TCP
    - UDP
- セッション
    - RPC
    - TLS
- プレゼンテーション
    - SSL/TLS
- アプリケーション
    - DNS
    - HTTP
    - REST API
    - Fetch API / XMLHttpRequest




# プロトコル一覧【OSI参照モデルベース】

## 🧠アプリケーション層（7層）

**ユーザーに最も近く、アプリやサービスが利用する通信規約**

### 🔹Web・通信関連

* **HTTP / HTTPS**
* **WebSocket**（リアルタイム双方向通信）
* **SMTP / IMAP / POP3**（メール）
* **FTP / FTPS / SFTP**
* **Telnet / SSH**（リモート接続）

### 🔹名前解決・ディレクトリ

* **DNS**
* **mDNS / Bonjour**
* **LDAP**（ディレクトリサービス）

### 🔹API

* **REST API**
* **SOAP**
* **GraphQL**
* **gRPC**（Protocol Buffersを使う）

### 🔹クラウド・プラットフォーム

* **AWS API / GCP API / Azure API**
* **OpenStack API**

### 🔹ファイル共有・通信

* **SMB / CIFS**（Windowsファイル共有）
* **NFS**（UNIX向け）

### 🔹データベース関連

* **SQL over TCP**
* **ODBC / JDBC  (Open/Java Database Connectivity)**
　（　↑　ORMが抽象化してくれているので気にする必要なし）

### 🔹IoT / その他

* **MQTT**（軽量メッセージング）
* **CoAP**
* **XMPP**

---

## 🎨プレゼンテーション層（6層）

**データの表現・構造・暗号化に関する取り決め**

### 🔐暗号・圧縮・エンコード

* **SSL / TLS**（HTTPSなどの基盤）
* **MIME**（コンテンツタイプ）
* **Base64**（バイナリ→テキスト変換方式（8ビット × 3バイト → 6ビット × 4個）64は2^6）
* **JSON / XML / YAML / Protocol Buffers**
* **gzip / deflate / Brotli**（HTTP圧縮）

---

## 🧭セッション層（5層）

**セッションの確立・維持・終了を司る層。やや抽象的。**

* **NetBIOS**
* **RPC（Remote Procedure Call）**
* **PPTP / L2TP / IPSec（VPN関連）**
* **TLSのハンドシェイク**
* **SQLセッション管理（トランザクション）**

> ※ ここはプロトコル名よりも「仕組み・方式」で表現されることが多い

---

## 🚚トランスポート層（4層）

**信頼性ある通信のための制御。ポート番号もここ。**

* **TCP**
* **UDP**
* **QUIC**（HTTP/3で使用）
* **SCTP**（通信の冗長性向上）

---

## 🌍ネットワーク層（3層）

**IPアドレスでルーティング。中継の主役**

* **IP（IPv4 / IPv6）**
* **ICMP**（pingなど）
* **IGMP**（マルチキャスト）
* **ARP / RARP**
* **OSPF / RIP / BGP / IS-IS（ルーティング）**

---


ここから下のレイヤーは、低レイヤーすぎてWebエンジニアとしては、あまり気にしなくてもいいものになっていきますね。


---

## 🔗データリンク層（2層）

**MACアドレスとスイッチング。LANの基盤。**

* **Ethernet**
* **PPP / HDLC / SLIP**
* **MAC**
* **VLAN / IEEE 802.1Q**
* **LLDP（隣接機器検出）**

---

## ⚡物理層（1層）

**電気信号・光信号など。最下層の物理通信手段**

* **LANケーブル（UTP / STP）**
* **光ファイバー（SMF / MMF）**
* **RS-232 / RS-485**
* **USB / HDMI**
* **Bluetooth / Wi-Fi / ZigBee / NFC**
* **5G / LTE / 4G / LoRaWAN**
* **NRZ / Manchester符号化**
* **電圧・波形などの物理仕様**

# プロトコル以外の「通信方式・規格」

| 分類      | 例                  | OSI層        | 補足                     |
| ------- | ------------------ | ----------- | ---------------------- |
| エンコード方式 | Base64, JSON, XML  | 6層          | データを可読化・転送しやすくする       |
| 暗号方式    | AES, RSA, TLS      | 6層 or 複数層跨ぎ | 実装はアプリorセッションorプレゼン    |
| 通信ライブラリ | axios, fetch, curl | アプリ層        | HTTPなどの呼び出しを簡素化        |
| ファイル形式  | JPEG, MP4, PDF     | 6層扱い        | 「通信中に意味を持つ」ならプロトコルに準ずる |





# 🔍chatGPTによる補足：プロトコルとは「お約束ごと」

プロトコルとは、単なる通信方法ではなく、\*\*「どんな形式で、どの順番で、どんなルールでやりとりするか」\*\*を定めた共通語です。

* 👶メールを送る → SMTP
* 🧑‍💻ページを見る → HTTP
* 🛰正しく届いたか知りたい → TCP
* 🌐そもそもどこに送る？ → IP
* 📡それを電気信号にする → LANケーブル

というふうに、**通信の全段階にプロトコルがある**、ということが重要です。

---

# ✅次にできる行動タスク

* [ ] OSIモデル7層を絵で図解してみる（理解が深まります）
* [ ] 各層ごとに「自分が日常で使ってるプロトコルはどれか」リストアップしてみる
* [ ] WiresharkでHTTP, TCP, IPの動作を観察してみる（実感がわきます）
* [ ] WiresharkでBase64やTLSがどの層で使われているかを観察
* [ ] API通信で「プレゼンテーション層とアプリケーション層の違い」を整理
* [ ] IoT系プロトコル（MQTT, CoAP, ZigBee）も試す


# まとめ

Webの世界で、プロトコルとは、
結論：**通信するためのルール**です。

# ひとこと
- コメントをいただけると嬉しいです。
- 繋がることでいいエネルギーの循環を創り出すことができると信じています。
- Think Straight, Talk Straight !!
- 今日も最高の1日に。



[^1]:[3か月でTOEIC890点を取得する方法](#)