TCPとUDPの違いは?


144

TCPとUDPの違いは何ですか?

タイムクリティカルでないアプリケーションの場合はTCPが使用され、データの高速送信を必要とするゲームやアプリケーションにはUDPが使用されることを知っています。TCPがHTTP、HTTPs、FTP、SMTP、およびTelnetに使用されていることを知っています。UDPがDNSとDHCPに使用されていることを知っています。

しかし、なぜ?TCPとUDPのどの特徴がそれぞれのユースケースでそれを役にたつでしょうか?


13
そして、これ(skullbox.net/tcpudp.php)-これはGoogleの最初のヒットでした-十分に明確ではありませんでしたか?それについて何が混乱しましたか?たぶんこれは良いですか? tcpipguide.com/free/...
S.Lott

1
この質問が(執筆の時点で)3つの賛成票を獲得した理由は本当に気になります。最初の文は意味がなく、検索した場合、このトピックに関する多くの資料が利用可能です。
MattH

21
@MattH:1)広範であり、重複がすでに十分に回答されている場合、それは良い質問です。2)最初の文のタイプミスを修正するのに十分な評判がありました。3)これに関する情報が他の場所に存在することは無関係です。Stack Overflowは知識のリポジトリになることを目的としており、ここで標準的に質問に回答します
ire_and_curses

2
興味深いことに、DHCPがブロードキャストを使用しているとほとんど誰も言及していませんが、「答え」は配信と再送信の保証についてであると誰もが考えています。
ヒース

1
将来これを読んでいる人のためだけに、上記のSkullboxサイトには、GoogleによるとMALWAREがある(私がそれをクリックしたときに私を止めた)。そこへ行かないことをお勧めします。
Alan006 2014年

回答:


119

TCPIPネットワーク上の接続指向のストリームです。これにより、送信されたすべてのパケットが正しい順序で宛先に到達することが保証されます。これは、送信者に送り返された確認応答パケットの使用、および自動再送信を意味し、追加の遅延が発生し、一般的な送信よりも効率が悪くなりUDPます。

UDP接続のないプロトコルです。通信はデータグラム指向です。完全性は単一のデータグラムでのみ保証されます。データグラムは宛先に到達し、順不同で到着するか、まったく到着しない場合があります。TCPACKを使用するためよりも効率的です。一般に、リアルタイム通信に使用されTCPます。接続のオーバーヘッドよりも、パケット損失率が少し高い方が好ましいです。

UDPブロードキャストパケットの送信が可能なため、特定の状況では使用されます。DHCPクライアントマシンがまだIPアドレスを受信していないため(これはDHCPプロトコルのネゴシエーションの目的であり)TCPIPアドレス自体なしでストリームを確立する方法がないため、これはプロトコルなどの場合に基本的なことがあります。


5
UDPが使用される例は、ビデオとオーディオの伝送であり、ここで少数のパケットを失うことは通常それほど重要ではありません(フレームの色がオフになっている、またはオーディオのごくわずかなナノ秒がカットされるか変更される可能性があります) -人間にはあまり目立ちません)。もちろん、接続が本当に悪い場合は、非常に多くのパケットが失われる可能性があり、ビデオがぼやけたり、ピクセル化されたりして、音声がぼやけて、途切れがちになります。
Niko Bellic 2014

53

Skullboxの記事から

TCP(Transmission Control Protocol)は、インターネットで最も一般的に使用されているプロトコルです。これは、TCPがエラー訂正を提供するためです。TCPプロトコルが使用される場合、「保証された配信」があります。これは、主に「フロー制御」と呼ばれる方法が原因です。フロー制御は、いつデータを再送信する必要があるかを決定し、前のパケットが正常に転送されるまでデータのフローを停止します。これは、データのパケットが送信されると衝突が発生する可能性があるため機能します。これが発生すると、パケット全体が完了して元のパケットと同一になるまで、クライアントはサーバーにパケットを再要求します。

UDP(User Datagram Protocol)は、インターネットで一般的に使用されているプロトコルです。ただし、UDPは、ウェブページやデータベース情報などの重要なデータの送信には使用されません。UDPは通常、オーディオとビデオのストリーミングに使用されます。Windows Mediaオーディオファイル(.WMA)、Real Player(.RM)などのストリーミングメディアは、速度を提供するためUDPを使用します。UDPがTCPよりも高速である理由は、フロー制御やエラー修正の形式がないためです。インターネット経由で送信されるデータは衝突の影響を受け、エラーが発生します。UDPは速度のみに関係していることを覚えておいてください。これが、ストリーミングメディアの品質が高くない主な理由です。

1)TCPは接続指向で信頼性が高く、UDPは接続が少なく信頼性に欠けます。

2)UDPの場合と異なり、TCPはネットワークインターフェイスレベルでより多くの処理を必要とします。

3)TCPは、3ウェイハンドシェイク、輻輳制御、フロー制御、およびその他のメカニズムを使用して、信頼性の高い伝送を確実にします。

4)UDPは主に、パケット遅延がパケット損失よりも深刻な場合に使用されます。


1
+1かなり良い要約。けれどもis the most commonly used protocol on the Internet文は議論の余地があると本当にあなたがどう定義するかに依存しmost commonly usedprotocolそしてthe Internet。たとえば、インターネットプロトコルはその特定の王冠への可能性が高いです。
MattH

-1:UDPがDHCPに使用される理由は、パケットの遅延や損失とは関係ありません。
ヒースハニカット、

2
クリアチャネルで大量のデータを送信する場合、TCPは多くの場合UDPよりも高速です。UDPがライブストリーミングオーディオやビデオなどに使用される理由は、TCPパケットが失われた場合、欠落したデータが正常に再送信および受信されるまで、受信アプリケーションは何も表示しないためです。多くのストリーミングアプリケーションでは、遅れて到着するデータは役に立たないため、とにかく役に立たない再送信を待っている間、すべてを保持しても意味がありません。
スーパーキャット2013

TCPはブロードキャストをサポートしないため、DHCPにはUDPが使用されます。DHCPは、DHCPサーバーのIPアドレスを取得するために、ブロードキャストの使用に依存しています。stackoverflow.com/questions/21266008/…を
ScottSmudger 2017年

41

TCPは、2つの場所の間のパッケージの専用のスケジュールされたUPS / FedExピックアップ/ドロップオフと考えることができますが、UDPはポストカードをメールボックスに投げることに相当します。

UPS / FedExは、あなたが郵送するパッケージが確実に到着し、時間通りに到着するように、最も困難なことを行います。ポストカードがあれば、到着しても幸運で、到着が遅れたり遅れたりする可能性があります(休暇から家に帰ってから何回ポストカードをもらったことがありますか?)

TCPは、できる限り保証された配信プロトコルに近いのに対し、UDPは単なる「ベストエフォート」です。


1
まともな答え。TCPストリームでは、パケットは宛先によって確認され、破損したパケット/欠落したパケットは送信者によって再送信されることを付け加えておきます。UDPではパケットが送信され、宛先はそれらを任意の順序で受信し、受信を確認しません。
Erik Nedwidek、

2
誤解を招く類推のビットはおそらくQoSに適しています
MattH

11
私はアナロジーがとても好きですが、この答えがわずかに誤って伝えていることの1つは速度です。実際にはUDPの方がオーバーヘッドが少ないため、TCPの方が速いように聞こえます。
iliketocode 2015年

22

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を使用すると、遅延中に取得されるのは一時停止だけであり、その後、オーディオは常に一時停止した分だけ遅延します。双方向の電話スタイルの会話の場合、これは受け入れられません。


17

違いの1つは、簡単に言うと

UDP:メッセージを送信し、宛先に到達しても振り返らない、コネクションレス型プロトコル
TCP:メッセージを送信し、宛先に到達することを保証する、コネクション型プロトコル


9

TCPは実際のデータ送信が行われる前に接続を確立しますが、UDPは確立しません。このようにして、UDPはより高速な配信を提供できます。したがって、DNS、タイムサーバーアクセスなどのアプリケーションはUDPを使用します。

UDPとは異なり、TCPは輻輳制御を使用します。ネットワーク負荷に応答します。UDPとは異なり、ネットワークの輻輳が差し迫っていると、速度が低下します。したがって、一定のスループットを優先するマルチメディアのようなアプリケーションは、UDPに向いているかもしれません。

さらに、UDPは信頼性が低く、パケット損失に反応しません。したがって、マルチメディア伝送などの損失に敏感なアプリケーションはUDPを優先します。ただし、TCPは信頼できるプロトコルであるため、Web転送、電子メール、ファイルのダウンロードなどの信頼性を必要とするアプリケーションはTCPを優先します。

さらに、今日のインターネットでは、ミドルボックスのため、UDPはTCPほど歓迎されていません。UDP接続がブロックされていると想定されている場合、skypeなどの一部のアプリケーションはTCPに落ちます。



2

TcpプロトコルとUdpプロトコルの短くて単純な違い:

1)Tcp-伝送制御プロトコルおよびUdp-ユーザーデータグラムプロトコル。

2)Tcpは信頼できるプロトコルですが、Udpは信頼できないプロトコルです。

3)Tcpはストリーム指向であり、Udpはメッセージ指向プロトコルです。

4)TcpはUdpより遅いです。


1

このスレッドにぶつかって、このように表現してみましょう。

TCP

3ウェイハンドシェイク

ボブ:ねえエイミーは、私はあなたに秘密お伝えしたいと思い
エイミー:先に行く、[OK]を、私は準備ができ
ボブ:OK

コミュニケーション
ボブ:「私」、これは最初の手紙です。
エイミー:最初の手紙を受け取った、2番目の手紙を送ってください
ボブ:「」、これは2番目の手紙です
エイミー:2番目の手紙を受け取った、3番目の手紙を送ってください
ボブ:「L 」、これは3番目の文字である
しばらくする
:ボブL 『この第三の手紙』
エイミー:受信した第3の手紙、私の第四手紙送ってください
ボブ:『O』、この規定の手紙
エイミー:...
... ...

4ウェイハンドシェイク
ボブ:私の秘密が露わになりました、今、あなたは私の心を知っています。
エイミー:はい。私は何も言うことはありません。
Bob:はい。

UDP

ボブ:I LOVE U
エイミーが受け取った: OVI LE

TCPは、UDPよりも信頼性が高く、メッセージの順序も保証されています。そのため、UDPの方が軽量で効率的です。


0

類推による簡単な説明

TCPはこんな感じです。

火星にペンフレンドがいると想像してみてください(インターネットの前の時代に書面で手紙を送っていました)。

あなたはあなたのペンフレンドに非常に効果的な人々の7つの習慣を送る必要があります。それで、あなたはそれを7つの別々の手紙で送ることに決めます:

  1. レター1-積極的に
  2. 手紙2-念頭に置いて終わりから始めます...

など文字7-のこぎりを研ぐ

要件:

ペンフレンドがすべての手紙を順番どおりに受け取り完全に届くようにする必要があります。ペンペイがレター1の前にレター7を受け取った場合、それはダメです。あなたのペンフレンドが文字3以外のすべての文字を受け取った場合-それもダメです。

要件が満たされていることを確認する方法は次のとおりです。

  • 確認書:ペンフレンドが「私は手紙1を受け取りました」と言う確認書を送信します。そうすれば、ペンフレンドが受け取ったことを知ることができます。手紙が届かない、または順番が狂っている場合は、いったん停止し、戻ってその手紙とその後のすべての手紙を再送する必要があります。
  • フロー制御:クリスマスの頃には、ペンパルが大量のメールを受信することがわかっているため、ペンパルを圧倒したくないので、速度が低下します。(あなたのペンフレンドはあなたにペンパルのメールボックスにある未読メッセージの数について絶え間ない更新をあなたに送ります-あなたのペンパルがそれがいっぱいであるのでインボックスが爆発しようとしていると言うなら、あなたはあなたの手紙を送るのを遅くします-あなたのペンフレンドのためそれらを読むことができなくなります。
  • 完璧な到着。手紙を郵送しているときに、破れたり、カタツムリが半分を食べてしまうことがあります。すべての手紙が完璧な状態で届いたことをどうやって知っていますか?まああなたのペンフレンドはあなたが彼らが完全な手紙を持っているかどうか、そしてそれがあなたが送った手紙そのものだったかどうかをチェックできるメカニズムをあなたに与えます。(例えば、単語数などを介して)。基本的な類推。

0

TLDR;

  • TCP-ストリーム指向、接続が必要、信頼性が高く、遅い
  • UDP-メッセージ指向、コネクションレス、信頼性が低く、高速

始める前に、何かの欠点はすべて、その利点の続きであることを覚えておいてください。万能薬ではなく、仕事に適したツールしかありません。TCP / UDPは何十年もの間、そして理由のために共存しています。

TCP

非常に信頼できるように設計されており、非常にうまく機能します。信頼性の低いIPプロトコルを介した信頼性の高い転送を実現するという難しいタスクを実行するため、非常に複雑です。

すべてのTCPの複雑なロジックがネットワークスタックにカプセル化されるため、アプリケーションレイヤーで多くの面倒でエラーが発生しやすい低レベルの作業を行う必要がありません。

TCPを介してデータを送信する場合、バイトのストリームを送信側のソケットに書き込み、そこでパケットに分解され、スタックを通過して、ワイヤーを介して送信されます。レシーバー側では、パケットは再びバイトの連続ストリームに再構成されます。

この優れた抽象化を維持するには、複雑さとパフォーマンスの面でコストがかかります。バイトストリームの最初のパケットが失われた場合、受信側は後続のパケットの処理を遅らせます。

さらに、信頼性を高めるために、TCPはこれを実装しています。

  • TCPは確立された接続を必要とし、これには3回のラウンドトリップ(「悪名高い」3方向ハンドシェイク)が必要です。
  • TCPには、接続を確立した後、送信速度を徐々に上げて受信者がデータに追いつくことができるようにする「スロースタート」と呼ばれる機能があります。
  • 送信されたすべてのパケットを確認する必要があります。確認しないと、送信者がデータの送信を停止します
  • そしてどんどんどんどん...

TCPは遅延が予測可能であり、パケット損失がそれほど一般的ではない有線ネットワーク用に設計されている一方で、これはすべて低速の信頼性の低いワイヤレスネットワークでは悪化します。さらに、すでに多くの人が述べたように、TCPがまったく機能しない場合があります(DHCP)。ただし、関連する場合、TCPは依然として非常にうまく機能します。

メールの類推を使用すると、TCPセッションは、秘書がそれをメールに分割し、くだらないメールサービスを介してパブリッシャーに送信するという話をするのに似ています。反対側では、別の秘書がメールを1つのテキストに組み立てます。一部のメールは失われ、一部は破損するため、信頼性の高い配信を行うには非常に複雑な手順が必要であり、10ページのストーリーがパブリッシャーに届くまでに長い時間がかかる場合があります。

UDP

一方、UDPはメッセージ指向であるため、受信側はメッセージ(パケット)をソケットに書き込んでから、分割や組み立てを行わずに、そのまま受信側に送信します。

TCPと比較すると、その仕様は非常に単純です。基本的に、受信者が破損を検出できるように、チェックサムをパケットに追加するだけです。それ以外はすべて、ソフトウェア開発者であるあなたが実装する必要があります。大量のTCP仕様を読んで、その一部を再実装することを考えてみてください。

一部の人々はこのようにして、HTTP / 3がQUIC(UDPベースのプロトコル)を使用するまで、かなりまともな結果を得ました。ただし、これは例外です。UDPの一般的なアプリケーションは、Skype、Zoom、Googleハングアウトなどのオーディオ/ビデオストリーミングおよび会議アプリケーションで、TCPによって導入される遅延と比較して、パケットの損失はそれほど重要ではありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.