udpプロトコル:udpはtcpに比べてどこが速いですか?

6118 ワード

TCPプロトコルは、信頼性をサポートするプロトコルです.UDPプロトコルは、信頼性をサポートしないプロトコルです.
チェックサム(Checksum)最も簡単なチェックサムアルゴリズム:縦冗長チェック
UDPは信頼性をサポートしていませんが、チェックサム(Checksum)のような最も基本的なデータチェックはサポートされています.
信頼性がサポートされていないということは、信頼性を完全に放棄するという意味ではありません.TCPとUDPは、基本的なチェックサムアルゴリズムをサポートします.
TCPとUDPについては、両方ともチェックサムアルゴリズムが実現されているが、両者の違いは、TCPがチェックが合わない、すなわちデータが破損していることを発見すると、このパッケージを自発的に失い、再送信することである.UDPは何も処理しないので、UDPはそれを使用するプログラマーに処理の権利を渡します.
最も簡単なチェックサムアルゴリズム:縦冗長チェック
3回の握手の原因「失効した接続要求メッセージセグメント」の発生は、clientが発行した最初の接続要求メッセージセグメントが失われず、あるネットワークノードが長時間滞留し、接続が解放された後のある時間に遅れてserverに到着する場合である.もともとこれはとっくに失効した新聞段だった.しかしserverは、この失効した接続要求メッセージセグメントを受信すると、clientが再び発行した新しい接続要求と誤認する.そこでクライアントに確認メッセージセグメントを発行し,接続の確立に同意した.「3回の握手」を採用しないと仮定すると,serverが確認を出す限り,新しい接続が確立される.クライアントは現在、接続の確立を要求していないため、サーバの確認を無視したり、サーバにデータを送信したりしません.しかしserverは新しい輸送接続が確立されたと考え、clientからのデータを待っていた.これでserverの多くの資源が無駄になった.「3回の握手」を採用することで、上記の現象を防ぐことができます.例えばさっきのような場合、clientはserverの確認に確認を発行しません.serverは確認が届かないため、clientが接続を要求していないことを知っています.」
tcpはなぜ信頼性TCPを有する信頼性の高い接続がseq(sequence numbersシーケンス番号)によって達成されるのか.TCP接続で送信される各パケットには、sequence numberがあります.各パッケージにはシリアル番号があるので、これらのパッケージが受信されていることが確認されます.確認メカニズムは累積されるので、sequence number Xの確認は、Xシーケンス番号以前(Xを含まない)パケットが確認されて受信されたことを意味する.
TCPプロトコルは、特定の接続(両端socketのように)が繰り返し使用されることを制限しない.
そこで、この接続が突然切断されて再接続された後、TCPは以前の古いリンクで再送信されたパケットをどのように認識しますか?これには、ユニークなISN(初期シーケンス番号)メカニズムが必要です.
新しい接続が確立されると、初期シーケンス番号(initial sequence number ISN)ジェネレータは、新しい32ビットのISNを生成します.
このジェネレータは32ビット長のクロックで、差は4µs以下で1回成長するので、ISNは約4.55時間に1回循環します.
一方,1セグメントはネットワークにおいて最大セグメント寿命(Maximum Segment Lifetime(MSL),デフォルトでは2分)よりも長くなく,MSLは4.55時間よりも短いので,ISNが唯一であると考えられる.
3回の握手(A three way handshake)は必須である.sequence numbers(シーケンス番号)はネットワーク全体のグローバルクロックにバインドされていないため(すべて1つのクロックを統一的に使用すれば、このパケットが遅延しているかどうかを決定することができる)、TCPsはISN(初期シーケンス番号)を選択するための異なるメカニズムを有する可能性がある.
一つのseqが来て、今覚えているseqとは違って、私はどうして彼が前の遅延なのか、それとも上の遅延なのか知っていますか.
TCP伝達情報は米国と中国が貨物船で貨物を伝達すると理解できるが、1隻の汽船が通過できないため、貨物は1隻の汽船に分けて出荷しなければならない.そのため、到着後に元の貨物に戻すために、その貨物が何番目であるかを識別するシーケンス番号が必要です.同じ航路(すなわちtcp接続)では、複数の貨物が送信される可能性がある(多重tcp接続).出荷時、双方は相手にこのシリアル番号がどこから始まったのか(init seq)を通知する必要があります.そうすれば、正しい貨物かどうか、そして完全な貨物につなぎ合わせることができます.
TCP A                                                TCP B
​
  1.  CLOSED                                               LISTEN
​
  2.  SYN-SENT    -->                --> SYN-RECEIVED
​
  3.  ESTABLISHED           --> ESTABLISHED
​
  5.  ESTABLISHED -->  --> ESTABLISHED
​
          Basic 3-Way Handshake for Connection Synchronization
​
                                Figure 7.

2行目では、AはSEQ 100を送信し、フラグビットはSYNである.3行目、BはACK 101とSEQ 300を返送し、フラグビットはSYNとACK(2つのプロセスが統合された)である.なお、ACKが101であることは、Bが101シーケンス番号の先頭のデータセグメントを受信することを望むことを意味する.4行目、Aは空のデータを返し、SEQ 101、ACK 301、フラグビットはACKである.これで、双方の開始SEQ(すなわちISN)番号100と300が受信されたことが確認された.5行目は、パケットの正式な送信を開始し、ACKは依然として4行目の301であることに注意してください.ACKを必要とするSYNがないからです(4行目はACKが完了しています).
三次握手の原則設計は,古い多重リンクの初期化による問題を防止することであり,この問題を解決するためにresetという特別な制御信号を設計して処理した.
  :  
  :https://www.zhihu.com/question/24853633/answer/573627478
  :  
        。             ,          。

TCP A                                                TCP B
​
  1.  CLOSED                                               LISTEN
​
  2.  SYN-SENT    -->                ...
​
  3.  (duplicate) ...                --> SYN-RECEIVED
​
  4.  SYN-SENT                      --> LISTEN
  
​
  6.              ...                --> SYN-RECEIVED
​
  7.  SYN-SENT             --> ESTABLISHED
​
                    Recovery from Old Duplicate SYN

3では、古い繰り返しのSYNがBに到着します.4の中で、Bはそれぞれ古いかどうかを出さないで、様子は正常にかばんに戻ります.5では、AはBが返すACKが正しくないことを検出したので、RST(reset)6に戻り、BはRST(reset)信号を受信してLISTEN状態となる.7では、新たに正常に接続されたSYNが到着し、3回の握手が正常に行われた.これは簡略化された場合であるが,TCPが古いリンクを多重化したパケット到着をどのように処理しているかが分かる.
要求/応答/接続モデルTCPは、要求、応答および接続のモデルを実装し、UDPはこのモデルを実装しない.
接続の目的は接続の双方に暗黙の了解を達成させ、資源を傾け、相手に最も速い応答を与えることである.
接続も良いプログラミングモデルです.接続が不安定な場合は、接続を中断してから再接続できます.このモードは2つのアプリケーション間のデータ伝送の信頼性を極めて高めた.
パケットソート信頼性には、データが秩序正しく送信され、無秩序に伝送され、秩序正しく結合されることが最も基本的な要件がある.TCPプロトコルはこの信頼性を保証し,UDPは保証しない.
TCPではTCP Segmentと呼ばれます.UDPではUDPデータグラムと呼ばれます.Datagram単語の意味は、データ転送の最小単位です.目的地に到着した後、すべてのデータブロックは乱順に到着する可能性があるが、信頼性を保証するために、乱順に到着したデータは再ソートされ、元のデータの順序に復元される必要がある.
TCPは,スライドウィンドウ,高速再送などのアルゴリズムを用いて,データの順序を保証した.UDPは、データグラムごとにシーケンス番号を付けただけで、アプリケーションのデータのソートを支援していません.これもTCPとUDPが信頼性を保証する上で非常に重要な違いです.
まず、クライアントとサーバ間の片道平均遅延が30ミリ秒の場合、クライアントPingサービス側は何ミリ秒かかりますか?
【分析】この問題の最も核心的な点はPingサービスがTCPで実現すべきかUDPで実現すべきかを考えることです.Pingは接続を維持する必要がありますか?答えは必要ありません.Pingサーバのときにデータを送信すればいいので、わざわざ接続を確立する必要はありません.
もう一度考えてみてください.Pingは信頼性を保証する必要はありませんか.答えは依然として必要ありません.もしパケット損失が発生したら、Pingはパケット損失率に計上すればいいです.だからこの角度から見ると、PingはUDPを使えばいい.
だからこの面接問題はRound Tripが一番早くて60ミリ秒ぐらいかかるはずです.往復の時間をRound Trip時間と呼ぶことも多い.
上記の例を分析することで、TCPとUDPの使用シーンが異なることをお伝えしたいと思います.TCPは信頼性が必要で、接続が必要なシーンに適しています.UDPは十分に簡単なので、データを簡単に加工処理するだけで、下位層のネットワーク層(IPプロトコル)を呼び出してデータを転送します.したがって、UDPは信頼性が要求されないシーンに適しています.
他にもカスタマイズが必要なシーンが多く、UDPが必要です.HTTPプロトコルを例にとると,初期のHTTPプロトコルの設計ではTCPプロトコルが選択されていた.HTTPの設計では,要求も返信も信頼性が必要であるからである.しかしHTTPプロトコルの発展に伴い,HTTP 3.0になるとUDPによる伝送が開始される.これは,HTTP 3.0プロトコルでは,UDP上にもう一つのQUICプロトコルが信頼性を担当しているためである.UDPは十分簡単で、独自のプロトコルを構築するのに便利です.
ファイルアップロードはTCPとUDPのどちらを使うべきか、もう一つ考えてみてください.一見TCPプロトコルに違いない.ファイルアップロードにはもちろん信頼性が必要であり、データの破損を防ぐためだ.しかし、UDP上でファイルをアップロードする信頼性プロトコルを実現したい場合は、TCPプロトコルを超えるパフォーマンスが得られます.ファイルアップロードのニーズを解決するだけで、TCPプロトコルのように汎用的なニーズを解決する必要はありません.
だから今まで、いったいどんな状況がTCPを使うべきで、どんな状況がUDPを使うのですか?この問題の境界は確かに曖昧化している.全体的に信頼性が必要であり,ネットワークプロトコルの開発にあまり工夫を凝らしてTCPプロトコルを使用することは望ましくない.
では、この勉強を通じて、UDPがTCPよりも速いのはどこですか.
UDPを使用してデータを転送し、接続を確立することなく、データを直接失うことができます.受信者については、傍受していますか?受け取りますか?それが受け手のことです.UDPはデータの信頼性さえ考慮しない.送信双方がUDPに基づいて開発信頼性プロトコルをカスタマイズするかどうかについては、開発者のことです.だからUDPはどこだ?UDPは十分簡単です.UDPは計算性能に対してもネットワークに対してもTCPよりも少ない.