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

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

May 11, 2023 pm 10:34 PM
tcp

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

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

win10でtcp/ipプロトコルをリセットするにはどうすればよいですか? Windows 10でTCP/IPプロトコルスタックをリセットする方法 win10でtcp/ipプロトコルをリセットするにはどうすればよいですか? Windows 10でTCP/IPプロトコルスタックをリセットする方法 Mar 16, 2024 am 11:07 AM

win10でtcp/ipプロトコルをリセットするにはどうすればよいですか?実際、その方法は非常に簡単で、ユーザーがコマンド プロンプトに直接入力し、ctrl Shift Enter キーの組み合わせを押して操作を実行するか、reset コマンドを直接実行して設定することができます。 Windows 10 で TCP/IP プロトコル スタックをリセットする方法をユーザーに注意深く紹介します。 Windows 10 で tcp/ip プロトコル スタックをリセットする方法 1。 管理者権限 1. ショートカット キー win R を使用してファイル名を指定して実行ウィンドウを直接開き、「cmd」と入力し、ctrl Shift Enter キーの組み合わせを押し続けます。 2. または、スタート メニューでコマンド プロンプトを直接検索し、右クリックします。

TCPを使用してPythonでクライアントとサーバー間の会話を実装する方法 TCPを使用してPythonでクライアントとサーバー間の会話を実装する方法 May 17, 2023 pm 03:40 PM

TCP クライアント TCP プロトコルを使用して継続的な対話を実現するクライアントのサンプル コード: importsocket#クライアント設定 HOST='localhost'PORT=12345#TCP ソケットを作成し、サーバーに接続 client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#ユーザー入力を取得 message=input("送信するメッセージを入力してください:&

また近いうちにお会いしましょう! TCP が 2 回振られるのを見たことがありますか? 4回の握手はどうなるの? また近いうちにお会いしましょう! TCP が 2 回振られるのを見たことがありますか? 4回の握手はどうなるの? Jul 24, 2023 pm 05:18 PM

ここで言う「コネクション指向」とは、コネクションを確立し、コネクションを利用し、コネクションを解放する必要があることを意味します。接続の確立とは、よく知られている TCP スリーウェイ ハンドシェイクを指します。接続を使用する場合、データは 1 回の送信と 1 回の確認の形式で送信されます。また、一般的な TCP 4 波である接続の解放もあります。

Java API開発におけるTCP通信にNetty4を使用する Java API開発におけるTCP通信にNetty4を使用する Jun 17, 2023 pm 11:18 PM

TCP は、コンピュータ ネットワーク通信プロトコルの一種であり、コネクション型の伝送プロトコルです。 Javaアプリケーション開発において、TCP通信はクライアントとサーバー間のデータ送信、音声や映像のリアルタイム送信など、さまざまなシーンで広く利用されています。 Netty4 は、サーバーとクライアント間のデータ交換プロセスを最適化し、効率性と信頼性を高めることができる、高性能、拡張性の高いネットワーク プログラミング フレームワークです。 TCP 通信に Netty4 を使用する具体的な実装手順は次のとおりです。

Java で単一の TCP 接続を使用して複数のファイルを送信するにはどうすればよいですか? Java で単一の TCP 接続を使用して複数のファイルを送信するにはどうすればよいですか? Apr 27, 2023 am 08:49 AM

1 つの TCP 接続を使用して複数のファイルを送信することについてこのブログが書かれているのはなぜですか?最近関連の本を読んでいるのですが、単に Socket を使ってプログラミングするのは問題ありませんが、これはいくつかの基本的な概念を確立するだけです。本当の問題に対してはまだ何もできません。ファイルを転送する必要がある場合、データ (バイナリ データ) を送信しただけのように見えますが、ファイルに関する一部の情報 (ファイル拡張子) が失われていることがわかります。そして、毎回 1 つのファイルを送信するために 1 つのソケットしか使用できないため、連続してファイルを送信する方法はありません (ファイルの送信を完了するにはストリームを閉じることに依存しているため、実際にはファイルの長さがわかりません。したがって、1 つのソケット接続がファイルを表す場合にのみファイルを送信できます)。

Linux SIGPIPE 信号 Linux SIGPIPE 信号 Feb 19, 2024 pm 04:00 PM

以下では、説明の便宜上、TCPの通信当事者のうち、通信当事者をA、Bに置き換えて説明する。 TCP プロトコルによれば、A が接続を閉じた後も B がデータを送信し続けると、B は A の RST 応答を受信します。 B がデータの送信を続ける場合、システムは SIGPIPE 信号を送信して、接続が切断されたことを通知し、送信を停止します。 SIGPIPE シグナルに対するシステムのデフォルトの処理動作は、プロセス B を終了させることです。 SIGPIPE 信号に対するオペレーティング システムのデフォルトの処理動作は非常に不親切です。これを分析してみましょう。 TCP 通信は全二重チャネルであり、2 つの単信チャネルに相当し、接続の各端が 1 つのチャネルを担当します。反対側が「閉じる」場合、2 つのチャネル全体を閉じることが意図されていますが、ローカル エンドは FIN パケットのみを受信します。 TCP プロトコルの規定に従って、

TCPとIPの違いは何ですか TCPとIPの違いは何ですか Sep 04, 2023 pm 02:19 PM

TCP と IP はインターネットにおける 2 つの異なるプロトコルです: 1. TCP はトランスポート層プロトコル、IP はネットワーク層プロトコル; 2. TCP はデータ パケットのセグメント化、並べ替え、確認、再送信などの機能を提供します。プロトコルはデータ パケットの送信元アドレスと宛先アドレスを提供する役割を果たします; 3. TCP は接続指向のプロトコルですが、IP プロトコルはコネクションレスです; 4. TCP はフロー制御と輻輳制御も提供します。

インタビュアーは、「TCP 接続は HTTP リクエストをいくつ送信できますか?」と尋ねました。 インタビュアーは、「TCP 接続は HTTP リクエストをいくつ送信できますか?」と尋ねました。 Feb 22, 2023 pm 12:00 PM

かつて、面接でよくある質問で、「ブラウザに URL が入力されてからページが表示されるまでの過程で何が起こっていますか?」という質問がありました。予習をした学生ならほとんど答えられると思いますが、「受信したHTMLに数十個の画像タグが含まれている場合、どのような方法で、どのような順序で、どれだけの接続が確立され、どのようなプロトコルでダウンロードされるのか」と続けて尋ねると、これらの画像はどうでしょうか?

See all articles