あなたのIPv4アドレス:
オペレーティングシステム:
プロバイダー:

TCPとUDPの違い:トランスポート層の特徴と具体例

TCPとUDPはどちらもIP上でアプリケーションのデータを運びますが、提供する機能が異なります。TCPは、確認応答と再送によって、順序どおりのバイトストリームをアプリケーションに届けます。UDPは、こうしたトランスポート層での保証なしに、個々のデータグラムを送ります。どちらが優れているということはなく、アプリケーションの要件によって選ぶべきものが決まります。

TCPが提供するもの

TCPでは、アプリケーションのデータをやり取りする前に、エンドポイント間でコネクションを確立します。セグメントに番号を付け、欠けたデータを再送でき、受信側のアプリケーションにはバイトを順序どおりに渡します。フロー制御と輻輳制御によって、送信側が受信側やネットワークに過剰な負荷をかけるのを防ぎます。こうした特性は、ファイル、メール、多くのWeb接続に向いています。ただし、暗号化されるわけではありません。内容を保護するには、TLSなどの別のセキュリティプロトコルが必要です。

セグメントが失われると、アプリケーションは欠けたバイトが届くまで、後続のデータを処理できずに待たされることがあります。完全な形で届かなければならない文書には適していますが、リアルタイム性の高い通信では遅延の原因になりかねません。また、TCPはアプリケーションのメッセージの区切りを保持しません。送信側が2回書き込んだデータが、受信側で2回に分けて読み出されるとは限らないため、メッセージの区切り方はアプリケーション側で定義する必要があります。

UDPがアプリケーションに任せること

UDPはデータグラムの区切りを保持し、TCPのようなコネクションは確立しません。UDP自体は、配信の確認、パケットの並べ替え、欠けたデータの再送を行いません。それでも、UDP上に構築したアプリケーションで、必要に応じてこれらの機能や輻輳制御、暗号化を追加することはできます。DNSのクエリには一般にUDPが使われます。QUICはUDP上で動作しながら、より上位の層で信頼性のあるストリームと最新のセキュリティを実現しています。

リアルタイムの音声やゲームでは、ひどく遅れて届いたパケットより、次に時間どおり届くパケットのほうが役に立つこともあります。そのため、ロスや時間制限を自前で管理する道を選ぶアプリケーションもあります。UDPを使えば混雑したネットワークが速くなる、というわけではありません。キューの滞留やパケットの破棄は、どちらのプロトコルにも影響します。プロトコル名から性能を予想するのではなく、実際のアプリケーションで測定しましょう。経路上の遅延やロスは2IPの疎通確認ツール(ping・traceroute)で確かめられます。

ポートとプロトコルの選び方

どちらもポート番号を使いますが、TCPの443番とUDPの443番は別のエンドポイントを指します。TCPポートのチェックで、同じ番号のUDPサービスが動いていることは証明できません。HTTP/1.1とHTTP/2は通常TLS付きのTCPを使い、HTTP/3はUDP上のQUICを使います。UDPで接続できない場合、クライアントはTCPベースのHTTPバージョンを使うことがありますが、実際の結果は両方のエンドポイントによって決まります。

まずはアプリケーションに必要なもの、つまり完全な配信、順序、メッセージの区切り、時間制限を整理します。そのうえで、ネットワークの対応状況とセキュリティ要件を確認しましょう。TCPとUDPの仕様には、それぞれのトランスポートサービスが定義されています。ポート番号の意味については、ネットワークポートの解説記事をご覧ください。