TCPのスリーウェイハンドシェイクを確認する

Pocket

TCP/IPをあらためて勉強している。手を動かすと記憶に残りやすいので、TCPの特徴の一つであるスリーウェイハンドシェイクをtcpdumpを使用して確認してみる。

TCP

  • TCP(Transmission Control Protocol)はトランスポート層のコネクション型プロトコル
    • 再送制御機能を持つ
    • アウトオブオーダー(送信順と到着順が異なる)制御機能を持つ
  • セグメント単位
  • スリーウェイハンドシェイクでコネクションを確立
  • フォーウェイハンドシェイクでコネクションを切断
  • IPヘッダのプロトコル番号は6

スリーウェイハンドシェイクによるコネクション確立を確認

tcpdumpcurlを使用して、HTTPSにおけるTCPのスリーウェイハンドシェイクを確認する。

tcpdumpでHTTPS通信のTCPパケットをキャプチャ開始する。
(ネットワークインターフェースはeth0と仮定する。)

$ sudo tcpdump -tnl -i eth0 port 443
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

curlhttps://example.orgにリクエスト送信する。

$ curl --head https://example.org

HTTP/2 200
content-encoding: gzip
accept-ranges: bytes
age: 507109
cache-control: max-age=604800
content-type: text/html; charset=UTF-8
date: Fri, 15 Apr 2022 23:44:07 GMT
etag: "3147526947+gzip"
expires: Fri, 22 Apr 2022 23:44:07 GMT
last-modified: Thu, 17 Oct 2019 07:18:26 GMT
server: ECS (sab/56F3)
x-cache: HIT
content-length: 648

--headオプションは、レスポンスヘッダのみを表示する。

スリーウェイハンドシェイクでTCPコネクションが確立されている。

$ sudo tcpdump -tnl -i eth0 port 443
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

IP 192.0.2.0.54321 > 93.184.216.34.443: Flags [S], seq 3730146218, win 62727, options [mss 8961,sackOK,TS val 3536179360 ecr 0,nop,wscale 6], length 0 // ---(1)
IP 93.184.216.34.443 > 192.0.2.0.543210: Flags [S.], seq 1871064812, ack 3730146219, win 65535, options [mss 1460,sackOK,TS val 889923695 ecr 3536179360,nop,wscale 9], length 0 // ---(2)
IP 192.0.2.0.54321 > 93.184.216.34.443: Flags [.], ack 1, win 981, options [nop,nop,TS val 3536179464 ecr 889923695], length 0 // ---(3)
IP 192.0.2.0.54321 > 93.184.216.34.443: Flags [P.], seq 1:518, ack 1, win 981, options [nop,nop,TS val 3536179472 ecr 889923695], length 517
IP 93.184.216.34.443 > 192.0.2.0.54321: Flags [.], ack 518, win 131, options [nop,nop,TS val 889923807 ecr 3536179472], length 0
  • (1) SYN
  • (2) SYN/ACK
  • (3) ACK

SYN:接続開始要求、ACK:確認応答

tcpdumpはもとても機能が豊富なツール。また-wオプションで.pcapngファイルに保存して、Wiresharkで見ることもできる。

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。