TCPの状態遷移図
https://plantuml-proxy.vercel.app/svg/https://scrapbox.io/api/code/villagepump/TCPの状態遷移図/tcpstd.pu#.svg
code:tcpstd.pu
@startdot
digraph std {
size ="8.5, 11";
rankdir = TD;
ratio=auto;
label="TCPの状態遷移図";
}
@enddot
code:tcp.mermaid
graph TD
CLOSED -->|パッシブオープン(TCB生成)| LISTEN
CLOSED -->|アクティブオープン(TCB生成とSYNの送信)| SYN_SENT
LISTEN -->|SYNの受信(SYN/ACKの送信)| SYN_RECEIVED
LISTEN -->|クローズ(TCB削除)| CLOSED
LISTEN -->|SENT(SYNの送信)| SYN_SENT
SYN_RECEIVED -->|ACKの受信| ESTABLISHED
SYN_RECEIVED -->|クローズ(FINの送信)| FIN_WAIT_1
SYN_SENT -->|SYN/ACKの受信(ACKの送信)| ESTABLISHED
SYN_SENT -->|SYNの受信(ACKの送信)| SYN_RECEIVED
ESTABLISHED -->|クローズ(FINの送信)| FIN_WAIT_1
FIN_WAIT_1 -->|ACKの受信| FIN_WAIT_2
FIN_WAIT_1 -->|FINの受信(ACKの送信)| CLOSING
FIN_WAIT_1 -->|FIN ACKの受信(ACKの送信)| TIME_WAIT
FIN_WAIT_2 -->|FINの受信(ACKの送信)| TIME_WAIT
CLOSING -->|FIN ACKの受信| TIME_WAIT
TIME_WAIT -->|タイムアウト待ち(TCB削除)| CLOSED
ESTABLISHED -->|FIN ACKの受信| CLOSE_WAIT
CLOSE_WAIT -->|クローズ(FINの送信)| LAST_ACK
LAST_ACK -->|FIN ACKの受信| CLOSED
FIN_WAIT_2の行部分はplantumlの方がレイアウト見やすいなseibe.icon