TCP
トランスミッションコントロールプロトコル
Transmission Control Protocol
https://plantuml-proxy.vercel.app/svg/https://scrapbox.io/api/code/suto3/TCP/tcpstd.pu#.svg
code:tcpstd.pu
@startdot
digraph std {
size ="8.5, 11";
rankdir = TD;
ratio=auto;
label="TCPの状態遷移図";
node fontsize = 12, shape = box, style=rounded;
edge fontsize = 10;
"CLOSED"->"LISTEN" label="パッシブオープン(TCB生成)";
"CLOSED"->"SYN_SENT" label="アクティブオープン(TCB生成とSYNの送信)";
"LISTEN"->"SYN_RECEIVED" label="SYNの受信(SYN/ACKの送信)";
"LISTEN"->"CLOSED" label="クローズ(TCB削除)";
"LISTEN"->"SYN_SENT" label="SENT(SYNの送信)";
"SYN_RECEIVED"->"ESTABLISHED" label="ACKの受信";
"SYN_RECEIVED"->"FIN_WAIT_1" label="クローズ(FINの送信)";
"SYN_SENT"->"ESTABLISHED" label="SYN/ACKの受信(ACKの送信)";
"SYN_SENT"->"SYN_RECEIVED" label="SYNの受信(ACKの送信)";
"ESTABLISHED"->"FIN_WAIT_1" label="クローズ(FINの送信)";
"FIN_WAIT_1"->"FIN_WAIT_2" label="ACKの受信";
"FIN_WAIT_1"->"CLOSING" label="FINの受信(ACKの送信)";
"FIN_WAIT_1"->"TIME_WAIT" label="FIN ACKの受信(ACKの送信)";
"FIN_WAIT_2"->"TIME_WAIT" label="FINの受信(ACKの送信)";
"CLOSING"->"TIME_WAIT" label="FIN ACKの受信";
"TIME_WAIT"->"CLOSED" label="タイムアウト待ち(TCB削除)";
"ESTABLISHED"->"CLOSE_WAIT" label="FIN ACKの受信";
"CLOSE_WAIT"->"LAST_ACK" label="クローズ(FINの送信)";
"LAST_ACK"->"CLOSED" label="FIN ACKの受信";
}
@enddot