TCP四次揮手過程:
1、第一次揮手:Client發送一個FIN,用來關閉Client到Server的數據傳送,Client進入FIN_WAIT_1狀態;
2、第二次揮手:Server收到FIN后,發送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進入CLOSE_WAIT狀態;
3、第三次揮手:Server發送一個FIN,用來關閉Server到Client的數據傳送,Server進入LAST_ACK狀態;
4、第四次揮手:Client收到FIN后,Client進入TIME_WAIT狀態,接着發送一個ACK給Server,確認序號為收到的序號+1,Server進入CLOSED狀態,完成四次揮手;
為什么會有TIME_WAIT狀態:
1、確保有足夠的時間讓對方收到ACK包,一來一去就是2MSL;
2、避免新舊連接混,即不會跟后面的新連接混淆;
服務器出現大量CLOSE_WAIT狀態的原因:
原因:沒有及時關閉連接
解決方案:
1、檢查代碼,特別是釋放資源的代碼;
2、檢查配置,特別是處理請求的線程配置;