TCPとUDPの違いとは?特徴・ヘッダー形式・使い分けを徹底解説
TCP(Transmission Control Protocol)とUDP(User Datagram Protocol)は、インターネットプロトコル(IP)と組み合わせて広く利用されている2つのトランスポート層プロトコルです。プロトコルとは、コンピューター同士が互いに理解し合い、データをやり取りするために従う手順やルールの集合体のことです。TCPは2つの中で最も一般的に使われていますが、状況によってはUDPの方が有用なケースもあります。
全体比較:TCP vs UDP
TCPの主な特徴
- 送信したデータがそのままの形で届くことを保証する
- データストリームのエラーチェックを行う
- 20バイトのヘッダーに加え、最大40バイトのオプション機能データを許容
- UDPより低速
- 信頼性が求められるアプリケーションに最適
UDPの主な特徴
- データが届くことを保証しない
- エラーチェック機能を持たない
- 8バイトのヘッダーで必須機能データのみ
- TCPより高速
- 速度が求められるアプリケーションに最適
どちらのプロトコルも、データをパケット単位でインターネット上に送信します。このうちTCPはコネクション型(接続指向型)であり、接続が確立されると双方向でデータがやり取りされます。一方、UDPはよりシンプルなコネクションレス型(非接続型)のプロトコルです。
TCPはUDPよりも堅牢で、エラー訂正機能と高い信頼性を提供します。UDPがTCPより高速なのは、主にエラー訂正機能を持たないためです。さらに、TCPはフロー制御(流量制御)を処理しますが、UDPにはフロー制御の仕組みがありません。
信頼性重視ならTCP
TCP
- データの確実な配達を保証
- データパケットを追跡
- パケットのエラーチェックを実施
- フロー制御に対応
- 20バイトのヘッダー+拡張オプションあり
UDP
- 配達の保証なし
- パケットが失われる可能性がある
- フロー制御なし
- ヘッダーは8バイトに制限
TCPは受信者へのデータ配達を保証します。万一データが失われた場合でも、TCPは失われたデータを検知して再送信する手順を自動的に実行します。このために、TCPはデータパケットを追跡し、パケットごとにエラーチェックを行います。
一方、UDPはデータの配達を保証しません。また、UDPパケットは転送中に失われたり、破損したりする可能性があります。
TCPとUDPはどちらも、ネットワーク接続経由でメッセージデータを転送する際のパッケージングの一部としてヘッダーを使用します。TCPは2つのプロトコルの中でより堅牢であるため、ヘッダーは20バイトと大きく、追加データ用のオプションも用意されています。一方、UDPのヘッダーは8バイトに制限されています。
速度重視ならUDP
- TCP:多くの機能を実行するため低速
- UDP:機能が限定的なため高速
TCPは信頼性が高い反面、多くの処理を担うためUDPより低速です。可能な限り最高の速度を必要とするユーザー、たとえばゲーマーや動画を扱う業務従事者などは、UDPから大きな恩恵を受けます。
用途別の使い分け
- TCPが適している用途:Web閲覧、ファイル転送、メール、セキュアシェル(SSH)
- UDPが適している用途:VPN、動画ストリーミング、VoIP、ライブ配信、オンラインゲーム
TCPは信頼性が高いため、Web、メール、FTPのように高い信頼性が必要だが速度はそれほど求められない場面に最適です。
UDPの速さは、オンラインゲーム、ライブ配信、VPNトンネリング、動画ストリーミングといった用途に最も適しています。
TCPヘッダーの形式
TCPヘッダーには必須フィールドが10個あり、合計20バイト(160ビット)のサイズになります。オプションとして、最大40バイトの追加データフィールドを含めることも可能です。
※8ビット=1バイトです。
TCPヘッダーは、送信元と宛先の通信エンドポイントから始まり、以下の順序で構成されます。
- 送信元TCPポート番号(2バイト/16ビット):送信側デバイスを表します。
- 宛先TCPポート番号(2バイト/16ビット):受信側デバイスの通信エンドポイントです。
- シーケンス番号(4バイト/32ビット):メッセージの送信者が、一連のメッセージの順序を示すために使用します。
- 確認応答番号(ACK番号)(4バイト/32ビット):送信者と受信者の両方が、最近受信した、または送信予定のメッセージのシーケンス番号を伝えるために使用します。
- TCPデータオフセット(4ビット):TCPヘッダーの合計サイズを4バイト単位で格納します。オプションのTCPフィールドを使用しないヘッダーのデータオフセットは5(20バイト)、最大サイズのオプションフィールドを使用する場合は15(60バイト)になります。
- 予約データ(3ビット):TCPヘッダーの予約データは常にゼロです。このフィールドによりヘッダーサイズの合計が4バイトの倍数に揃えられ、コンピューターのデータ処理効率にとって重要な役割を果たします。
- 制御フラグ(最大9ビット):TCPは6つの標準制御フラグと3つの拡張制御フラグを使用し、それぞれがOn/Offを表す1ビットとして、特定の状況下でのデータフローを管理します。
- ウィンドウサイズ(2バイト/16ビット):TCP送信者は「ウィンドウサイズ」と呼ばれる数値を使い、確認応答を受信する前に受信者へ送信できるデータ量を調節します。ウィンドウサイズが小さすぎるとネットワーク転送が不必要に遅くなり、大きすぎるとネットワークリンクが飽和したり、受信側が処理しきれずパフォーマンスが低下したりします。プロトコルに組み込まれたウィンドウアルゴリズムがサイズ値を動的に計算し、このフィールドを通じて送受信者間の調整を行います。
- TCPチェックサム(2バイト/16ビット):TCPヘッダー内のチェックサム値は、送信者が数学的手法によって生成するもので、受信者が破損または改ざんされたメッセージを検出するのに役立ちます。
- 緊急ポインター(2バイト/16ビット):緊急ポインターフィールドは通常ゼロに設定されて無視されますが、制御フラグの1つと組み合わせることで、メッセージの一部を優先処理対象として示すデータオフセットとして使用できます。
- TCPオプションデータ(0〜40バイト):特殊な確認応答やウィンドウスケーリングアルゴリズムのサポートなどの用途があります。
UDPヘッダーの形式
UDPはTCPに比べて機能が限られているため、ヘッダーも小さくなっています。UDPヘッダーは8バイトで構成され、以下の4つの必須フィールドに分かれています。
- 送信元UDPポート番号(2バイト):送信側デバイスを表します。
- 宛先UDPポート番号(2バイト):受信側デバイスの通信エンドポイントです。
- データ長(2バイト):ヘッダーとデータの両方を含む各データグラムの合計サイズを表します。最小値は必須ヘッダーサイズの8バイトで、65,000バイト以上まで指定できます。
- UDPチェックサム(2バイト):TCPと同様に、受信側が受信データに破損したビットがないかを確認するために使用します。
まとめ
TCPが最も広く使われているプロトコルであるのには理由があります。堅牢で信頼性が高く、送信されたデータがそのままの形で受信されることを保証します。エラーチェック付きの情報ストリームにより多少速度は落ちますが、ほとんどの場合、その遅延は大きな問題にはなりません。
UDPがTCPよりも輝くのは、動画ストリーミング、VPN、オンラインゲームなど、速度が極めて重要となる場面です。用途に応じて両者を適切に使い分けることが、快適で安定したネットワーク通信の鍵となります。
-
シリアライズ(直列化)とは?仕組みからマーシャリングとの違い、活用例まで徹底解説
最近のプロジェクト進捗ミーティングで、私たちのチームは「シリアライズ(直列化)」を使ってアプリケーション間でデータをやり取りする方法について話し合いました。すると、ソフトウェア開発にもっと携わりたいというエンジニアから、「その用語はよく知らない」という声が上がりました。こうした重要なプロセスは、規模の大きいプロジェクトに踏み込むまで登場しないため、見落とされがちです。この方にとってはそうでしたし、かつての私自身もまったく同じでした。そこで、この記事を書くことにしました。あの日同僚にシリアライズについて教えたように、今日はあなたにその知識をお伝えします。シリアライズとは何か?シリアライズとは、あ
-
TCPとUDPの違いとは?仕組みの比較とどちらのプロトコルが速いのか徹底解説
ネットワーク技術を学び始めたばかりの方や、アプリケーションのネットワーク設定を調べたことがある方なら、「TCP」「UDP」という言葉を目にしたことがあるでしょう。TCP(Transmission Control Protocol:伝送制御プロトコル)とUDP(User Datagram Protocol:ユーザーデータグラムプロトコル)は、インターネットプロトコルスイートに含まれるプロトコルで、インターネット上で情報を送受信するための異なる方式です。しかし、正式名称を知っていても、どちらのプロトコルをどんな場面で使うべきなのか、なぜ一方を選ぶのかは分かりにくいものです。この記事では、コンピュー