9.3.2.2 ネットワーク原理 (トランスポート層 TCP)

TCP の詳細については、RFC 標準ドキュメントを参照してください。

1. TCP の機能:

接続、信頼性の高い伝送、バイト ストリーム指向、全二重が存在します。

2. TCP データグラム:

1. ポート番号はトランスポート層の重要な概念です。

2. TCP のヘッダーは可変長 (UDP は 8 バイト固定) で、4 ビットのヘッダー長の中にサイズが存在し、長さの単位が 4 バイトであることを示すために 4 ビット (0 ~ 15) が使用されます。 TCPヘッダーの最大長は60バイト、最初の20バイトは固定、「オプション」部分は大小任意)

3.TCP コア機能:

1. 信頼性を確保する仕組み:

a) 確認応答(コア)

1) 各バイトにラベルを付けるには、最初のバイトに番号が付けられている限り、メッセージの長さと組み合わせて、各バイトの番号がこの時点で決定されます。

2) 確認シーケンス番号は、シーケンス番号以前のデータがすべて受信されたことを示します。

 

3) ACK: ACK が 0 の場合、通常のメッセージであることを意味します。このとき、確認シーケンス番号は無効です。ACK が 1 の場合、この時点では確認シーケンス番号は有効ですが、シーケンス番号と確認通番は関係ありません(通番はこのデータの番号であり、受信したデータに関する確認通番です)。

4) TCP ペイロードの長さは IP 層で知ることができます。TCP ペイロード = IP ペイロード - TCP ヘッダーです。 

b) タイムアウト再送:確認応答の重要な補足に相当します。

1) データを受信した後、データの重複を排除する必要があります (TCP のシリアル番号に基づいて)。

2) TCPはカーネル内でソケットオブジェクトごとに受信バッファと呼ばれるキューに相当するメモリ空間を確保し、受信データをバッファに入れるかどうかはシリアル番号(キュー先頭データ 前回のシリアル番号が読み込まれている必要があります 再送された場合は自動的に削除されます 最初に送信後の状況が発生した場合は、シリアル番号に従ってキューに並びます 最初の場合送信されたデータが遅い場合、ブロックされて待機されます。)。

3) 送信メッセージ自体が失われたり、応答メッセージが失われたりしても再送されます。

4) 複数回の再送信に失敗すると、TCP 接続がリセットされます。

RST が 1 の場合はリセット メッセージを意味します。 

c) 3 ウェイ ウェーブおよび 4 ウェイ ハンドシェイク (接続管理)

1) スリーウェイ ハンドシェイク:

2) スリーウェイ ハンドシェイクの目的: ネットワークに障害がないか、各ホストの送受信能力が正常であるかどうかを確認し、メッセージ ネゴシエーションを実行して、クライアントとサーバーが同じデータを送信できるようにします。パラメーター。

3) スリーウェイハンドシェイクはなぜ 3 回ですか?

ちょうど 3 回で、双方の送受信機能が正常であることを確認でき、そのような情報は双方に同期されるため、2 回は許可されません。ただし、2 回のハンドシェイクでも通信能力の正確性を確認できますが、サーバー側 このように検証できた情報は分かりません 4回も可能ですが必須ではありません 真ん中の2回は組み合わせても良いです 分解しないと効率が落ちます

4) 4 回手を振ります:

FIN: セグメントを終了します。 

  

5)四字ウェーブ、なぜ4回なのか、3回でいいのか?

3 回になる場合もあれば、4 回でなければならない場合もあり、中間の 2 回はマージされない場合があります。FIN はプログラム コードによってトリガーされ、制御されます。socket.close() メソッドを呼び出すか、プロセスの終了によってトリガーされます。 FIN.ACK はカーネルによって制御されるシステムであり、FIN を受信するとすぐに ACK が返されます。


6) 4 回振るときのデータ損失: 最初の 3 つのデータ損失は再送信されますが、最後の ACK 損失が発生するため、クライアントは最後の ACK が発生した後、その間のリソースを解放できませんが、2 MSL 時間 (1 MSL) 待機する必要があります。時間はネットワーク通信にかかる最大時間(1往復合計2回)です。

d) フロー制御:サーバーの処理能力に応じて、クライアントの送信速度(ウィンドウサイズ)を制御します。

1) サーバーの受信バッファの残りのサイズを使用して、サーバーの処理能力を測定します。

2) サーバーから送信された ACK が受信バッファの空きサイズが 0 であることを示している場合、クライアントはデータの送信を一時停止します (送信はパケットロスでもあります)。一定時間が経過すると、クライアントはウィンドウ検出パケットを送信します (特定のデータを伝送せずに)、サーバーの ACK をトリガーし、サーバーから返された ACK に基づいて次のステップを検討します。

e) 輻輳制御: 全体的なネットワーク伝送容量

1) メカニズム: 実験的な方法を使用して、ウィンドウ サイズを動的に調整します。送信には小さいウィンドウを使用し、送信がスムーズであればウィンドウ サイズを調整し、送信にはより大きなウィンドウを使用し、送信がスムーズであればウィンドウ サイズを調整します。混雑(パケットロス)。

2) プロセス:

ゆっくりとしたスタート: 非常に小さなウィンドウで水をテストし始めてください。

指数関数的な増加: スムーズな伝送の場合、輻輳ウィンドウは指数関数的に増加します。

線形成長: 指数関数的な成長が特定のしきい値に達すると、線形成長がトリガーされます。

小ウィンドウに戻る: ウィンドウが成長する過程でパケットロスが発生した場合、ネットワークが混雑していると考えられ、この時点で元の小ウィンドウに戻ります。

上記のプロセスを繰り返しますが、しきい値を調整します。

注: 実際の送信ウィンドウ = min(フロー制御ウィンドウ、輻輳ウィンドウ)

2. 伝送効率の向上:

a) スライディング ウィンドウ: 一連のデータを一度に送信します。

1) 1 つずつ送信する場合、ほとんどの時間は ACK を待つのに無駄になります。スライディング ウィンドウを使用し、一度に複数のデータを送信し、待ち時間を使用して、複数の ACK を待ちます。

2) ウィンドウの意味: 一度に送信される ACK を待つ必要のないメッセージの数。

3) 以下の図に示すように、2001 がクライアントに到着すると、クライアントはすぐに次のデータを送信し、クライアントは常に同じ数の ACK を待ち続けます。

4) パケットロス処理:

ACKが失われた場合は何も処理する必要はありません 例えば、確認番号2001が失われた場合、次回は確認番号3001が返され、3001以前のデータ(2001も含む)を受信したことがわかります。 。

高速再送信: 通常のデータが失われた場合、再送信する必要があります。たとえば、2001 ~ 3000 のデータが失われた場合、クライアントはデータを送信し続け、サーバーは常に確認番号 2001 を送信します。クライアントはデータ 2001 ~ 3000 Lost を知っており、同じ確認シーケンス番号を複数回受信した後、クライアントは再送信します。

注: ここでの高速再送信は、上記のタイムアウト再送信と競合しません。データ量が少ない場合、TCP はスライディング ウィンドウ メカニズムを使用しない場合があります。パケット損失の場合は、タイムアウト再送信メカニズムが使用されます。データ量が大きい場合、TCP はスライディング ウィンドウ メカニズムを使用し、パケット損失の場合には高速再送信メカニズムを使用します。

b) 応答の遅れ:

メカニズム: サーバーが ACK を返すとき、サーバーは最初に少量のデータを消費するため、しばらく遅延します。これにより、受信バッファーが大きくなり、クライアントのウィンドウが大きくなります。

c) 便乗:

メカニズム: 応答と ACK が 1 つに結合されます。

例: 4 つの波を 3 つに結合できます。

3. 粘着バッグの問題:

a) スティッキー パケットの問題は、受信側がバッファ内のデータをフェッチし、データの境界を区別できないことです。

b) 問題を解決するには、アプリケーション層の視点に立つ必要があります。

1) アプリケーション層プロトコルに、\n などの区切り文字を導入します。

2) アプリケーション層プロトコルでは、パケット長が導入されます。

4. TCP 例外処理:

a) プロセスがクラッシュする:

プロセスがなくなる => PCB がなくなる => ファイル記述子が解放される (ソケットの close() メソッドを呼び出すのと同等) => FIN を送信し、4 ウェイ ハンドシェイクをトリガーします。

通常の状況と変わりません。

b) ホストの通常のシャットダウン:

通常のシャットダウンでは、プロセスのクラッシュと同様に、すべてのプロセスが強制終了されます。

c) ホストの電源をオフにします。

1. 受信側の電源がオフになっている: 送信側は ACK の受信に失敗し、送信側はタイムアウト再送信をトリガーします。複数回失敗した後、リセット メッセージ (RST フィールド) を送信します。

1) 接続をリセットし、失敗後に接続を解放します。

2. 送信側の電源がオフになります。受信側は ACK をトリガーするためにハートビート パケットを (ビジネス データを伝送せずに) 送信します。その目的は、送信側が動作しているかどうか、およびネットワークがスムーズであるかどうかを確認することです。

d) ネットワーク ケーブルが切断されています。

c) ホストの電源オフを参照してください。

5. 概要:

おすすめ

転載: blog.csdn.net/m0_73345579/article/details/132253372