1、TCP連接狀態
- LISTEN:Server端打開一個socket進行監聽,狀態置為LISTEN
- SYN_SENT:Client端發送SYN請求給Server端,狀態由CLOSED變為SYN_SENT
- SYN_RECV:Server端接收Client端發送的SYN請求,並回應ACK給Client端,同時發送SYN請求給Client端,狀態由LISTEN變為SYN_RECV
- ESTABLISHED:Client端(接收Server端的ACK,狀態由SYN_SENT變為ESTABLISHED)和Server端(接收Client端的ACk,狀態由SYN_RECV變為ESTABLISHED)完成三次握手,狀態置為ESTABLISHED,連接建立
- FIN_WAIT1:主動關閉端發出FIN請求主動關閉連接,狀態由ESTABLISHED變為FIN_WAIT1
- CLOSE_WAIT:被動關閉端接收FIN請求,並回應ACK給主動關閉端,同時將FIN作為文件結束符發送給上層應用程序,狀態由ESTABLISHED變為CLOSE_WAIT
- FIN_WAIT2:主動關閉端接收到ACK,狀態由FIN_WAIT1變為FIN_WAIT2
- LAST_ACK:被動關閉端一段時間后,接收到文件結束符的上層應用程序,調用CLOSE關閉連接,此時被動關閉端會發送FIN請求給主動關閉端,狀態由CLOSE_WAIT變為LAST_ACK
- TIME_WAIT:在主動關閉端接收到FIN請求,並回應ACK給被動關閉端,狀態由FIN_WAIT2變為TIME_WAIT
- CLOSING:兩端同時發起關閉請求時,會由FIN_WAIT1變為CLOSING
- CLOSED:1)被動關閉端收到主動關閉端的ACK,狀態由LAST_ACK變為CLOSED;2)TIME_WAIT狀態一段時間后,狀態自動置為CLOSED
- UNKNOWN:未知的Socket狀態,不正常
- SYN:(同步序列編號,SynchronizeSequence Numbers)該標志僅在三次握手建立TCP連接時有效,表示一個新的TCP連接請求
- ACK:(確認編號,AcknowledgementNumber)是對TCP請求的確認標志,同時提示對端系統已經成功接收所有數據
- FIN:(結束標志,FINish)用來結束一個TCP回話.但對應端口仍處於開放狀態,准備接收后續數據
2、TCP連接建立(三次握手)
3、TCP連接斷開(四次揮手)
4、TCP連接狀態分析
- 若服務器出現了大量TIME_WAIT狀態的連接,說明該服務器經常主動發起連接關閉操作,並且連接還未及時關閉;這一方面會產生大量的無用連接,無故增加tcp的連接數,另一方面就是服務端主動關閉連接也不正常。
- 若一個系統頻繁出現CLOSE_WAIT狀態的連接,說明該系統並未立即處理連接關閉請求;這一方面會產生大量的無用連接,無故增加tcp的連接數,另一方面就是服務端可能阻塞了。