TCP (Transmission Control Protocol)(ティーシーピー)
インターネットの基本トランスポートプロトコル。1974年RFC 675・Vint Cerf / Bob Kahn 設計、信頼性 / 順序保証 / フロー制御で IP 上の信頼性通信を実現。
概要
TCP (Transmission Control Protocol) はVint Cerf / Bob Kahn が1974年に IETF RFC 675「Specification of Internet Transmission Control Program」で発表、1981年RFC 793 で正式標準化したInternet の基本トランスポートプロトコル。OSI モデルのトランスポート層 (Layer 4) プロトコル、3-way Handshake (SYN/SYN-ACK/ACK) で接続確立・パケット順序保証・再送・ACK・Window 制御・輻輳制御で信頼性通信を実現する、Internet 通信の柱。
TCP 主要機能
| 機能 | 説明 |
|---|---|
| 接続確立 | 3-way Handshake (SYN / SYN-ACK / ACK) |
| 切断 | 4-way Handshake (FIN / ACK) |
| 順序保証 | Sequence Number |
| 信頼性 | ACK + 再送 |
| Flow Control | Window Size |
| Congestion Control | Reno / NewReno / CUBIC / BBR |
| Reliability | チェックサム検証 |
| 多重化 | Port 番号 (16bit・0-65535) |
| Half-Close | 片方向クローズ可 |
| Keep-Alive | 接続維持 |
3-way Handshake
TCP 接続確立の仕組み:
Client Server
| |
|--- SYN (seq=x) ------>| (1)
| |
|<-- SYN-ACK (ack=x+1, seq=y) (2)
| |
|--- ACK (ack=y+1) ---->| (3)
| |
| 接続確立完了 |
| |
3往復で接続確立 → データ送信開始。HTTP リクエストごとの接続には100-300ms オーバーヘッド。
輻輳制御 (Congestion Control) 進化
| アルゴリズム | 年 | 特徴 |
|---|---|---|
| Tahoe | 1988 | 初期・Slow Start |
| Reno | 1990 | Fast Recovery |
| NewReno | 1999 | 改良Reno |
| Vegas | 1995 | RTT ベース (Linux 採用なし) |
| CUBIC | 2008 | 立方曲線・Linux default |
| BBR | 2016 | Bottleneck Bandwidth (Google・YouTube採用) |
| BBR v3 | 2023 | 改良版 |
CUBIC は伝統的ロス検知ベース・BBR は帯域・RTT 推定ベースで違うアプローチ、長距離高帯域回線で BBR が圧倒。
TCP vs UDP
| 項目 | TCP | UDP |
|---|---|---|
| 接続 | あり (3-way) | なし |
| 順序保証 | あり | なし |
| 信頼性 | あり (ACK + 再送) | なし |
| Flow Control | あり | なし |
| Congestion Control | あり | なし |
| ヘッダサイズ | 20-60 byte | 8 byte |
| Latency | 高 (Handshake) | 低 |
| 主な用途 | HTTP / SSH / SMTP / FTP | DNS / VoIP / DASH / 動画ストリーミング |
主要TCP 拡張・RFC
| RFC | 年 | 内容 |
|---|---|---|
| RFC 793 | 1981 | TCP 標準 |
| RFC 1323 | 1992 | High Performance Extensions (Window Scale) |
| RFC 2018 | 1996 | SACK (Selective ACK) |
| RFC 2581 | 1999 | Congestion Control Reno |
| RFC 6298 | 2011 | RTO Computation |
| RFC 7323 | 2014 | TCP Extensions for High Performance |
| RFC 7413 | 2014 | TCP Fast Open |
| RFC 8312 | 2018 | CUBIC |
TCP Fast Open (TFO・2014)
接続確立中にデータ送信可能化:
- 通常: 3-way Handshake → データ送信 (3RTT)
- TFO: SYN にデータ含め (1RTT)
- 再接続時に効果大
- Google Chrome / iOS / Linux 5.0+ 対応
関連用語との違い
- vs UDP: 信頼 / 高速
- vs QUIC: TCP 後継・UDP 上で動作
- vs HTTP: アプリケーション層 / トランスポート層
FAQ
Q1: 3-way Handshake 不要な改良? A: QUIC (Google 2013-) はUDP 上で0-RTT 接続可能、TCP の遅延問題を解決。HTTP/3 (2022) は TCP→QUIC へ移行中。
Q2: BBR の効果? A: YouTube が2016年BBR 採用で世界平均14%スループット向上・遅延30% 削減。Cloudflare / Spotify / Dropbox 等が採用。
Q3: TCP は廃れる? A: 当面廃れない。HTTP/3 (QUIC) 採用拡大中だが、SSH / Database 等の標準TCP依存アプリは継続。Linux Kernel に深く統合済み。