PR

 原因はWiresharkの挙動にある。Wiresharkでは、表示フィルターでプロトコルを指定すると、その上位レイヤーのプロトコルに該当するパケットも表示する。例えば、tcpを指定するとHTTPパケットも表示される。

 3ウエイハンドシェークのように、1つの機器とのシーケンスを確認するときは、プロトコル名ではなく確認したい機器のIPアドレスを指定するとよい。ここでは、プロキシーサーバーのIPアドレスを指定して表示を絞り込んだ。「ip.addr == プロキシーサーバーのIPアドレス」と指定すると、プロキシーサーバーとやりとりしたパケットだけが表示される。

 ここで、最も早い時間にやりとりしたパケットを選択してみよう。すると、パケットリストの「Info(概要)」に「SYN」と表示されているのが分かる。これが、SYNパケットを送ったことを示す。

 また、パケットディテールの「Transmission Control Protocol」の左側にある白い三角をクリックして、「Flags」を見ると「0x002(SYN)」と表示されている。

 Flagsは、TCPヘッダーに含まれるコントロールフラグを指す。コントロールフラグには、あらかじめ6ビット分が割り当てられており、SYNフラグは前から5ビット目である。つまり、SYNパケットのコントロールフラグは「000010」になる。これを16進数で表記すると「0x002」になる。

 SYNパケットに対する応答であるSYN+ACKパケットは、SYNとACKのフラグが立っている。ACKのフラグは前から2ビット目なので、SYN+ACKパケットのコントロールフラグは「010010」になる。これを16進数で表記すると「0x012」になる。

 Wiresharkを使えば、プロトコルでやりとりされる生のヘッダー情報もこのように確認できる。

▼UDP
User Datagram Protocolの略。
▼DNS
Domain Name Systemの略。
▼HTTPで主に使われるTCP
HTTPの新しい仕様であるHTTP/3はTCPではなくUDPを利用する。
▼コネクション
Part4ではHTTPのCONNECTメソッドによるコネクションが出てきたが、これはTLSによる暗号通信をプロキシーサーバーでトンネリングするためのもの。プロキシーサーバーを利用しない通常のHTTP/HTTPS通信にはコネクションは存在しない。
▼SYN
SYNchronizeの略。
▼ACK
ACKnowledgementの略。