WireShark パケット キャプチャ分析 TCP スリーウェイ ハンドシェイク プロセス、TCP メッセージ分析

「著者のホームページ」:Shibie Sanri wyx
「著者について」: CSDNトップ100、Alibaba Cloudブログ専門家、Huawei Cloud Sharing専門家、ネットワークセキュリティ分野の質の高いクリエイター
「おすすめコラム」:ネットワークセキュリティに興味のある友人は、「ネットワーク セキュリティの初心者からマスターまで」のコラムに従ってください。

WireShark ツールを使用して、TCP 3 ウェイ ハンドシェイクのデータ パケットをキャプチャし、TCP 3 ウェイ ハンドシェイク プロセスを分析し、TCP メッセージ内の各フィールドの役割を分析します。

ステップ 1: Baidu にアクセスする

1) Wireshark を開き、パケット キャプチャを有効にしてから、ブラウザを開いて Baidu にアクセスし、TCP 3 ウェイ ハンドシェイクをトリガーします。

2) cmd を開き、ping www.baidu.comBaidu の IP アドレスを取得します。

ここに画像の説明を挿入します

ステップ 2: TCP プロトコル データ パケットをフィルタリングする

1) フィルタ入力を表示: tcp and ip.addr==110.242.68.3TCP プロトコルのデータ パケットをフィルタリングします。

ここに画像の説明を挿入します

上位 3 つのパケットは TCP スリーウェイ ハンドシェイクのデータ パケットであり、各パケットがハンドシェイクに対応します。

ステップ 3: パケット分析

まず、3 つのハンドシェイク パケットが何を行うかを分析しましょう。

1) まず最初のデータパケットを見てください。送信元アドレス (Source フィールド) は私です。

ここに画像の説明を挿入します

cmd を実行してifconfig確認します。
ここに画像の説明を挿入します

宛先アドレス (Detintion フィールド) は Baidu のアドレス
Info フィールドであり、リクエストの説明であり、SYN が含まれていることがわかります。

ここに画像の説明を挿入します

最初のパッケージの動作を要約すると、
私のコンピュータは TCP リクエストを Baidu のサーバーに送信し、SYN はこれが接続を確立するリクエストであることを示し、これが最初のハンドシェイクでした。

2) 2 番目のデータ パケットを見ると、送信元アドレス (Source フィールド) は Baidu のアドレスです。

ここに画像の説明を挿入します

宛先アドレス (Detintion フィールド) は
説明である Info フィールドで、SYN と ACK があることがわかります。

ここに画像の説明を挿入します

このパッケージの機能を要約すると、
Baidu のサーバー (リンク要求を受信した後) が私のコンピュータに TCP 要求を送信します。SYN+ACK は、これが応答要求であることを示し、これが 2 回目のハンドシェイクです。

3) 3 番目のデータ パケットをもう一度見ると、送信元アドレス (Source フィールド) は私です。

ここに画像の説明を挿入します

宛先アドレス(Detintionフィールド)がBaiduのサーバー、
Infoフィールドが説明で、ACKが入っていることがわかります。

ここに画像の説明を挿入します

このパッケージの動作を要約すると、
私のコンピュータは (Baidu サーバーから応答要求を受信した後) TCP 要求を Baidu のサーバーに送信します。ACK はこれが確認要求であることを示し、これが 3 回目のハンドシェイクです。

この確認リクエストの送信後、3 方向ハンドシェイクが完了し、クライアントはサーバーへの一方向リンクを開きます。サーバーは確認リクエストを受信した後、クライアントへの一方向リンクを開きます。双方向の接続が開かれると、データを転送できるようになります。

ステップ 4: データメッセージ分析

TCPプロトコルのデータメッセージのフォーマットは以下の通りであり、次に、取得したデータパケットに基づいて各フィールドの対応関係と機能を解析します。

ここに画像の説明を挿入します

1) TCP プロトコルのデータパケットをクリックすると、Transmission Control Protocol の 4 行目が TCP プロトコルのデータになります。プロトコルは最初の文字で区別します。

  • 「送信元ポート」フィールドは送信元ポートです。クライアントはランダムなポートを使用してサーバーへの TCP 接続を開始します。
  • 「宛先ポート」フィールドは宛先ポートです。https プロトコルを使用して Baidu にアクセスしているため、ここではサーバーのポート 443 への TCP 接続を開始します。

ここに画像の説明を挿入します

2) シリアル番号と確認番号は、データを順番に再構成するために使用されます。

  • Sequence Number: この送信データの開始バイトがデータストリーム全体の中でどの位置にあるかを相対的なシーケンス番号で示します。
  • シーケンス番号 (Raw): 元のシーケンス番号
  • Next Sequence Number: 次のパケットのシーケンス番号
  • 確認応答番号: 受信が予想される次のパケットのシーケンス番号 (相対シーケンス番号)
  • 確認番号 (生): 元のシリアル番号

ここに画像の説明を挿入します

3) データ オフセットはデータから開始位置までの距離を表し、TCP メッセージのヘッダー長を計算するために使用されます。

ここに画像の説明を挿入します

4) フラグ ビットはリクエストの役割を確認するために使用されます 3 ウェイ ハンドシェイクで注意する必要がある 2 つのフラグ ビットは、確認応答 (ack) と syn です。

  • 予約済み: 予約済みビット
  • Nonce: 明示的な輻輳通知。輻輳が発生しつつあることを示し、送信側が送信速度を下げることができるようにします。
  • CWR: 輻輳ウィンドウを削減する
  • ECN-Echo: SYN の値に応じて 2 つの意味があります。
  • Urgent URG (緊急): 1 は優先度の高いパケットを示します
  • 確認 ACK (確認応答): 1 は、確認番号フィールドが有効であることを示します
  • プッシュ PSH (プッシュ): 1 は、受信者がバッファーがいっぱいになるのを待たずに、できるだけ早くこのメッセージをアプリケーション層に渡すことを意味します。
  • リセット RST (リセット): 1 は重大なエラーを示し、接続を再確立する必要があります。
  • リセット SYN: 接続確立時の同期シーケンス番号。SYN=1 および ACK=0 は接続要求を示し、SYN=1 および ACK=1 は接続要求を示します。
  • Terminate FIN: 1 は転送が完了したことを示し、リンクの解放を要求します。

ここに画像の説明を挿入します

最初のハンドシェイクのデータパケットに注目すると、フラグビットの Syn の値のみが 1 であるため、Flags には SYN が表示され、リクエストの Info フィールドにも SYN が表示されます。

ここに画像の説明を挿入します

もう一度2番目のリクエストのデータパケットを見ると、フラグビットのSynとAcknowledgmentの値が両方とも1であるため、FlagsにはSYN、ACKが表示され、リクエストのInfoフィールドにもSYN、ACKが表示されます。

ここに画像の説明を挿入します

5) 最後に、ウィンドウ サイズ、チェックサム、緊急ポインタ、オプション、および入力フィールドがあります。

  • ウィンドウ フィールドはウィンドウ サイズを示し、フロー制御に使用される受信できる最大バイト数を相手に伝えます。
  • Checksum フィールドはチェックサムを表し、データ パケットの整合性を検証するために使用されます。
  • Urgent Poiterフィールドは、フラグURGが1の場合に有効となる緊急ポインタを表す。これはオフセットを表し、シーケンス番号フィールド値に加算される。
  • オプション フィールドはオプションを表します (可変長)
  • タイムスタンプフィールドはパディングを表します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/wangyuxiang946/article/details/132618372