このブログ記事ではTCPとUDPについて紹介します。

IPアドレスがどのように扱われ、通信に使われるかを理解したところで、次はコンピュータ同士がどのように通信するかを規定するルールについて、 ネットワーク層(第3層)より上の層に注目していきます。この記事では、特にトランスポート層(第4層)で使われるプロトコル、 TCPとUDPについて説明します。
TCP
Transmission Control Protocol(TCP) は、トランスポート層で最も広く使われているプロトコルの1つです。 TCPでは、実際にデータが送信される前に、クライアントがまずSYN(Synchronization)フラグをサーバに送ります。 サーバがこれを受け取ると、SYNの受領を確認し、ACK(Acknowledgment)フラグをクライアントに送ります。 また、サーバもクライアントにSYNフラグを送り、最後にクライアントがACKフラグを送信して双方向の接続を確立します。 この接続確立のプロセスは TCP3ウェイハンドシェイク と呼ばれます。

クライアントとサーバのやり取りの間では、シーケンス番号と確認応答番号がフラグと一緒に送信されます。これらの番号は、 クライアントとサーバが送受信したバイト数を追跡するためのものです。シーケンス番号は送信されたバイト数を追跡し、 確認応答番号は受信されたバイト数を追跡します。これにより、双方が欠落したセグメントや順序が乱れたセグメントがないことを確認できます。 接続が確立された後は、FIN(Finish)フラグやその他の接続終了を要求するフラグが確認されるまで、通常、 接続は開いたままにされます。
UDP
TCPのプロセスが多すぎると感じた場合、User Datagram Protocol(UDP) という代替手段を検討することができます。 UDPは接続の概念がない、非常にシンプルなプロトコルです。ポート番号などの最小限の情報だけを添付してサーバにデータを送信します。 そのため、サーバがデータを受信する準備ができているか、データが完全に受信されるか、順序通りに受信されるかは保証されませんが、 TCPよりも軽量で高速です。
TCP vs UDP
上記のように、速度と信頼性のトレードオフがあります。UDPは通常、TCPよりも高速ですが、その分信頼性が低くなります。しかし、技術が進歩するにつれて、速度の違いは多くの使用ケースではほとんど認識できなくなり、TCPの方が優位に立つことが多くなりました。そのため、多くのプロトコルはTCPの上に構築されています。
とはいえ、取引やゲームなど、ミリ秒単位の遅延が重要なケースもあります。こうしたシナリオでは、プログラムを設定して、順序が乱れたり破損したセグメントを処理することでUDPを活用することができます。実際、HTTP/3はUDPに基づくQUICを使用して、信頼性がありながらも軽量な通信を実現しており、新しい標準となりつつあります。そのため、これらのプロトコルの特徴を理解し、どちらも使いこなせるようになることが重要です。
リソース
- Derpy Networking. 2016. TCP Sequence and Acknowledgment Numbers. YouTube.
- Nasser, H. 2019. TCP vs UDP Crash Course. YouTube.
- LiveOverflow. 2023. What is a Protocol? (Deepdive). YouTube.