TCPとUDPとは?トランスポート層の仕組みを基礎から理解しよう
はじめに
OSI基本参照モデルの第4層が、
トランスポート層(Transport Layer)
です。
ネットワーク層のIPは、
どのコンピュータへ届けるか
をIPアドレスによって判断していました。
トランスポート層ではさらに、
そのコンピュータのどのアプリケーションへ届けるか
を管理します。
代表的なプロトコルが、
TCP
UDP
です。
1. トランスポート層とは
例えば、1台のPCでは同時に、
Webブラウザ
メール
オンラインゲーム
ビデオ通話
など、複数のアプリケーションが通信しています。
IPアドレスだけでは、
どのコンピュータなのか
までは分かっても、
そのコンピュータ上のどのアプリケーションへ届けるのか
までは判断できません。
そこで利用されるのが、
ポート番号
です。
IPアドレス
→ どのコンピュータ?
ポート番号
→ どのアプリケーション?
と考えると分かりやすいです。
2. ポート番号
**ポート番号(Port Number)**は、
通信を行うアプリケーションやサービスを識別するための番号
です。
ポート番号は、
0 ~ 65535
の範囲があります。
代表的なものには、
| プロトコル | ポート番号 |
|---|---|
| HTTP | TCP 80 |
| HTTPS | TCP 443 |
| SSH | TCP 22 |
| DNS | UDP/TCP 53 |
| SMTP | TCP 25 |
などがあります。
このように、
IPアドレス
+
ポート番号
を利用することで、目的のコンピュータ上の適切なサービスへ通信を届けられます。
3. TCPとは
**TCP(Transmission Control Protocol)**は、
データを確実に届けることを重視したプロトコル
です。
TCPでは、
接続を確立する
データが届いたか確認する
届かなければ再送する
正しい順番に並べる
といった制御を行います。
そのためTCPは、
信頼性の高い通信
が必要な場面で利用されます。
4. TCPはコネクション型
TCPは、
コネクション型
のプロトコルです。
データをいきなり送るのではなく、最初に通信相手との接続を確立します。
接続を確立
↓
データ通信
↓
接続を終了
電話に例えると、
電話をかける
↓
相手が出る
↓
会話する
↓
電話を切る
というイメージです。
5. 3ウェイハンドシェイク
TCPで通信を開始するときに行われるのが、
3ウェイハンドシェイク(Three-way Handshake)
です。
通信開始前に3回のやり取りを行います。
クライアント サーバー
SYN
─────────→
SYN + ACK
←─────────
ACK
─────────→
接続確立
6. SYNとACK
SYN
**SYN(Synchronize)**は、
通信を開始したい
という意味で利用されます。
ACK
**ACK(Acknowledgement)**は、
受信したことを確認した
という意味です。
したがって3ウェイハンドシェイクは、
① SYN
「通信したいです」
② SYN + ACK
「いいですよ。こちらも準備します」
③ ACK
「確認しました」
↓
通信開始
と考えると分かりやすいです。
7. TCPのシーケンス番号
ネットワークでは、大きなデータを分割して送信することがあります。
例えば、
データ
↓
A
B
C
D
と分けて送ったとします。
ネットワークの状況によっては、
A
C
B
D
のように到着する可能性があります。
TCPではシーケンス番号を利用してデータの順序を管理します。
そのため、受信側で正しい順序に並べることができます。
8. 確認応答
TCPでは、データを受信すると、
ACK
を利用して受信したことを送信側へ伝えます。
送信側
データ
────────→
受信側
ACK
←────────
これを確認応答といいます。
送信側はACKを受け取ることで、
データが相手に届いた
と判断できます。
9. 再送制御
では、途中でデータが失われた場合はどうなるでしょうか。
送信側
データ
─────×────→
受信側
データが届かなければ、期待した確認応答も返ってきません。
送信側は一定時間待っても必要なACKを受け取れなければ、
データが届かなかった可能性がある
と判断して再送します。
データ送信
↓
ACKが返ってこない
↓
再送
これを再送制御といいます。
10. TCPのフロー制御
TCPには、
フロー制御
という仕組みもあります。
送信側が大量のデータを一気に送ると、受信側が処理しきれなくなる可能性があります。
そこで、
受信側が処理できる量に合わせて送信量を調整する
のがフロー制御です。
TCPではウィンドウサイズなどを利用して制御します。
受信側
「今はこのくらい受け取れます」
↓
送信側
「では、その範囲で送ります」
というイメージです。
11. TCPの輻輳制御
ネットワークそのものが混雑している場合もあります。
これを、
輻輳(ふくそう / Congestion)
と呼びます。
TCPではネットワークの混雑状況に応じて送信量を調整します。
これを、
輻輳制御
といいます。
似ていますが、
フロー制御
→ 受信側が処理しきれるように調整
輻輳制御
→ ネットワークが混雑しすぎないように調整
という違いがあります。
12. TCPの特徴を整理する
TCPには、
コネクション型
3ウェイハンドシェイク
シーケンス番号
確認応答
再送制御
フロー制御
輻輳制御
などの仕組みがあります。
これらによって、
多少処理が増えても、信頼性の高い通信を実現する
のがTCPです。
13. UDPとは
**UDP(User Datagram Protocol)**は、
信頼性よりもシンプルさやリアルタイム性を重視するプロトコル
です。
TCPのように、
3ウェイハンドシェイク
確認応答
再送制御
順序制御
などを基本的には行いません。
そのため、TCPよりもシンプルな通信ができます。
14. UDPはコネクションレス型
UDPは、
コネクションレス型
です。
TCPのように事前に接続を確立せず、
送りたい
↓
送信
という形でデータを送ります。
電話よりも、
手紙を投函する
ようなイメージに近いです。
送信側は、相手との接続を確立してから送るわけではありません。
15. UDPでは届くことを保証しない
UDPでは、
データが届いたか
途中で失われたか
正しい順番で届いたか
をUDP自身では保証しません。
例えば、
A
B
C
D
と送信しても、
A
C
D
となる可能性があります。
それでも、
多少データが失われても、遅延を抑えたい通信
などではUDPが適しています。
16. UDPが利用される場面
UDPは、
音声通信
動画配信
オンラインゲーム
DNS
などで利用されます。
例えばリアルタイムの音声通信では、
少し前の音声データが失われたから再送する
よりも、
多少欠けても、そのまま次の音声を届ける
方が適している場合があります。
ただし、UDPを使うアプリケーションが独自に再送や信頼性確保の仕組みを持つこともあります。
つまり、
UDPを使う = 必ず信頼性が低いアプリケーション
という意味ではありません。
17. TCPとUDPを比較する
| TCP | UDP | |
|---|---|---|
| 接続方式 | コネクション型 | コネクションレス型 |
| 信頼性 | 高い | UDP自体では保証しない |
| 接続確立 | あり | なし |
| 確認応答 | あり | なし |
| 再送制御 | あり | なし |
| 順序制御 | あり | なし |
| 処理 | 比較的多い | シンプル |
| 主な用途 | Web、メール、ファイル転送など | DNS、音声・動画、ゲームなど |
一言で整理すると、
TCP
→ 確実性を重視
UDP
→ シンプルさ・リアルタイム性を重視
です。
18. IP・TCP・UDPの関係
前回学習したIPと組み合わせると、さらに分かりやすくなります。
アプリケーション
↓
TCP / UDP
↓
IP
↓
Ethernetなど
それぞれの役割は、
IP
→ どのコンピュータへ届ける?
TCP / UDP
→ どのアプリケーションへ届ける?
です。
さらにTCPの場合は、
ちゃんと届いた?
順番は合っている?
再送が必要?
といった信頼性の制御も行います。
19. まとめ
この記事で覚えること
- TCPとUDPはトランスポート層の代表的なプロトコル
- ポート番号によってアプリケーションやサービスを識別する
- ポート番号は0〜65535
- TCPはコネクション型
- UDPはコネクションレス型
- TCPでは3ウェイハンドシェイクによって接続を確立する
- SYNは接続開始、ACKは確認応答に利用される
- TCPはシーケンス番号によってデータの順序を管理する
- TCPには確認応答・再送制御がある
- フロー制御は受信側の処理能力に合わせて送信量を調整する
- 輻輳制御はネットワークの混雑に合わせて送信量を調整する
- UDP自身は到達確認や再送、順序制御を行わない
- TCPは信頼性を重視する通信に向いている
- UDPはシンプルさやリアルタイム性を重視する通信に向いている
🍯 はちみつメモ
IPアドレスが「どの家?」なら、ポート番号は「その家の誰?」。TCPは相手の返事を確認しながら確実に荷物を届けるタイプ、UDPは確認を待たずにどんどん届けるタイプ。TCP=確実性、UDP=シンプル・リアルタイム性を軸に覚えよう。