Finished
Finishedは暗号化されているのでwiresharkでは見えません。clientがexample.comのコンテンツをGETした後、通信は何も起こらなくなります。それから45秒後からのやり取りが以下です。
# | time | src | dest | protocol | length | TCP flags | seq | ack | info |
---|---|---|---|---|---|---|---|---|---|
1098 | 48.839818 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
1108 | 48.992493 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936311918 TSecr=107391998 |
1369 | 64.549821 | example.com | localhost | TCP | 66 | ·······A···· | 5812 | 1526 | [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936327237 TSecr=107391998 |
1370 | 64.55017 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5813 | [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107452954 TSecr=2936311918 |
2417 | 109.887607 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
2418 | 110.041827 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936372958 TSecr=107452954 |
2790 | 125.889367 | example.com | localhost | TCP | 66 | ·······A···· | 5812 | 1526 | [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936388677 TSecr=107452954 |
2791 | 125.889583 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5813 | [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107513834 TSecr=2936372958 |
4317 | 171.346262 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
4318 | 171.522983 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936434446 TSecr=107513834 |
4366 | 183.843569 | example.com | localhost | TLSv1.3 | 123 | ·······AP··· | 5813 | 1526 | Application Data |
4367 | 183.843575 | example.com | localhost | TLSv1.3 | 90 | ·······AP··· | 5870 | 1526 | Application Data |
4368 | 183.843577 | example.com | localhost | TCP | 66 | ·······A···F | 5894 | 1526 | 443 → 58364 [FIN, ACK] Seq=5894 Ack=1526 Win=69120 Len=0 TSval=2936446685 TSecr=107513834 |
4369 | 183.844156 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5870 | 58364 → 443 [ACK] Seq=1526 Ack=5870 Win=131008 Len=0 TSval=107571319 TSecr=2936446685 |
4370 | 183.844157 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5894 | 58364 → 443 [ACK] Seq=1526 Ack=5894 Win=130944 Len=0 TSval=107571319 TSecr=2936446685 |
4371 | 183.8442 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5895 | 58364 → 443 [ACK] Seq=1526 Ack=5895 Win=130944 Len=0 TSval=107571319 TSecr=2936446685 |
4372 | 183.846191 | localhost | example.com | TCP | 54 | ·······A·R·· | 1526 | 5895 | 58364 → 443 [RST, ACK] Seq=1526 Ack=5895 Win=131008 Len=0 |
うー表から秒数を除去したことを公開しているなう。
TCP Keep-Alive
# | time | src | dest | protocol | length | TCP flags | seq | ack | info |
---|---|---|---|---|---|---|---|---|---|
1098 | 48.839818 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
1108 | 48.992493 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936311918 TSecr=107391998 |
1369 | 64.549821 | example.com | localhost | TCP | 66 | ·······A···· | 5812 | 1526 | [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936327237 TSecr=107391998 |
1370 | 64.55017 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5813 | [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107452954 TSecr=2936311918 |
2417 | 109.887607 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
2418 | 110.041827 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936372958 TSecr=107452954 |
2790 | 125.889367 | example.com | localhost | TCP | 66 | ·······A···· | 5812 | 1526 | [TCP Keep-Alive] 443 → 58364 [ACK] Seq=5812 Ack=1526 Win=69120 Len=0 TSval=2936388677 TSecr=107452954 |
2791 | 125.889583 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5813 | [TCP Keep-Alive ACK] 58364 → 443 [ACK] Seq=1526 Ack=5813 Win=131072 Len=0 TSval=107513834 TSecr=2936372958 |
4317 | 171.346262 | localhost | example.com | TCP | 54 | ·······A···· | 1525 | 5813 | [TCP Keep-Alive] 58364 → 443 [ACK] Seq=1525 Ack=5813 Win=131072 Len=0 |
4318 | 171.522983 | example.com | localhost | TCP | 66 | ·······A···· | 5813 | 1526 | [TCP Keep-Alive ACK] 443 → 58364 [ACK] Seq=5813 Ack=1526 Win=69120 Len=0 TSval=2936434446 TSecr=107513834 |
これはTLS通信ではないですが確認します。TCP connectionを切らないために定期的に生死確認をします。「生きてるか?(keep alive)」と送り、「生きてるよ(ACK)」と返します。
サーバ側がHTMLコンテンツを返してから、45秒、25秒、45秒、25秒、と送り合っているように見えたのですが、よく見ると
client側から聞いているのは 45秒、60秒、60秒のタイミング
server側から聞いているのは 60秒、60秒、そしてさらに60秒後に Application dataになりました。
clientがコンテンツをGETしたあと、何もしていない3分00秒間 コネクションがつながっていたことになります。
これを切断するため(だと思われる)パケットとして、サーバが2つの特別な何かを送ったようです。
(server) Application Data x 2
3分何もリクエストしてこないclientにしびれを切らしたサーバ側が180秒後に送ったのが2つの Application Data です。
(server) Application data (1)
TCP Layer
これは PSH, ACK
でした。FINではありません。
Flags: 0x018 (PSH, ACK)
TLS
57bytes あります。 type は Application Data (23)
です。暗号化されているので見えません。
Transport Layer Security
TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
Opaque Type: Application Data (23)
Version: TLS 1.2 (0x0303)
Length: 52
Encrypted Application Data: 0196390581f5af3bd23094eb3ce16fd0dcfcb253006695a692b9be9aff72c2c0b048c193…
[Application Data Protocol: http-over-tls]
これは恐らく TLS 1.3 の Finished メッセージではないかと想像しています。FInishedメッセージを改ざんすることでMalloryが悪いことをできるので、TLS通信の終了はとても気を遣う処理です。
(server) Application data (2)
TCP Layer
これも PSH, ACK
でした。FINではありません。
Flags: 0x018 (PSH, ACK)
TLS
同じくtype は Application Data (23)
です。これは 24 bytes でした。 暗号化されているので見えません。
TLSv1.3 Record Layer: Application Data Protocol: http-over-tls
Opaque Type: Application Data (23)
Version: TLS 1.2 (0x0303)
Length: 19
Encrypted Application Data: c9f46fee4a4040610915c8f41b7f8126c52ade
[Application Data Protocol: http-over-tls]
Finishedは2つに分かれるのかな。後で調べる。
(server) FIN/ACK, RST/ACK
Serverは2つのapplication dataに続き、FIN/ACKのTCPパケットを送信しました。TCP close sequenceが始まったと思われます。
# | time | src | dest | protocol | length | TCP flags | seq | ack | info |
---|---|---|---|---|---|---|---|---|---|
4368 | 183.843577 | example.com | localhost | TCP | 66 | ·······A···F | 5894 | 1526 | 443 → 58364 [FIN, ACK] Seq=5894 Ack=1526 Win=69120 Len=0 TSval=2936446685 TSecr=107513834 |
TCPの切断シーケンスは FIN, ACK, FIN, ACK が一般的かと
(client) ACK x 3 + RST/ACK x 1
サーバから FINがきたので、返答〜切断します。
# | time | src | dest | protocol | length | TCP flags | seq | ack | info |
---|---|---|---|---|---|---|---|---|---|
4369 | 183.844156 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5870 | 58364 → 443 [ACK] Seq=1526 Ack=5870 Win=131008 Len=0 TSval=107571319 TSecr=2936446685 |
4370 | 183.844157 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5894 | 58364 → 443 [ACK] Seq=1526 Ack=5894 Win=130944 Len=0 TSval=107571319 TSecr=2936446685 |
4371 | 183.8442 | localhost | example.com | TCP | 66 | ·······A···· | 1526 | 5895 | 58364 → 443 [ACK] Seq=1526 Ack=5895 Win=130944 Len=0 TSval=107571319 TSecr=2936446685 |
4372 | 183.846191 | localhost | example.com | TCP | 54 | ·······A·R·· | 1526 | 5895 | 58364 → 443 [RST, ACK] Seq=1526 Ack=5895 Win=131008 Len=0 |
seq/ack numberから見ると、
1つめのack: serverから来た 2つめのapplication data への ack(なぜか1つめのapplication dataへのackは見当たらない)
2つめのack: serverから来た FIN/ACK(5894) への ACK
3つめのack: serverから来た FIN/ACK(5894) + 1 の 5895 が指定されてる
最後に RST, ACKです。これも 5895 でした。
ここらへんの流れは忘れてしまった。そのうち思い出す。