TCPとUDPの類似点と相違点
TCP/IP
モデルのトランスポート層には、UDP
ユーザーデータグラムプロトコルとTCP
伝送制御プロトコルの2つの異なるプロトコルがあります。
類似点
TCP
そして、UDP
プロトコルは、トランスポート層で実行されていますTCP
そして、UDP
通信がオープンポートに必要
違い
TCP
TCP
全二重通信を提供するコネクション型プロトコルであり、データを送信する前にリンクを確立する必要があり、データ送信の負荷が比較的大きい。TCP
フロー制御や輻輳制御などのサービスを使用して、信頼性の高い通信を確保するために、信頼性の高い配信サービスを提供します。TCP
ヘッダーの最小20
バイトと最大60
バイトには、送信元ポート、宛先ポート、シリアル番号、確認番号、データオフセット、制御フラグ、ウィンドウ、チェックサム、緊急ポインタ、オプション、その他の情報が含まれます。TCP
1対1の通信のみ。TCP
バイトストリーム通信用。TCP
データ送信の順序を保証するにはTCP
、接続のデータストリームの各バイトのシーケンス番号をコーディングして、送信順序を決定します。TCP
チェックサム、確認応答、シーケンス番号、タイムアウト再送信、接続管理、フロー制御、輻輳制御などの機能を提供します。TCP
ファイル転送などの信頼性の高い伝送を必要とするアプリケーションに適しています
UDP
UDP
コネクションレスです。つまり、データを送信する前に接続を確立する必要がなく、データ送信の負荷は比較的小さいです。UDP
確実な配信を保証せず、フロー制御と輻輳制御を使用しないベストエフォート配信を使用します。UDP
最初の8
バイトには、送信元ポート、宛先ポート、長さ、チェックサム情報が含まれています。UDP
ユニキャスト、マルチキャスト、ブロードキャストの機能があり、1対1、1対多、多対多、および多対1のデータ転送方法をサポートしています。UDP
これはメッセージ通信を指向しており、アプリケーション層から渡されたメッセージはマージも分割もされませんが、これらのメッセージの境界は保持され、ヘッダーが追加された後にIP
層に配信されます。UDP
データ送信の順序は保証されていません。アプリケーション層プログラムは、順序を制御するためにデータセグメントにシーケンス番号を追加する必要があります。UDP
のみでのIP
エラー検出機能その少し余分な機能やポートの機能を超えるデータグラムサービス。UDP
インターネット電話、ビデオ会議、ライブブロードキャストなどのリアルタイムアプリケーションに適しています。
関連する問題
UDPが信頼性の高い伝送を実現
トランスポート層は、データの信頼できる伝送を保証することはできず、アプリケーション層を介してのみ達成できます。実装方法は、TCP
信頼できる伝送の方法を参照できますが、実装は伝送層になく、主に確認メカニズムと再伝送メカニズムを実装することによって、実装がアプリケーション層に転送されます。 、確認ウィンドウ機構が、ある信頼性の高い伝送を達成するためにRUDP
、RTP
、UDT
オープンソースの利用のようなUDP
信頼できるデータ伝送を達成するために、加えて、そこに組み込まれているTCP
信頼性とUDP
速度のトレードオフKCP
プロトコル。
TCPの短い接続と長い接続の違い
ショート接続:Client
するServer
メッセージ、送信Server
応答をClient
した後、完成したら書き、両側今回はどんな開始できるclose
操作を、これらは一般的にClient
開始する最初のclose
操作を。短い接続は、通常、Client/Server
その間の読み取り操作と書き込み操作のみを渡します。ショートリンクの管理は比較的簡単です。既存の接続を確立することは便利な接続であり、追加の制御方法は必要ありません。ただし、顧客の要求が頻繁である場合、TCP
操作の確立と終了に時間と帯域幅を浪費します。
ロング接続:Client
へServer
の書き込み、およびそれらの間の接続が完了した後は、積極的に、後続の読み取りおよび書き込み操作は、接続を省略することができ、より長い接続を使用していきます、閉じられていないTCP
、操作およびクローズを確立するため、廃棄物の削減節約を時間は、リソースを頻繁に要求する顧客にとっては、長い接続に適していますが、クライアントが接続するにつれて、Server
負荷はますます大きくなります。現時点では、長時間、未読をオフにするなど、負荷を減らすためのいくつかの戦略を採用する必要があります。リンクLRU
アルゴリズムの記述、クライアントリンクの数の制限など
TCPスティッキパケット展開ソリューション
これTCP
はバイトストリーム指向であり、上位層のビジネスデータを理解できないため、データパケットが下位層で分割および再編成されないという保証はありません。この問題は、上位層のアプリケーションプロトコルスタックの設計によってのみ解決できます。
- メッセージの固定長:送信側は各データパケットを固定長にカプセル化します(十分でない場合は
0
埋めることができます)。これにより、受信側が受信バッファーで固定長のデータを読み取るたびに、各データパケットが自然に分割されます。来て - メッセージ境界を設定します。サーバーは、メッセージ境界に従ってメッセージのコンテンツをネットワークストリームから分離し、
FTP
プロトコルなどのセグメンテーションのためにパケットの最後にキャリッジリターンとラインフィード文字を追加します。 - メッセージは、メッセージヘッダーとメッセージ本文に分かれています。メッセージヘッダーには、メッセージの全長(またはメッセージ本文の長さ)を示すフィールドが含まれています。
参考資料
https://zhuanlan.zhihu.com/p/108822858
https://www.cnblogs.com/liangyc/p/11628148.html
https://blog.csdn.net/m_xiaoer/article/details/72885418
https://blog.csdn.net/pangyemeng/article/details/50387078
https://blog.csdn.net/quiet_girl/article/details/50599777
https://blog.csdn.net/liuchenxia8/article/details/80428157
https://blog.csdn.net/qq_40732350/article/details/90902396
https://www.cnblogs.com/fundebug/p/differences-of-tcp-and-udp.html