理論[8] TCP&UDPをしっかり理解していますか?

1。概要

TCP プロトコルと UDP プロトコルについては誰もが聞いたことがあるはずです。TCP プロトコルと UDP プロトコルはどちらもトランスポート層で動作し、その目的はアプリケーション間でデータを送信することです。Web の閲覧、電子メールのチェック、電話通信など、私たちが一般的に使用するネットワーク通信はすべて、これら 2 つのプロトコルを通じてデータを送信します。
ここに画像の説明を挿入します

2 TCPとUDPの違い

TCP プロトコルと UDP プロトコルの主な違いは何ですか? 下の写真を見れば分かります。
ここに画像の説明を挿入します

TCP (Transmission Control Protocol) は、コネクション指向で信頼性の高い、バイト ストリーム ベースのトランスポート層通信プロトコルです。信頼性は TCP の最大の特徴であり、主にデータ損失がないこと、エラーがないこと、順序が乱れていないこと、重複した到着がないことに反映されます。上に示したように、TCP は「子」(データ パケット) を受信者に非常に安全に送信できます。

UDP (User Datagram Protocol) は、コネクションレスで信頼性が低く、高速伝送のトランスポート層通信プロトコルです。UDP の最大の特徴は高速伝送です。これは主に、データを送信する前に事前に接続を確立する必要がなく、より効率的にデータを伝送できるという事実に反映されていますが、信頼性は保証されません。上の図に示すように、UDP は、受信者がそれを受信するかどうかに関係なく、「子」 (データ パケット) の送信のみを担当します。

TCPプロトコルとUDPプロトコルの違いを直感的に感じたら、TCPプロトコルがどのように動作するかを見てみましょう~

3 TCP はどのように機能しますか?

TCP 通信の接続管理メカニズム (信頼性の高いメカニズム) は、接続を確立するための 3 ウェイ ハンドシェイクと、切断するための 4 ウェイ ウェーブに要約されます。

3.1 <接続を確立するための 3 ウェイ ハンドシェイク>

TCP は接続指向のプロトコルであるため、送信されるすべてのリクエストには相手からの確認が必要です。TCP クライアントと TCP サーバーは、通信して接続を確立する前に、3 ウェイ ハンドシェイクを完了する必要があります。
ここに画像の説明を挿入します
(1) 最初の握手

目的: これは接続の確立を要求するデータ パケットであり、クライアントは最初に同期データ パケットをサーバーに送信します。

データ パケットの TCP ヘッダーの内容:
同期 SYN=1 (クライアントが接続の確立を要求)
シーケンス番号 seq=x (クライアントによって送信されたデータの最初のバイトのシーケンス番号)

(2) 2回目の握手

目的: サーバーは、クライアントから送信された最初のデータ パケットを受信すると、それが接続をアクティブに確立するデータ パケットであると判断します。サーバーが接続に同意すると、サーバーはデータ パケットを送信して応答します。

データ パケットの TCP ヘッダーの内容:
同期 SYN=1 (サーバーが接続を確立する)
確認マーク ACK=1 (サーバーが接続に同意する)
シーケンス番号 seq=y (送信されるデータの最初のバイトのシーケンス番号)確認
番号 ack=x+1 (クライアントが送信した x バイトのデータを受信しました。次回は x+1 バイト目から送信する必要があります)

(3) 3回目の握手

目的: サーバーから確認を受信した後、クライアントはデータ パケットをサーバーに送信します。

データ パケットの TCP ヘッダーの内容:

同期 SYN=1 (双方が接続確立に同意)
確認マーク ACK=1 (サーバーから受信した確認パケット)
シーケンス番号 seq=x+1 (送信パケットはデータの x+1 バイト目) 確認
番号ack =y+1 (サーバーから送信されたデータを y バイト受信し、次回はデータの y+1 バイト目から送信を開始するようにサーバーに指示します)

ヒント:
クライアントとサーバー間で送信される TCP データは、互いの seq 値と ack 値に基づいて、双方のシーケンス番号 seq と確認番号 ack 値が計算され、TCP データの連続性が保証されます。伝染 ; 感染。一方の当事者が送信した TCP データが失われると、「ハンドシェイク」は続行できなくなり、「3 ウェイ ハンドシェイク」は確実に正常に完了します。

3.2 <4回手を振ると切断>

データ送信が完了すると、TCP クライアントと TCP サーバーは 4 つのセッションを経て切断される必要があり、このプロセスを 4 ウェーブと呼びます。
ここに画像の説明を挿入します
(1)初めて手を振る

目的: クライアントは接続解放要求パケットをサーバーに送信し、データの送信を停止します。

接続解放パケットの TCP ヘッダー内:

FIN=1 を終了します (クライアントはクライアントとサーバー間の TCP 接続を積極的に解放する必要があります)

シリアル番号 seq=x (x はクライアントが指定します。その後、サーバーからの確認を待ちます)

(2) 二度目の手を振る

目的: 接続解放メッセージを受信した後、サーバーは確認メッセージをクライアントに送信します。したがって、クライアントからサーバー方向の接続は解放され、TCP 接続は半クローズ状態になります。クライアントがサーバーにデータを送信できなくなるため、ハーフクローズされます。サーバーが引き続きデータをクライアントに送信して受信できるため、ハーフオープンになります。

サーバーからクライアントに送信される確認メッセージの TCP ヘッダーでは、次のようになります。

確認マーク ACK=1 (クライアントが送信したデータパケットを受信し、クライアントが接続を解放することに同意した)

確認番号 ack=x+1 (クライアント メッセージの受信に基づいて、メッセージのこのセグメントの確認番号 ack の値として、そのシーケンス番号 seq 値に 1 を加算します)

シリアル番号 seq=y (y はサーバーによって指定されます。その後、クライアントからの確認を待ちます)

(3) 3度目に手を振る

目的: サーバーがクライアントへのデータ送信を停止した場合は、接続を解放し、確認メッセージをクライアントに送信します。

確認メッセージの TCP ヘッダー内:

FIN=1 を終了します (サーバーはサーバーからクライアントへの TCP 接続を解放し、クライアントにデータを送信しなくなります)

確認マーク ACK=1 (サーバーからクライアントへのデータ送信完了)

確認番号 ack=x+1 (クライアント メッセージの受信に基づいて、メッセージのこのセグメントの確認番号 ack の値として、そのシーケンス番号 seq 値に 1 を加算します)

シリアル番号 seq=z (z はサーバーによって指定されます。その後、クライアントからの確認を待ちます)

(4) 4回目に手を振る

目的: サーバーから接続解放メッセージ セグメントを受信した後、クライアントは確認メッセージをサーバーに送信します。

確認メッセージの TCP ヘッダー内:

終了 FIN = 1 (クライアントとサーバーの切断)

確認マーク ACK=1 (サーバーから確認メッセージを受信し、サーバーと接続の解放に同意)

確認番号 ack=z+1 (サーバーメッセージの受信に基づいて、メッセージのこのセグメントの確認番号 ack の値として、そのシーケンス番号 seq 値に 1 を加算します)

シーケンス番号 seq=x+1 (サーバーメッセージの受信に基づいて、その確認番号をメッセージのこのセグメントのシーケンス番号の値として使用します)

TCPを理解した後、UDPがどのように機能するかを見てみましょう~

4 UDP はどのように機能しますか?

UDP プロトコルはコネクションレス型です。つまり、データを送信する前に接続を確立する必要はありません (TCP プロトコルの複雑な 3 ウェイ ハンドシェイクや 4 ウェイ ウェーブ プロセスは必要ありません)。データの送信では、単にデータ パケットをカプセル化して送信します。パッケージ間のステータス関係はありません。UDP プロトコルは、基本的に IP プロトコルと上位層プロトコルの間のインターフェイスです。UDP プロトコルは、IP 層によって提供されるサービスを使用して、アプリケーション層によって取得されたデータを、あるホスト上のアプリケーション プロセスから別のホスト上のアプリケーション プロセスに転送します。ホスト。

たとえば、トランスポート層が IP 層から UDP データ メッセージを受信すると、次の図に示すように、UDP データ メッセージ ヘッダーの宛先ポートに従って、対応するポートを介してその UDP データ メッセージをアプリケーション プロセスに渡します。
ここに画像の説明を挿入します
上の図に示すように、アプリケーション プロセス 4 とポート 2 では、受信 UDP が受信メッセージ内の宛先ポート番号が正しくない (つまり、そのポート番号に対応するアプリケーション プロセスが存在しない) と判断した場合、メッセージは破棄されます。 ICMP によって送信され、送信者に「ポートに到達できません」というエラー メッセージが送信されます。

ヒント ICMP (インターネット制御メッセージ
プロトコル) は、TCP/IP プロトコル スイートのサブプロトコルであり、IP ホストとルーターの間で制御メッセージを送信するために使用されます。制御メッセージとは、ネットワーク接続、ホストに到達可能かどうか、ルートが使用可能かどうかなど、ネットワーク自体に関するメッセージを指します。

5 まとめると

データ送信は簡単そうに見えますが、実はとても賢いんです~

TCP と UDP はプログラムを提供しますが、プログラムも人間と同じで、相互に通信したり、同時に会話したりできます。TCP は相互間のフランクなコミュニケーションを意味し、メッセージが受信されたかどうか、受信した情報が一貫しているかどうかについてタイムリーなフィードバックを提供できます。
ここに画像の説明を挿入します

利点: 信頼性が高い。
欠点: 転送速度が遅い。
該当するシナリオ: 通信ソフトウェアのアカウント ログイン、支払い、およびその他の関連機能では、信頼性の高い TCP が使用されます。

UDP はとにかく話すことです。聞いているかどうか、フィードバックがあるかどうかは関係なく、私は話し続けます。
ここに画像の説明を挿入します

利点: 転送速度が速い。
短所: 信頼性が低い。
適用可能なシナリオ: QQ、WeChat、およびその他のインスタント メッセージング ソフトウェアは通常、ポイントツーポイント通信や高速伝送による音声通話やビデオ通話に UDP を使用します。

つまり、TCP と UDP にはそれぞれ独自の長所と短所があり、すべては実際のニーズによって異なります。

記事転載元

おすすめ

転載: blog.csdn.net/zhi_Alanwu/article/details/131243276