ACK番号を知る

ACK番号を知る

ACK番号が間違った理由を理解しようとしています。 Wiresharkには次のログがあります。

34936 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656117 TSecr=0 WS=128
    2   0.003662105 192.168.1.1 192.168.1.2 TCP 66  80 → 34936 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    3   0.003691751 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    4   0.003803721 192.168.1.2 192.168.1.1 HTTP    767 POST /jrd/webapi?api=GetSystemStatus HTTP/1.1* (application/x-www-form-urlencoded)
    5   0.024447941 192.168.1.1 192.168.1.2 TCP 54  80 → 34936 [ACK] Seq=1 Ack=714 Win=32128 Len=0
    6   0.052296708 192.168.1.1 192.168.1.2 TCP 70  80 → 34936 [PSH, ACK] Seq=1 Ack=714 Win=32128 Len=16 [TCP segment of a reassembled PDU]
    7   0.052296845 192.168.1.1 192.168.1.2 HTTP/JSON   528 HTTP/1.1 200 OK , JavaScript Object Notation (application/json)
    8   0.052364039 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [ACK] Seq=714 Ack=17 Win=64256 Len=0
    9   0.052930703 192.168.1.2 192.168.1.1 TCP 54  34936 → 80 [FIN, ACK] Seq=714 Ack=492 Win=64128 Len=0
    10  0.061251843 192.168.1.2 192.168.1.1 TCP 74  34938 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656179 TSecr=0 WS=128
    11  0.064187519 192.168.1.1 192.168.1.2 TCP 54  80 → 34936 [ACK] Seq=492 Ack=715 Win=32128 Len=0
    12  0.064187779 192.168.1.1 192.168.1.2 TCP 66  80 → 34938 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    13  0.064330872 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    14  0.065632767 192.168.1.2 192.168.1.1 HTTP    772 POST /jrd/webapi?api=GetSMSStorageState HTTP/1.1* (application/x-www-form-urlencoded)
    15  0.066381036 192.168.1.2 192.168.1.1 TCP 74  34940 → 80 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=3595656184 TSecr=0 WS=128
    16  0.074954073 192.168.1.1 192.168.1.2 TCP 66  80 → 34940 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460 SACK_PERM=1 WS=32
    17  0.075028197 192.168.1.2 192.168.1.1 TCP 54  34940 → 80 [ACK] Seq=1 Ack=1 Win=64256 Len=0
    18  0.075349695 192.168.1.2 192.168.1.1 HTTP    772 POST /jrd/webapi?api=GetConnectionState HTTP/1.1* (application/x-www-form-urlencoded)
    19  0.080664337 192.168.1.1 192.168.1.2 TCP 70  80 → 34938 [PSH, ACK] Seq=1 Ack=719 Win=32128 Len=16 [TCP segment of a reassembled PDU]
    20  0.080664489 192.168.1.1 192.168.1.2 HTTP/JSON   304 HTTP/1.1 200 OK , JavaScript Object Notation (application/json)
    21  0.080744236 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [ACK] Seq=719 Ack=17 Win=64256 Len=0
    22  0.081363475 192.168.1.2 192.168.1.1 TCP 54  34938 → 80 [FIN, ACK] Seq=719 Ack=268 Win=64128 Len=0
    23  0.084534363 192.168.1.1 192.168.1.2 TCP 54  80 → 34938 [ACK] Seq=1 Ack=719 Win=32128 Len=0
    24  0.084606985 192.168.1.2 192.168.1.1 TCP 54  [TCP Dup ACK 22#1] 34938 → 80 [ACK] Seq=720 Ack=268 Win=64128 Len=0
    25  0.084649572 192.168.1.1 192.168.1.2 TCP 54  80 → 34940 [ACK] Seq=1 Ack=719 Win=32128 Len=0
    26  0.084649729 192.168.1.1 192.168.1.2 TCP 54  80 → 34938 [ACK] Seq=268 Ack=720 Win=321
    27  0.086781498 192.168.1.1 192.168.1.2 TCP 70  80 → 34940 [PSH, ACK] Seq=1 Ack=719 Win=32128 Len=16 [TCP segment of a reassembled PDU]
  1. 文字列番号8では、Seq = 714 Ack = 17です。ただし、文字列番号9では、Seq = 714 Ack = 492です。ここAckは714+17=731のようです。ここでAckはどのように計算されますか?なぜ492ですか?文字列22でAck番号を計算するのと同じ質問です。ここで予想されるように、736ではなくAck = 268です。

  2. 文字列 9 には FIN ASK フラグがあり、その後に SYN フラグがあります。ただし、文字列13では、ASKフラグとSYNフラグが順番に表示されます。 FINフラグが表示されません。

どんな答えでも心から感謝します。低レベルのTCPの基本を理解する必要があります。

答え1

同じ方向にancを追加しないでくださいSeqAckシーケンス番号は発信データを示し、承認は受信した受信データの量を示します。

したがって、パケット8は、「シーケンス714から開始してデータを送信しており、17までの全てのデータを受信した」を意味する。パケット9は、「シーケンス714から開始してデータを送信しており、492までの全てのデータを受信した」を意味する。これらのパケットの間では、492-17 = 475バイトのTCPペイロード(フレームサイズは528ですがTCPシーケンス番号には含まれていないヘッダーを含む)を含むサーバーのパケット7を処理します。

関連情報