TCPとUDPの違い:接続・信頼性・順序・輻輳制御・ヘッダ・遅延・用途を比較
TCPとUDPは、どちらもIPの上で動くトランスポート層のプロトコルで、ポート番号でアプリケーションを区別します。TCPは、データを送る前に3ウェイハンドシェイクでコネクションを確立し、届いたかを確認応答(ACK)で確かめ、失われたデータを再送して、送った順番どおりに受信側のアプリケーションへ渡します。送る量も、受信側のバッファの空き(フロー制御)とネットワークの混雑(輻輳制御)に合わせて調整します。UDPはこれらを行わず、データをデータグラムとしてそのまま送るだけなので、ヘッダが小さく、送るまでの待ちもありません。確実に届くことが大事ならTCP、遅れないことが大事で、必要な処理はアプリケーションの側で行うならUDPを使います。
| 項目 | TCP | UDP |
|---|---|---|
| 接続の確立 | コネクション型。3ウェイハンドシェイク(SYN → SYN+ACK → ACK)の後にデータを送るので、最初に1往復(RTT)の待ちがある | コネクションレス型。手順なしで、すぐにデータを送れる |
| 届いたかの確認と再送 | 確認応答(ACK)で確かめる。再送タイムアウトや重複ACKで損失を判断して再送する | 確認も再送もしない。失われたデータはそのまま失われる |
| 順序 | シーケンス番号で並べ直し、送った順番どおりに渡す。重複も取り除く | 届いた順に渡す。順番の入れ替わりや重複が起こりうる |
| データの区切り | 区切りのないバイト列(バイトストリーム)として扱う。メッセージの境目はアプリケーションが決める | 1回の送信が1つのデータグラムになり、メッセージの境目が保たれる |
| フロー制御と輻輳制御 | あり。受信ウィンドウで受信側のバッファがあふれないようにし、輻輳ウィンドウで混雑に合わせて送る量を変える | なし。必要なら、アプリケーションの側で送る速さを調整する |
| ヘッダの大きさ | オプションなしで20バイト(オプション付きで最大60バイト) | 8バイト(送信元と宛先のポート番号、長さ、チェックサム) |
| 遅延 | 接続の確立に1往復かかる。損失があると、再送が届くまで後ろのデータも待たされる | 接続の手順も再送の待ちもなく、遅延が小さい。その代わり、データが欠けることがある |
| 宛先の種類 | 1対1(ユニキャスト)だけ | 1対1のほか、ブロードキャストやマルチキャストにも使える |
| 主な用途 | HTTP/1.1・HTTP/2によるWeb、HTTPを使う動画の配信、メール(SMTP)、SSH、ファイルの転送 | DNSの問い合わせ、DHCP、音声通話やライブ映像などのリアルタイムの通信、オンラインゲーム、HTTP/3で使うQUIC |
数値は代表的な目安で、世代や製品によって異なります。