%%{init: {'theme':'forest'}}%%
sequenceDiagram
participant Client as クライアント(nc)
participant Kernel as Linuxカーネル(TCPスタック)
participant Program as プログラム(Raw Socket)
Note over Client,Program: ① 3ウェイハンドシェイク
Client->>Kernel: SYN (lo)
Kernel->>Program: SYN
Note right of Program: 受信
Kernel--xClient: RST (blocked!)
Note left of Kernel: iptablesで破棄
Note right of Program: SYN-ACK作成
Program->>Client: SYN-ACK (lo)
Note right of Program: 送信
Client->>Kernel: ACK (lo)
Kernel->>Program: ACK
Note right of Program: 受信 Established
Note over Client,Program: ② データ交換
Client->>Kernel: PSH+ACK ("toppage") (lo)
Kernel->>Program: PSH+ACK ("toppage")
Note right of Program: 受信 コマンド解析
Program->>Client: PSH+ACK ("hello world") (lo)
Note right of Program: 送信
Client->>Kernel: ACK (lo)
Kernel->>Program: ACK
Note right of Program: 受信
Note over Client,Program: ③ 接続クローズ
Program->>Client: FIN+ACK (lo)
Note right of Program: 送信 接続リセット
Client->>Kernel: FIN+ACK (lo)
Kernel->>Program: FIN+ACK
Note right of Program: (無視)
Note left of Client: 終了
Note over Kernel: 無視
Note right of Program: 次の接続待機
mysql> SHOW VARIABLES LIKE 'wait_timeout'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | wait_timeout | 28800 | +---------------+-------+ 1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'interactive_timeout'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | interactive_timeout | 28800 | +---------------------+-------+ 1 row in set (0.00 sec)
じゃあ対話型じゃない場合はどうなるかっていうと
1 2 3 4 5 6 7
% mysql -u root -e "show variables like 'wait_timeout'"
mysql> SHOW VARIABLES LIKE 'interactive_timeout'; +---------------------+-------+ | Variable_name | Value | +---------------------+-------+ | interactive_timeout | 5 | +---------------------+-------+ 1 row in set (0.00 sec)
5秒待って再度クエリ実行
見事gone away!
1 2
mysql> SHOW VARIABLES LIKE 'interactive_timeout'; ERROR 2013 (HY000): Lost connection to MySQL server during query