ホームページ >運用・保守 >安全性 >リンクを確立するための TCP 3 方向ハンドシェイクとリンクを切断するための 4 方向ウェーブの分析例

リンクを確立するための TCP 3 方向ハンドシェイクとリンクを切断するための 4 方向ウェーブの分析例

WBOY
WBOY転載
2023-05-11 22:34:24974ブラウズ

### ###### 一歩ずつ。

TCP プロトコルについて簡単に紹介しましょう。

TCP (伝送制御プロトコル) は、コネクション指向で信頼性の高い、バイト ストリーム ベースのトランスポート層プロトコルです。複雑ではありますが、プログラマーと運用保守担当者の両方が知っておく必要がある基本的なスキルです。

オブジェクト指向 - 通信する前に、両者は事前に接続を確立する必要があります。これは、現実世界で電話をかけるのと似ています。通信を行う前に電話をかける必要があります。

信頼性 - TCP プロトコルには、データ分離の適用、再送信メカニズム、ヘッダーとデータの検証、受信データの並べ替えなど、通信リンクの信頼性を確保するための多くのルールがあります。アプリケーション層と受信側で重複データを破棄し、フロー制御を行います。

TCP データは IP データグラムにカプセル化され、形式は次のとおりです:

内容: ポート番号 [16 ビット]、シーケンス番号 [32 ビット]、オフセット [4 ビット]、予約済み [6 ビット]、フラグ [6 ビット]、ウィンドウ サイズ (ウィンドウ) [16 ビット]、チェックサム [16 ビット]、緊急ポインタ [16 ビット]、TCP オプションリンクを確立するための TCP 3 方向ハンドシェイクとリンクを切断するための 4 方向ウェーブの分析例

ここで注意すべき点:

TCP パケットには IP アドレスがありません。これは IP 層の問題ですが、送信元ポートと宛先ポートがあります。
  • TCP 接続では、同じ接続を表すために 4 つのタプル (src_ip、src_port、dst_ip、dst_port) が必要です。正確には、これは 5 つのタプルで、1 つはプロトコルです。ただし、ここでは TCP プロトコルについてのみ説明しているため、ここでは 4 倍についてのみ説明します。
  • シーケンス番号
  • はパケットのシーケンス番号です。

    はネットワークパケットの並べ替えの問題を解決するために使用されます。

  • 確認応答番号
  • はACKです - 受信を確認するために使用され、

    はパケットを失わないという問題を解決するために使用されます

  • Window は Advertized-Window
  • とも呼ばれ、有名なスライディング ウィンドウ (Sliding Window) でもあります。

    はフロー制御を解決するために使用されます

  • TCP フラグ
  • (パケットのタイプ)

    は、主に TCP ステート マシン を制御するために使用されます。 URG: 緊急ポインタは有効です

    ACK: 確認シーケンス番号は有効です

    PSH: 受信機はこのセグメントをできるだけ早くアプリケーション層に渡す必要があります

    RST : 接続の再構築

    SYN: 接続の開始に使用される同期シーケンス番号

    FIN: 発信者が送信タスクを完了 (アクティブに終了)

    スリーウェイ ハンドシェイクが確立されました Link

1. 要求側 (クライアント) は、クライアントが接続するサーバーのポートを示すために SYN=1 を送信します。TCP SYN=1 の場合はデータを伝送できないと規定されていますが、シーケンス番号が消費されるため、初期シーケンス番号 seq を seq=x として乱数として宣言します。

2. サーバーはクライアント メッセージ セグメントを確認し、確認シーケンス番号を ACK=x 1 に設定します。同時に、クライアントへの接続を要求し、SYN=1 を送信し、seq=y として初期シーケンス番号を送信します。

3. クライアントはサーバー メッセージ セグメントを確認し、確認シーケンス番号を送信し、サーバー ACK=y 1 との接続を確立することに同意します。

これら 3 つのメッセージ セグメントにより、接続の確立が完了します。このプロセスは、スリーウェイ ハンドシェイクとも呼ばれます。

4 回手を振ってリンクを切断します。

1. ホスト 1 (クライアントまたはサーバー)、シーケンス番号と確認応答番号を設定します。 、FIN セグメントをホスト 2 に送信します。この時点で、ホスト 1 は FIN_WAIT_1 状態になります。これは、ホスト 1 にはホスト 2 に送信するデータがないことを意味します。

2. ホスト 2 は、FIN メッセージ セグメントを受信しました。 1 によって送信されたものは、ホスト 1 に ACK メッセージ セグメントを返します。確認応答番号はシーケンス番号に 1 を加えたものです。ホスト 1 は FIN_WAIT_2 状態に入ります。ホスト 2 はホスト 1 に、送信するデータがないので接続を閉じてもよいことを伝えます。;

3. ホスト 2 はホスト 1 に FIN セグメントを送信し、接続の終了を要求し、ホスト 2 は CLOSE_WAIT 状態になります;

4. ホスト 1 はホスト 2 セグメントによって送信された FIN を受信し、送信しますACK セグメントをホスト 2 に送信すると、ホスト 1 は TIME_WAIT 状態に入ります。ホスト 2 はホスト 1 から ACK セグメントを受信した後、接続を閉じます。この時点では、ホスト 1 は 2MSL 待っても応答を受信しません。これはサーバー側が正常に閉じられたことを証明し、ホスト 1 も接続を閉じることができます。

これまでのところ、TCP の 4 つの解散はめでたく完了しました。

リンクを確立および切断するためのアイコンは次のとおりです:

なぜ 3 ウェイ ハンドシェイクなのかを詳しく見てみましょう。 リンクを確立するための TCP 3 方向ハンドシェイクとリンクを切断するための 4 方向ウェーブの分析例

無効なリンクリクエストセグメントが突然サーバーに送信され、エラーが発生するのを防ぐため。栗をあげましょう。

クライアントによって送信された最初の接続要求メッセージ セグメントは失われませんでしたが、特定のネットワーク ノードに長時間留まったため、接続が解放されてからサーバーに到達するまでに一定の時間が遅延しました。これは、かなり前に期限が切れたメッセージ セグメントであることが判明しました。ただし、サーバーはこの無効な接続要求セグメントを受信すると、それがクライアントによって再度送信された新しい接続要求であると誤って認識します。したがって、確認メッセージ セグメントをクライアントに送信し、接続の確立に同意します。 「スリーウェイ ハンドシェイク」が使用されていないと仮定すると、サーバーが確認を送信する限り、新しい接続が確立されます。クライアントは接続を確立するリクエストを発行していないため、サーバーの確認には注意を払わず、サーバーにデータを送信しません。しかし、サーバーは新しいトランスポート接続が確立され、クライアントがデータを送信するのを待っていると考えます。このようにして、サーバーの多くのリソースが無駄になります。 「スリーウェイハンドシェイク」方式を採用することで、上記の現象を防ぐことができます。たとえば、先ほどの状況では、クライアントはサーバーの確認に確認を送信しません。サーバーは確認を受信できないため、クライアントが接続の確立を要求しなかったことを認識します。 "

これは非常に明白で、サーバーが待機してリソースを浪費することがなくなります。

では、なぜ 4 つの波があるのでしょうか?

TCP プロトコルは、A 接続型で、信頼性が高く、バイト ストリーム ベースのトランスポート層通信プロトコルです。TCP は全二重モードです。つまり、ホスト 1 が FIN セグメントを送信するとき、それはホスト 1 に送信するデータがないことだけを意味します。1 はホスト 2 に、そのすべてのデータが送信されたことを伝えます。送信されました。ただし、ホスト 1 はこの時点でもホスト 2 からのデータを受け入れることができます。ホスト 2 が ACK メッセージ セグメントを返した場合、ホスト 1 には送信するデータがないことがすでにわかっていることを意味します。ただし、ホスト 2 は引き続きホストにデータを送信できます。 1; ホスト 2 も FIN セグメントを送信すると、ホスト 2 には送信するデータがないことを意味し、送信するデータがないことをホスト 1 に伝え、お互いが喜んで TCP 接続を終了します。 4 つの別れの原理を正しく理解するには、4 つの別れの間の状態の変化を理解する必要があります。

以上がリンクを確立するための TCP 3 方向ハンドシェイクとリンクを切断するための 4 方向ウェーブの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。