85292
# 背景

[パケットキャプチャの教科書](https://www.sbcr.jp/product/4797390711/) を読んで、TCPについて勉強しています。

TCPの接続終了フェーズは、以下のように4ウェイハンドシェイクであることを理解しました。

```

          TCP A                                                TCP B
    
      1.  ESTABLISHED                                          ESTABLISHED
    
      2.  (Close)
          FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT
    
      3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT
    
      4.                                                       (Close)
          TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK
    
      5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED
    
      6.  (2 MSL)
          CLOSED
    
                             Normal Close Sequence
    
                                   Figure 13.
    
```

<https://datatracker.ietf.org/doc/html/rfc793#section-3.5> 引用

# 質問

上記のTCP接続を終了する通信を、実際にWireSharkでキャプチャして確認したいです。  
どのようなタイミングでキャプチャするのがよいのでしょうか？  
TCPの接続が、いつ終了されるか理解していません。  
たとえばHTTPは、いつTCPの接続が終了されるのでしょうか？

# 回答をもらった上での補足

curlやtelnetでHTTP接続してからしばらく待てば、以下の様なTCPの終了フェーズを確認することができました。

[![画像の説明をここに入力](https://i.stack.imgur.com/JODGC.png)](https://i.stack.imgur.com/JODGC.png)
CC BY-SA 4.0
2021-12-23T01:55:16.030
85287
2021-12-26T13:38:22.493
2021-12-26T13:38:22.493
19524
19524
question
tcp
TCPの接続終了フェーズの流れをWireSharkで確認したいです。
HTTPについては下記のサイトを参照してみてください。

[第1回 HTTPプロトコルとは：超入門HTTPプロトコル -
＠IT](https://atmarkit.itmedia.co.jp/ait/articles/1703/29/news045.html)

> たとえばHTTPでは、いつTCPの接続が終了されるのでしょうか？

このような通信について見ることができるのがWireSharkです。  
WireSharkを起動し、ブラウザーでサイトを開くと、その通信状態がわかります。  
まずはWireSharkをインストールし、起動してみてください。
CC BY-SA 4.0
2021-12-23T02:25:24.003
85288
2021-12-23T03:04:24.640
2021-12-23T03:04:24.640
3060
24490
85287
answer
TCP connection調べる目的に, HTTPは(そのままでは)向いていない気がします

3ウェイ・ハンドシェイク, FIN-WAIT/CLOSE-WAIT など, TCP connectionを閉じて再度開くにはコストがかかるので,
HTTPでは一つの connectionで複数のやり取り行うのが普通  
(プロトコルとして古いけど) FTPとか telnet使うのがよいかも

いつ HTTP connectionが切れるか ⇨ 要求が途切れしばらくしたあと

* * *

あるいは, telnet利用して古い接続(HTTP/1.0) 行う手もあります  
参考
<https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP>

```

    $ telnet www.example.com 80
    
    > Connected to www.example.com.
    > Escape character is '^]'.
    
    GET /
    
```

(最初の行がコマンドライン, その次が相手からのメッセージ)  
(最後の行が, HTTPメソッド手入力)
CC BY-SA 4.0
2021-12-23T05:40:21.957
85292
2021-12-23T05:40:21.957
43025
85287
answer
パケットキャプチャ、楽しいですよね。  
(楽しくない状況で使うことも多いですが)  
私も回答としてまっさきに思いついたのが@oririさんの書かれているFTPでした。

HTTPですと、質問で書かれている書籍のダウンロードファイル、  
CHAPTER6の「http_request_get.pcapng」とかが該当しそうです。  
クライアントからのGETに対してHTTP200で応答した後、  
クライアントからFINを送って(No.14)サーバもFINを返して(No.16)終了しています。

実サイトでHTTP通信をキャプチャしてもHTTPSがほとんどで読みきれないと思いますので  
ローカルで簡易サーバを立てて確認するのがいいと思います。
CC BY-SA 4.0
2021-12-23T14:02:36.320
85306
2021-12-23T14:02:36.320
37886
85287
answer