tcp連接狀態

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抓包結果一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章