TCPとUDPの違いは何ですか?
タイムクリティカルでないアプリケーションの場合はTCPが使用され、データの高速送信を必要とするゲームやアプリケーションにはUDPが使用されることを知っています。TCPがHTTP、HTTPs、FTP、SMTP、およびTelnetに使用されていることを知っています。UDPがDNSとDHCPに使用されていることを知っています。
しかし、なぜ?TCPとUDPのどの特徴がそれぞれのユースケースでそれを役にたつでしょうか?
TCPとUDPの違いは何ですか?
タイムクリティカルでないアプリケーションの場合はTCPが使用され、データの高速送信を必要とするゲームやアプリケーションにはUDPが使用されることを知っています。TCPがHTTP、HTTPs、FTP、SMTP、およびTelnetに使用されていることを知っています。UDPがDNSとDHCPに使用されていることを知っています。
しかし、なぜ?TCPとUDPのどの特徴がそれぞれのユースケースでそれを役にたつでしょうか?
回答:
TCP
IPネットワーク上の接続指向のストリームです。これにより、送信されたすべてのパケットが正しい順序で宛先に到達することが保証されます。これは、送信者に送り返された確認応答パケットの使用、および自動再送信を意味し、追加の遅延が発生し、一般的な送信よりも効率が悪くなりUDP
ます。
UDP
接続のないプロトコルです。通信はデータグラム指向です。完全性は単一のデータグラムでのみ保証されます。データグラムは宛先に到達し、順不同で到着するか、まったく到着しない場合があります。TCP
非ACKを使用するためよりも効率的です。一般に、リアルタイム通信に使用されTCP
ます。接続のオーバーヘッドよりも、パケット損失率が少し高い方が好ましいです。
UDP
ブロードキャストパケットの送信が可能なため、特定の状況では使用されます。DHCP
クライアントマシンがまだIP
アドレスを受信していないため(これはDHCP
プロトコルのネゴシエーションの目的であり)TCP
、IP
アドレス自体なしでストリームを確立する方法がないため、これはプロトコルなどの場合に基本的なことがあります。
TCP(Transmission Control Protocol)は、インターネットで最も一般的に使用されているプロトコルです。これは、TCPがエラー訂正を提供するためです。TCPプロトコルが使用される場合、「保証された配信」があります。これは、主に「フロー制御」と呼ばれる方法が原因です。フロー制御は、いつデータを再送信する必要があるかを決定し、前のパケットが正常に転送されるまでデータのフローを停止します。これは、データのパケットが送信されると衝突が発生する可能性があるため機能します。これが発生すると、パケット全体が完了して元のパケットと同一になるまで、クライアントはサーバーにパケットを再要求します。1)TCPは接続指向で信頼性が高く、UDPは接続が少なく信頼性に欠けます。UDP(User Datagram Protocol)は、インターネットで一般的に使用されているプロトコルです。ただし、UDPは、ウェブページやデータベース情報などの重要なデータの送信には使用されません。UDPは通常、オーディオとビデオのストリーミングに使用されます。Windows Mediaオーディオファイル(.WMA)、Real Player(.RM)などのストリーミングメディアは、速度を提供するためUDPを使用します。UDPがTCPよりも高速である理由は、フロー制御やエラー修正の形式がないためです。インターネット経由で送信されるデータは衝突の影響を受け、エラーが発生します。UDPは速度のみに関係していることを覚えておいてください。これが、ストリーミングメディアの品質が高くない主な理由です。
2)UDPの場合と異なり、TCPはネットワークインターフェイスレベルでより多くの処理を必要とします。
3)TCPは、3ウェイハンドシェイク、輻輳制御、フロー制御、およびその他のメカニズムを使用して、信頼性の高い伝送を確実にします。
4)UDPは主に、パケット遅延がパケット損失よりも深刻な場合に使用されます。
is the most commonly used protocol on the Internet
文は議論の余地があると本当にあなたがどう定義するかに依存しmost commonly used
、protocol
そしてthe Internet
。たとえば、インターネットプロトコルはその特定の王冠への可能性が高いです。
TCPは、2つの場所の間のパッケージの専用のスケジュールされたUPS / FedExピックアップ/ドロップオフと考えることができますが、UDPはポストカードをメールボックスに投げることに相当します。
UPS / FedExは、あなたが郵送するパッケージが確実に到着し、時間通りに到着するように、最も困難なことを行います。ポストカードがあれば、到着しても幸運で、到着が遅れたり遅れたりする可能性があります(休暇から家に帰ってから何回ポストカードをもらったことがありますか?)
TCPは、できる限り保証された配信プロトコルに近いのに対し、UDPは単なる「ベストエフォート」です。
UDPがDNSおよびDHCPに使用される理由:
DNS-TCPは、クライアントからの場合よりも、サーバー(接続をリッスンする)からより多くのリソースを必要とします。特に、TCP接続が閉じられている場合、サーバーは、TIME_WAIT_2と呼ばれる状態の2分間、接続の詳細を(メモリに保持して)記憶する必要があります。これは、前の接続から誤って繰り返されたパケットが現在の接続の一部として解釈されるのを防ぐ機能です。TIME_WAIT_2を維持すると、サーバーのカーネルメモリが消費されます。DNS要求は小さく、多くの異なるクライアントから頻繁に到着します。この使用パターンは、クライアントと比較してサーバーの負荷を悪化させます。接続もクライアントもサーバーも維持する状態がないUDPを使用すると、この問題は改善されると考えられていました。
DHCP-DHCPはBOOTPの拡張です。BOOTPは、クライアントの起動中に、クライアントコンピュータがサーバーから構成情報を取得するために使用するプロトコルです。サーバーを見つけるために、BOOTP(またはDHCP)サーバーを要求するブロードキャストが送信されます。ブロードキャストは、UDPなどのコネクションレス型プロトコルを介してのみ送信できます。したがって、BOOTPでは、サーバーを特定するブロードキャストのために、少なくとも1つのUDPパケットが必要でした。さらに、クライアントの起動中にBOOTPが実行されているため、これはクライアントがTCP / IPスタック全体をロードして実行していない可能性があるため、UDPはクライアントがその時点で処理できる唯一のプロトコルである可能性があります。時間。最後に、一部のDHCP / BOOTPクライアントには、UDPのみが搭載されています。たとえば、一部のIPサーモスタットはUDPのみを実装しています。
他の人が述べたように、UDPはストリーミングメディア、特にオーディオにも役立ちます。遅延したパケットを単にドロップすると、ネットワークラグの下で会話の音が良くなります。UDPを使用してこれを行うことができますが、TCPを使用すると、遅延中に取得されるのは一時停止だけであり、その後、オーディオは常に一時停止した分だけ遅延します。双方向の電話スタイルの会話の場合、これは受け入れられません。
TCPは実際のデータ送信が行われる前に接続を確立しますが、UDPは確立しません。このようにして、UDPはより高速な配信を提供できます。したがって、DNS、タイムサーバーアクセスなどのアプリケーションはUDPを使用します。
UDPとは異なり、TCPは輻輳制御を使用します。ネットワーク負荷に応答します。UDPとは異なり、ネットワークの輻輳が差し迫っていると、速度が低下します。したがって、一定のスループットを優先するマルチメディアのようなアプリケーションは、UDPに向いているかもしれません。
さらに、UDPは信頼性が低く、パケット損失に反応しません。したがって、マルチメディア伝送などの損失に敏感なアプリケーションはUDPを優先します。ただし、TCPは信頼できるプロトコルであるため、Web転送、電子メール、ファイルのダウンロードなどの信頼性を必要とするアプリケーションはTCPを優先します。
さらに、今日のインターネットでは、ミドルボックスのため、UDPはTCPほど歓迎されていません。UDP接続がブロックされていると想定されている場合、skypeなどの一部のアプリケーションはTCPに落ちます。
このスレッドにぶつかって、このように表現してみましょう。
3ウェイハンドシェイク
ボブ:ねえエイミーは、私はあなたに秘密お伝えしたいと思い
エイミー:先に行く、[OK]を、私は準備ができ
ボブ:OK
コミュニケーション
ボブ:「私」、これは最初の手紙です。
エイミー:最初の手紙を受け取った、2番目の手紙を送ってください
ボブ:「」、これは2番目の手紙です
エイミー:2番目の手紙を受け取った、3番目の手紙を送ってください
ボブ:「L 」、これは3番目の文字である
しばらくする
:ボブL 『この第三の手紙』
エイミー:受信した第3の手紙、私の第四手紙送ってください
ボブ:『O』、この規定の手紙
エイミー:...
... ...
4ウェイハンドシェイク
ボブ:私の秘密が露わになりました、今、あなたは私の心を知っています。
エイミー:はい。私は何も言うことはありません。
Bob:はい。
ボブ:I LOVE U
エイミーが受け取った: OVI LE
TCPは、UDPよりも信頼性が高く、メッセージの順序も保証されています。そのため、UDPの方が軽量で効率的です。
TCPはこんな感じです。
火星にペンフレンドがいると想像してみてください(インターネットの前の時代に書面で手紙を送っていました)。
あなたはあなたのペンフレンドに非常に効果的な人々の7つの習慣を送る必要があります。それで、あなたはそれを7つの別々の手紙で送ることに決めます:
等
など文字7-のこぎりを研ぐ
ペンフレンドがすべての手紙を順番どおりに受け取り、完全に届くようにする必要があります。ペンペイがレター1の前にレター7を受け取った場合、それはダメです。あなたのペンフレンドが文字3以外のすべての文字を受け取った場合-それもダメです。
要件が満たされていることを確認する方法は次のとおりです。
TLDR;
始める前に、何かの欠点はすべて、その利点の続きであることを覚えておいてください。万能薬ではなく、仕事に適したツールしかありません。TCP / UDPは何十年もの間、そして理由のために共存しています。
TCP
非常に信頼できるように設計されており、非常にうまく機能します。信頼性の低いIPプロトコルを介した信頼性の高い転送を実現するという難しいタスクを実行するため、非常に複雑です。
すべてのTCPの複雑なロジックがネットワークスタックにカプセル化されるため、アプリケーションレイヤーで多くの面倒でエラーが発生しやすい低レベルの作業を行う必要がありません。
TCPを介してデータを送信する場合、バイトのストリームを送信側のソケットに書き込み、そこでパケットに分解され、スタックを通過して、ワイヤーを介して送信されます。レシーバー側では、パケットは再びバイトの連続ストリームに再構成されます。
この優れた抽象化を維持するには、複雑さとパフォーマンスの面でコストがかかります。バイトストリームの最初のパケットが失われた場合、受信側は後続のパケットの処理を遅らせます。
さらに、信頼性を高めるために、TCPはこれを実装しています。
TCPは遅延が予測可能であり、パケット損失がそれほど一般的ではない有線ネットワーク用に設計されている一方で、これはすべて低速の信頼性の低いワイヤレスネットワークでは悪化します。さらに、すでに多くの人が述べたように、TCPがまったく機能しない場合があります(DHCP)。ただし、関連する場合、TCPは依然として非常にうまく機能します。
メールの類推を使用すると、TCPセッションは、秘書がそれをメールに分割し、くだらないメールサービスを介してパブリッシャーに送信するという話をするのに似ています。反対側では、別の秘書がメールを1つのテキストに組み立てます。一部のメールは失われ、一部は破損するため、信頼性の高い配信を行うには非常に複雑な手順が必要であり、10ページのストーリーがパブリッシャーに届くまでに長い時間がかかる場合があります。
UDP
一方、UDPはメッセージ指向であるため、受信側はメッセージ(パケット)をソケットに書き込んでから、分割や組み立てを行わずに、そのまま受信側に送信します。
TCPと比較すると、その仕様は非常に単純です。基本的に、受信者が破損を検出できるように、チェックサムをパケットに追加するだけです。それ以外はすべて、ソフトウェア開発者であるあなたが実装する必要があります。大量のTCP仕様を読んで、その一部を再実装することを考えてみてください。
一部の人々はこのようにして、HTTP / 3がQUIC(UDPベースのプロトコル)を使用するまで、かなりまともな結果を得ました。ただし、これは例外です。UDPの一般的なアプリケーションは、Skype、Zoom、Googleハングアウトなどのオーディオ/ビデオストリーミングおよび会議アプリケーションで、TCPによって導入される遅延と比較して、パケットの損失はそれほど重要ではありません。