TCP接続セットアップ
Webを閲覧したり、電子メールを送信したり、オンラインゲームをプレイしたりすると、その背後にある複雑なネットワーク接続については考えないことがよくあります。ただし、私たちとサーバーの間の安定した通信を保証するのは、一見小さなステップです。最も重要な手順の1つはTCP接続のセットアップであり、これの中核は3方向の握手です。
この記事では、3方向の握手の原則、プロセス、および重要性について詳しく説明します。段階的に、3方向の握手が必要な理由、接続の安定性と信頼性がどのように保証されるか、データ転送の重要性を説明します。 3方向の握手をより深く理解することで、ネットワーク通信の基礎となるメカニズムをよりよく理解し、TCP接続の信頼性についてより明確なビューを得ることができます。
TCP 3方向握手プロセスと状態移行
TCPは接続指向の輸送プロトコルであり、データ送信前の接続確立が必要です。この接続確立プロセスは、3方向の握手によって行われます。
各接続で送信されるTCPパケットを詳しく見てみましょう。
当初、クライアントとサーバーの両方が閉じられています。まず、サーバーはポートを積極的に聴き、リスニング状態にあります。つまり、サーバーを起動する必要があります。次に、クライアントはWebページへのアクセスを開始する準備ができています。サーバーとの接続を確立する必要があります。最初の接続パケットの形式は次のとおりです。
クライアントが接続を開始すると、ランダムな初期シーケンス番号(client_isn)を生成し、TCPヘッダーの「シーケンス番号」フィールドに配置します。同時に、クライアントはSynフラグの位置を1に設定して、発信パケットがSynパケットであることを示します。クライアントは、最初のsynパケットをサーバーに送信することにより、サーバーとの接続を確立したいことを示します。このパケットには、アプリケーションレイヤーデータ(つまり、送信されたデータ)が含まれていません。この時点で、クライアントのステータスはSyn-Sentとしてマークされます。
サーバーがクライアントからSynパケットを受信すると、独自のシリアル番号(server_isn)をランダムに初期化し、その番号をTCPヘッダーの「シリアル番号」フィールドに配置します。次に、サーバーは「承認番号」フィールドにclient_isn + 1を入力し、synとackビットの両方を1に設定します。最後に、サーバーはパケットをクライアントに送信します。現時点では、サーバーはSyn-RCVD状態です。
クライアントがサーバーからパケットを受信したら、最終的な返信パケットに応答するために次の最適化を実行する必要があります。まず、クライアントはReplyパケットのTCPヘッダーのACKビットを1に設定します。次に、クライアントは「回答番号を確認する」フィールドにValue Server_isn + 1を入力します。最後に、クライアントはパケットをサーバーに送信します。このパケットは、クライアントからサーバーにデータを伝達できます。これらの操作が完了すると、クライアントは確立された状態に入ります。
サーバーがクライアントから返信パケットを受信すると、確立された状態にも切り替えます。
上記のプロセスからわかるように、3方向の握手を実行するとき、3番目の握手はデータを運ぶことができますが、最初の2つのハンドシェイクはそうではありません。これは、インタビューでよく尋ねられる質問です。 3方向の握手が完了すると、両当事者は確立された状態に入り、接続が正常に確立されたことを示し、その時点でクライアントとサーバーは互いにデータの送信を開始できます。
なぜ3つの握手? 2回ではなく、4回?
一般的な答えは、「3方向の握手が受け取って送信する能力を保証するため」です。この答えは正しいですが、それは表面的な理由のみであり、主な理由を提出しません。以下では、この問題の理解を深めるために、3つの側面からのトリプルハンドシェイクの理由を分析します。
3方向の握手は、歴史的に繰り返される接続の初期化を効果的に回避できます(主な理由)
3方向の握手は、両当事者が信頼できる初期シーケンス番号を受け取ったことを保証します。
3方向の握手は、リソースを無駄にすることを避けます。
理由1:歴史的な複製結合を避けてください
一言で言えば、3方向の握手の主な理由は、古い複製接続の初期化によって引き起こされる混乱を避けることです。複雑なネットワーク環境では、データパケットの送信が指定された時間に従って常に宛先ホストに送信されるとは限らず、ネットワークの輻輳やその他の理由により、古いデータパケットが最初に宛先ホストに到着する場合があります。これを回避するために、TCPは3方向の握手を使用して接続を確立します。
クライアントが複数のSyn接続確立パケットを連続して送信すると、ネットワーク輻輳などの状況で、以下が発生する可能性があります。
1-古いSynパケットは、最新のSynパケットの前にサーバーに到着します。
2-サーバーは、古いsynパケットを受信した後、Syn + ACKパケットをクライアントに返信します。
3-クライアントがSyn + ACKパケットを受信すると、接続が独自のコンテキストに応じて履歴接続(シーケンス番号の有効期限が切れるかタイムアウト)であると判断し、RSTパケットをサーバーに送信して接続を中止します。
両手シェイク接続を使用すると、現在の接続が履歴接続であるかどうかを判断する方法はありません。 3方向の握手により、クライアントは、3番目のパケットを送信する準備ができたときにコンテキストに基づいて現在の接続が履歴接続であるかどうかを判断できます。
1-履歴接続(シーケンス番号の有効期限が切れまたはタイムアウト)の場合、3番目のハンドシェイクによって送信されるパケットは、履歴接続を中止するためのRSTパケットです。
2-歴史的な接続ではない場合、3回目のパケットはACKパケットであり、2つの通信パーティーが接続を正常に確立します。
したがって、TCPが3方向の握手を使用する主な理由は、接続を初期化して履歴接続を防ぐことです。
理由2:両当事者の初期シーケンス番号を同期する
TCPプロトコルの両側は、信頼できる伝送を確保するための重要な要素であるシーケンス番号を維持する必要があります。シーケンス番号は、TCP接続で重要な役割を果たします。
受信機は、複製データを排除し、データの精度を確保できます。
レシーバーは、データの整合性を確保するために、シーケンス番号の順序でパケットを受信できます。
●シーケンス番号は、相手が受信したデータパケットを識別し、信頼できるデータ送信を可能にします。
したがって、TCP接続を確立すると、クライアントはSynパケットを初期シーケンス番号とともに送信し、クライアントのSynパケットの受信を成功させることを示すACKパケットでサーバーに返信する必要があります。次に、サーバーはSynパケットを初期シーケンス番号とともにクライアントに送信し、クライアントが一度だけ返信するのを待って、初期シーケンス番号が確実に同期されるようにします。
4方向の握手は、両当事者の初期シーケンス番号を確実に同期することも可能ですが、2番目と3番目のステップを1つのステップに結合して、3方向の握手をもたらすことができます。ただし、2つのハンドシェイクは、一方の当事者の初期シーケンス数が他方の当事者によって正常に受信されることを保証することのみができますが、両当事者の初期シーケンス番号が確認できるという保証はありません。したがって、TCP接続の安定性と信頼性を確保するために、3方向の握手が最良の選択です。
理由3:リソースを無駄にしないでください
「両手シェイク」のみがある場合、クライアントsyn要求がネットワークでブロックされている場合、クライアントはサーバーから送信されたACKパケットを受信できないため、synはresします。ただし、サードハンドシェイクがないため、サーバーは、クライアントが接続を確立するためにACK謝辞を受け取ったかどうかを判断できません。したがって、サーバーは、各synリクエストを受信した後にのみ接続を積極的に確立することができます。これは次のことにつながります。
リソースの廃棄物:クライアントのSyn要求がブロックされ、複数のSynパケットの繰り返し送信が発生すると、サーバーはリクエストを受信した後、複数の冗長な無効な接続を確立します。これは、サーバーリソースの不必要な無駄につながります。
メッセージ保持:3番目の握手がないため、サーバーは、クライアントが接続を確立するためにACK謝辞を正しく受け取ったかどうかを知る方法がありません。その結果、メッセージがネットワークに掲載された場合、クライアントはSynリクエストを何度も何度も送信し続け、サーバーが常に新しい接続を確立します。これにより、ネットワークの混雑と遅延が増加し、ネットワーク全体のパフォーマンスに悪影響を及ぼします。
したがって、ネットワーク接続の安定性と信頼性を確保するために、TCPは3方向の握手を使用して接続を確立して、これらの問題の発生を回避します。
まとめ
ネットワークパケットブローカーTCP接続確立は、3方向の握手で行われます。 3方向の握手中に、クライアントは最初にSynフラグを含むパケットをサーバーに送信し、接続を確立したいことを示します。クライアントからリクエストを受信した後、サーバーはクライアントにSynとACKフラグを備えたパケットを返信し、接続要求が受け入れられ、独自の初期シーケンス番号を送信します。最後に、クライアントはACKフラグでサーバーに返信して、接続が正常に確立されたことを示します。したがって、2つの当事者は確立された状態にあり、互いにデータの送信を開始できます。
一般に、TCP接続確立の3方向の握手プロセスは、接続の安定性と信頼性を確保し、過去の接続に対するリソースの混乱と無駄を避け、両当事者がデータを受信して送信できるように設計されています。
投稿時間:1月-08-2025