「著者のホームページ」: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.com
Baidu の IP アドレスを取得します。
ステップ 2: TCP プロトコル データ パケットをフィルタリングする
1) フィルタ入力を表示: tcp and ip.addr==110.242.68.3
TCP プロトコルのデータ パケットをフィルタリングします。
上位 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の場合に有効となる緊急ポインタを表す。これはオフセットを表し、シーケンス番号フィールド値に加算される。
- オプション フィールドはオプションを表します (可変長)
- タイムスタンプフィールドはパディングを表します