IT・ソフトウェア

TCP のつなぎ方と切り方(状態は 11 個)

TCP のつなぎ方と切り方(つなぐのは 3 通、切るのは 4 通)

クライアントとサーバの命の線を 2 本立て、時間を下に取った梯子図。SYN・SYN+ACK・ACK の 3 通でつなぎ、データを送り、FIN・ACK・FIN・ACK の 4 通で切るまでを矢印で示し、その脇に CLOSED・LISTEN・SYN-SENT・SYN-RECEIVED・ESTABLISHED・FIN-WAIT-1・FIN-WAIT-2・CLOSE-WAIT・LAST-ACK・TIME-WAIT の札を置いた図と、RFC 793 の 11 状態の表

この図は、下の 1 枚の YAML から描かれています。手で図形を動かしてはいません。

正本に書いてある決まりごと

つなぐのは 3 通、切るのは 4 通。 その 1 通の差が、この図の中身。

クライアントが SYN(乱数 A を seq に)を送り、サーバが SYN + ACK(seq に乱数 B、ack に A + 1)を返し、クライアントが ACK(seq に A + 1、ack に B + 1)を返す。3 通。

FIN → ACK → FIN → ACK。 なぜ 4 通かというと、「もう送らない」と「もう受け取らない」が別の話だから。片方が FIN を送ってから相手が FIN を送るまでの間、送り終えたのは片方だけという状態(半クローズ)があり、相手はまだ送れる。 その区間が CLOSE-WAIT と FIN-WAIT-2。

最後の ACK を送った側は、すぐには消えない。最後の ACK が落ちたら、相手は FIN を送り直してくる ——そのとき応えられる者がいないと、相手は待ち続ける。だから 2MSL(RFC 9293 の MSL = 最大セグメント生存時間は 2 分。合わせて 4 分)待つ。実装では 30 秒・1 分・2 分が多い。

CLOSING は、両側が同時に FIN を送ったときだけ通る道なので、この梯子には現れない。

クライアントが ESTABLISHED になるのは、SYN + ACK を受けた時点(最後の ACK を送る前)。サーバは最後の ACK を受けて ESTABLISHED になる。RFC 9293 の Figure 6 がこの順で書いている。

ヘッダのビットの並びは見本 234。状態の説明は RFC 793 の語をそのまま使った。RFC 793 は 2022 年に RFC 9293 で置き換えられた(状態の名前・11 個・MSL 2 分は同じ)。出典:https://www.rfc-editor.org/rfc/rfc9293.html (2026-09-29 取得)

正本(YAML)

examples/gallery/320-TCPのつなぎ方と切り方.zumen.yaml

同じ分野の見本