【TCPとUDPの違いと使い分け】普通はTCP、リアルタイムサービスはUDP

役に立つかも

情報処理の試験でTCPとかUDPとか目にするけどどう違うのか?

UDPを使う場面ってどんなとき?

ほとんどの場合TCPを使います。

ストリーミングサービスなどのリアルタイム性が高いものを作るときにUDPです。

TCPとUDP

TCPとUDPはトランスポート層(レイヤー4)のプロトコルです。IP層の上です。

IP層が単にデータを送るだけなのに対して、トランスポート層は、全てデータが揃っているか、できていなければ再送指示などを行います。

TCPがやること

TCPはトランスポート層がやるとされていることをやります。

3-wayハンドシェイク、到達確認、シーケンス番号の管理(順番の管理、データが揃っているか)、などを行い、通信の信頼性を確保します。データ化けやデータ欠けはTCPでエラーとなります。

例えば、HTTPはTCP上のプロトコルですが、通信経路上でデータ化けが起こるという心配は不要です。

ほとんどのプロトコルがTCP上に構築されています。よく使うところで言うと、HTTP, FTP, IMAPなどなどです。

UDPがやること

UDPは何もやりません。3-wayハンドシェイク、到達確認、シーケンス番号の管理などを一切やりません。

UDPを採用している限りデータが確実に届かないことがあります。順番が入れ替わるかもしれません。

LinuxのUDPの実装を見れば分かりますが、チェックサムだけやってすぐにIP層に投げる感じです。つまり、トランスポート層を素通りさせるのがUDP層です。

UDPが必要なとき

UDPは何もやりません。

データが確実に届くことが保証されません。順番が入れ替わるかもしれません。こんなプロトコルを使う場所があるのか?と思うかもしれません。

リアルタイムな通信

UDPは、リアルタイム性を重視するときに使われます。

例えば、VoIPつまり電話の音声を送受信するプロトコルRTPがUDP上です。

電話の音声で、100msくらい途切れたときその100ms分を再送するよりも、次の音声が送信される方を優先した方がよさそうです。

データの完全性よりも速度重視です。オンラインゲームなどもこのカテゴリーですね。少々画像が乱れたとしても大まかに動作することの方が重要です。

NTP, DNS, DHCPもUDP上です。何度も素早く通信する必要があるためUDP上になります。

電話やオンラインゲームのようなデータのやりとりをするならUDPを考えてよいかもしれません。

自作の通信制御

TCPのやっていることが性能面で気に入らないけど信頼性は大事、というときはUDPにして上位で再送制御などを行います。

と言いますが、自作で再送制御したいと思うケースがあるのか私は分かりません。

が、しかし、

HTTP/3がUDPを採用しました

HTTP/3の話を最初聞いたときはびっくりしました。いまどきTCPを否定する人がいるのかと。先入観はいけないんだなと思うと同時に、Googleの技術力の底知れなさを感じます。

まとめ

TCPとUDPの違いと使い分けを説明しました。

大体がTCPです。普通のITエンジニアが関わるのはTCPです。リアルタイムなサービスを作るときはUDPを検討しましょう。

>>> 【ITエンジニア 役にたつかもしれない知識】

コメント

スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました