1. ホーム
  2. networking

[解決済み】TCPの代わりにUDPを使用することが適切なのはどんな場合ですか?[クローズド]

2022-03-27 06:09:24

質問

TCPはパケットの配送を保証しているので信頼性が高いと言えますが、UDPは何も保証していないのでパケットが失われる可能性があります。アプリケーションにおいて、TCPストリームではなくUDPでデータを伝送する利点は何でしょうか?また、どのような場面でUDPを使うのがよいのでしょうか。

UDPはストリームの生成と維持のオーバーヘッドがないので高速だと思いますが、一部のデータが宛先に到達しない場合は関係ないのではありませんか?

解決方法は?

これは私の好きな質問の一つです。UDPはとても誤解されているのです。

単純な答えを他のサーバーに素早く伝えたいような状況では、UDPが最も効果的です。一般的には、回答は1つのレスポンスパケットに収めたいもので、信頼性や再送のために独自のプロトコルを実装する用意があるものです。DNSはこのユースケースを完璧に表現しています。接続設定のコストが高すぎる(それでも、DNSは はTCPモードもサポートしています)。

もう1つのケースは、新しいデータが入ってくるとその前のデータ/状態が置き換わるため、失われる可能性のあるデータを配信している場合です。気象データ、ビデオストリーミング、株式相場サービス(実際の取引には使用されません)、ゲームデータなどが思い浮かびます。

また、膨大な量のステートを管理している場合、OSが多くのセッションを処理できないため、TCPを使わないようにしたい場合です。これは今日では稀なケースです。実際、現在ではユーザーランドのTCPスタックがあり、アプリケーションライターはTCPステートに必要なリソースをより細かく制御することができます。2003年以前は、UDPが唯一のゲームでした。

もうひとつは、マルチキャストトラフィックの場合です。UDPは複数のホストにマルチキャストが可能ですが、TCPはこれがまったくできません。