tcp的定時器timer: https://learningnetwork.cisco.com/thread/47664
tcp狀態改變: http://ahuaxuan.iteye.com/blog/657511/
http://www.cnblogs.com/sunxucool/p/3449068.html
tcp關閉連接
MySQL timeout
mysql有兩個timeout,一個是wait_timeout,一個是 interactive_timeout。分別對應交互式窗口(interactive_timeout),和非交互式窗口。在客戶端沒有請求,超過多長時間後,mysql服務器自動關閉連接。
設置超時時間爲150秒:
mysql> show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 150 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 3600 |
| wait_timeout | 150 |
+-----------------------------+----------+
12 rows in set (0.00 sec)
具體的連接爲:
圖中倒數第5行,服務器3306端口開始主動關閉tcp連接.然後服務器進去FIN_WAIT2狀態,然後經過tcp_fin_timeout時間後,服務端socket進入closed狀態。
而客戶端沒有主動去調用socket.close,所以一直處於CLOSE_WAIT狀態. 客戶端tcp開啓了keepalive功能,經過keepalive_idle_time時間後,發起keepalive probe探測包。然後服務器返回了一個RST tcp包,客戶端才關閉連接。
此處(mac系統)
net.inet.tcp.keepidle: 600000
mac的單位是毫秒,此處設置的keepalive_idle_time是 10分鐘,和wiresharek抓包結果一致。