ソケット(ストリーム)とソケット(データグラム)の違いは何ですか?なぜ他のものを使うの?ネットワークプログラミングにおけるストリームとデータグラムの違いは何ですか?
答えて
私はずっと前に、2つの違いを説明するための大きなアナロジーを読みました。私はそれを読んだところを覚えていないので、残念ながらアイデアの著者には信用できませんが、とにかく自分の知識をコアの類推に加えました。
ストリームソケットは通話のようなものです。一方の側がコールを発信し、他方の回答はお互いに挨拶して(TCPのSYN/ACK)、情報を交換します。完了したら、さよならを言う(TCPのFIN/ACK)。片面に別れが聞こえない場合、これは予期せぬ出来事なので、相手は通常相手を呼ぶでしょう。通常、クライアントはサーバーに再接続します。あなたが送信したのとは異なる順序でデータが到着するという保証はありません。データが破損しないという合理的な保証があります。
データグラムソケットは、クラスにノートを渡すようなものです。ノートを渡している人のすぐ隣にいない場合を考えてみましょう。ノートは人から人へと移動します。それは目的地に到達しないかもしれないし、そこに到着するまでに変更されるかもしれない。同じ人に2つのメモを渡すと、ノートが教室を通るルートが同じではないかもしれないし、別のものと同じ速さでメモを渡すことができないため、意図しなかった順序で到着する可能性があります。
ストリームソケットを使用すると、情報を順番に並べてそのまま残しておくと重要です。ここではファイル転送プロトコルが良い例です。内容をランダムにシャッフルして破損したファイルをダウンロードしたくない!
ストリームのオーバーヘッドを高くしたくない場合(データグラムプロトコルが主にデータグラムプロトコルであるため、タイムリーな配信より重要度が低い(VoIPまたはゲームプロトコルと考える)サーバーが多数の要求に同時に迅速に応答できるようにするため)、またはデータがあて先に届いているかどうか気にしないときに役立ちます。
VoIP /ゲームケースを拡張するために、そのようなプロトコルには独自のデータ順序付けメカニズムが含まれています。しかし、1つのパケットが破損したり紛失したりした場合は、再送信要求を発行するためにストリームプロトコル(通常はTCP)を待つ必要はなく、迅速に回復する必要があります。 TCPは回復するまでに数分かかることがあり、ゲームやVoIPのようなリアルタイムプロトコルでは3秒でさえ受け入れられないかもしれません! UDPのようなデータグラムプロトコルを使用することで、失われたデータを無視するか、TCPより早く再要求するだけで、ソフトウェアはそのようなイベントから非常に迅速に回復することができます。
VoIPは単に失われたデータを無視するのに適した候補です。携帯電話の受信状態が悪いときに相手と話をするときのような短いギャップが聞こえるだけです。ゲームプロトコルはしばしばもう少し複雑ですが、通常、失われたデータを無視するか(後で受信したデータが失われたデータを置き換える場合)、失われたデータを再要求するか、完全な状態更新を要求するかのいずれかです。クライアントの状態がサーバーの状態と同期していることを確認します。
ストリームソケット:サーバとクライアントの間で
- 専用&ポイント・ツー・ポイントチャンネル。
- データ伝送にTCPプロトコルを使用します。
- 信頼性と無損失。
- 同様の順序で送受信されるデータ。
- 間違わ/失われたデータ
データグラムソケット回復するための長い時間:
- サーバとクライアントの間に専用の&ポイント・ツー・ポイントのチャネルを。
- データ伝送にUDPを使用します。
- 100%信頼できず、データが失われる可能性があります。
- データは/注文はSYNACKの詳細を含むため
- 1. Gradleのbuild.gradleにおける '' vs ''の違いは何ですか?
- 2. ファブリック1.0の例におけるファーストネットワークとベーシックネットワークの違いは何ですか?
- 3. Spring-SocialにおけるConnectControllerとProviderSigninControllerの違いは何ですか?
- 4. scikit-learnにおけるSVCとSVMの違いは何ですか?
- 5. C++ストリームのeof()、fail()、bad()、およびgood()の違いは何ですか?
- 6. P4V:PERFORCEストリームのマージ・ダウンとマージの違いは何ですか
- 7. AzureのActive Directoryにおけるプライシング層の主な違いは何ですか?
- 8. 3D幾何学表現におけるBrepと多角形メッシュの違いは何ですか?
- 9. リストの索引付けで[[]]と$の違いは何ですか?
- 10. AMDのAPP SDKと(AMD)ATIのストリーム技術の違いは何ですか?
- 11. ニューラルネットワークのコンテキストにおける投影レイヤーとは何ですか?
- 12. OpenCLのコンテキストにおけるワープとは何ですか?
- 13. 回帰におけるローカルとグローバルの基底関数の違いは何ですか?
- 14. 画像処理における画像分割と特徴抽出の違いは何ですか?
- 15. ファイル処理におけるios :: appとios :: noreplaceモードの違いは何ですか?
- 16. 機械学習における損失関数とRMSEの違いは何ですか?
- 17. ソフトウェアデザインアーキテクチャーにおける手順的結束と順次結束の違いは何ですか?
- 18. Qtデータグラム間違ったデータ
- 19. setOnItemClickListenerとonItemClickだけの違いは何ですか
- 20. kafkaストリームとmaprストリームの違いは、コーディングの観点からですか?
- 21. 仮想化におけるマシンイメージとインスタンスの違いは?
- 22. サービス指向アーキテクチャーにおけるサービスとアプリケーションの違いは?
- 23. CockroachDBのTEXT、CHAR、およびVARCHARの違いは何ですか?
- 24. SQLのNull、Zero、およびBlankの違いは何ですか?
- 25. JettyのResourceHandler、ServletContextHandler、およびWebAppContextの違いは何ですか?
- 26. DOCUMENT_NODE、DOCUMENT_TYPE_NODE、およびDOCUMENT_FRAGMENT_NODEの違いは何ですか?
- 27. sys.stdout.encoding、locale.getpreferredencoding()、およびsys.getdefaultencoding()の違いは何ですか?
- 28. インデックススキャン、テーブルスキャン、およびインデックスシークの違いは何ですか?
- 29. CIM_USBDevice、CIM_USBHub、およびWin32_USBHubの違いは何ですか?
- 30. window.onload = init();の違いは何ですか?およびwindow.onload = init;
単に優れた/間違ってデータを紛失回収気にしたりしないでください急速
この例、または非常によく似た例は、The Linux Programming Interfaceです。 2010年版には、これらの例が1155と1159ページに掲載されています。 – Josh