プロトコルとは
プロトコル(Protocol)とは、通信を行う際の「約束事」や「ルール」のことを指します。 ネットワーク上で異なるデバイスやアプリケーションがデータをやり取りするためには、共通の規則に従う必要があります。この規則のセットがプロトコルです。
プロトコルの概要
プロトコルの役割
プロトコルは、以下のような役割を果たします。
- 通信の標準化
異なるベンダーやデバイス間での互換性を確保。 - データのフォーマット化
データの構造や形式を統一 - エラー検出・修正
データ転送中のエラーを検知し、適切に修正 - セッション管理
通信の開始、維持、終了を管理
宅急便を送る時は段ボールで、郵便は封筒で送りましょう
送る時は宛先と送り元を書きましょう…みたいなルールのイメージ
OSI参照モデルとプロトコル
通信プロトコルは、OSI参照モデル(7階層モデル)に基づいて設計されることが多いです。各層で異なる役割を持つプロトコルが存在します。
層 | 役割 | 例 |
---|---|---|
アプリケーション層 | ユーザーと直接やり取り | HTTP, FTP, SMTP |
プレゼンテーション層 | データ形式の変換 | SSL/TLS |
セッション層 | 通信の確立・維持・終了 | NetBIOS, RPC |
トランスポート層 | データの信頼性を保証 | TCP, UDP |
ネットワーク層 | データのルーティング | IP, ICMP |
データリンク層 | 隣接ノード間のデータ転送 | Ethernet, Wi-Fi |
物理層 | ハードウェアレベルの通信 | USB, 光ファイバ |
バックエンドエンジニアが押さえておくべきプロトコル
バックエンドエンジニアとして、以下のプロトコルは必須の知識かと思いますので押さえておきましょう
HTTP/HTTPS
- 概要:Webアプリケーションの通信に使用されるプロトコル。
- HTTP:データを暗号化せず送信
- HTTPS:SSL/TLSを使用して暗号化通信を実現
- 関連技術:RESTful API、GraphQL
TCP/IP
- 概要:インターネットの基盤となるプロトコルスイート
- TCP(信頼性の高い通信)
- パケットの順序保証
- 再送機能によるデータの完全性
- IP(ネットワーク層の通信)
- データを適切な宛先にルーティング
UDP
- 概要:軽量で高速な通信プロトコル
- 特徴
- 順序保証や再送機能がない代わりに高速
- 音声通話やストリーミングで使用
DNS
- 概要:ドメイン名をIPアドレスに変換するプロトコル
- 重要性:アプリケーションが正しいサーバーに接続するためには必須
SMTP/IMAP/POP3
- 概要:メール通信に使用されるプロトコル
- SMTP:メール送信
- IMAP/POP3:メール受信
WebSocket
- 概要:双方向のリアルタイム通信を実現するプロトコル
- 利用例:チャットアプリ、リアルタイム更新(株価、ゲーム)
SSL/TLS
- 概要:通信の暗号化とセキュリティを提供するプロトコル
- 重要性
- HTTPSの基盤
- クレジットカード情報やパスワードの安全な送信に不可欠
gRPC
- 概要:Googleが開発したRPC(リモートプロシージャコール)プロトコル
- 特徴:高速で効率的。Protocol Buffersを使用した軽量なデータ形式
プロトコルを理解すると何がいいのか
- 適切なプロトコルを選択することで、効率的で安全なシステムが構築可能
- トラブルシューティングの際に原因の切り分けで利用できる
- ネットワーク通信の問題を正確に特定し、解決できるようになる
- プロトコルの仕組みを理解することで、脆弱性を防ぐ設計が可能
プロトコルを何で学ぶのがいいのか
まずは名著:『マスタリングTCP/IP 入門編』を読むことをオススメします!
個人的な感想ですが、初心者でもかなり分かりやすいかと思います!
余談
よくIPAの資格(基本情報、応用情報など)を取っても仕事に使わないのでは?と耳にします。
私も同じ質問を新卒時代に上司に投げかけたことがあって、上司は「IPAの試験範囲の知識はエンジニア同士が会話する上での最低限のプロトコルみたいなもんだよ」と言われてハッとしたのを覚えています。
他社のエンジニアと話す際にそれぞれの会社での専門用語の応酬みたいな感じになると会話にならないですもんね…
まとめ
昔MicroSoft社の方に「パケットは義務教育にした方がいい」と言われたのを思い出しました。
ネットワークを学ぶ方はWiresharkなどのツールで色んなパケットを解析してみるといいかもしれません。