Java網絡編程系列之TCP連接狀態


1、TCP連接狀態

  1. LISTEN:Server端打開一個socket進行監聽,狀態置為LISTEN
  2. SYN_SENT:Client端發送SYN請求給Server端,狀態由CLOSED變為SYN_SENT
  3. SYN_RECV:Server端接收Client端發送的SYN請求,並回應ACK給Client端,同時發送SYN請求給Client端,狀態由LISTEN變為SYN_RECV
  4. ESTABLISHED:Client端(接收Server端的ACK,狀態由SYN_SENT變為ESTABLISHED)和Server端(接收Client端的ACk,狀態由SYN_RECV變為ESTABLISHED)完成三次握手,狀態置為ESTABLISHED,連接建立
  5. FIN_WAIT1:主動關閉端發出FIN請求主動關閉連接,狀態由ESTABLISHED變為FIN_WAIT1
  6. CLOSE_WAIT:被動關閉端接收FIN請求,並回應ACK給主動關閉端,同時將FIN作為文件結束符發送給上層應用程序,狀態由ESTABLISHED變為CLOSE_WAIT
  7. FIN_WAIT2:主動關閉端接收到ACK,狀態由FIN_WAIT1變為FIN_WAIT2
  8. LAST_ACK:被動關閉端一段時間后,接收到文件結束符的上層應用程序,調用CLOSE關閉連接,此時被動關閉端會發送FIN請求給主動關閉端,狀態由CLOSE_WAIT變為LAST_ACK
  9. TIME_WAIT:在主動關閉端接收到FIN請求,並回應ACK給被動關閉端,狀態由FIN_WAIT2變為TIME_WAIT
  10. CLOSING:兩端同時發起關閉請求時,會由FIN_WAIT1變為CLOSING
  11. CLOSED:1)被動關閉端收到主動關閉端的ACK,狀態由LAST_ACK變為CLOSED;2)TIME_WAIT狀態一段時間后,狀態自動置為CLOSED
  12. UNKNOWN:未知的Socket狀態,不正常
  • SYN:(同步序列編號,SynchronizeSequence Numbers)該標志僅在三次握手建立TCP連接時有效,表示一個新的TCP連接請求
  • ACK:(確認編號,AcknowledgementNumber)是對TCP請求的確認標志,同時提示對端系統已經成功接收所有數據
  • FIN:(結束標志,FINish)用來結束一個TCP回話.但對應端口仍處於開放狀態,准備接收后續數據

2、TCP連接建立(三次握手)

3、TCP連接斷開(四次揮手)

4、TCP連接狀態分析

  1. 若服務器出現了大量TIME_WAIT狀態的連接,說明該服務器經常主動發起連接關閉操作,並且連接還未及時關閉;這一方面會產生大量的無用連接,無故增加tcp的連接數,另一方面就是服務端主動關閉連接也不正常。
  2. 若一個系統頻繁出現CLOSE_WAIT狀態的連接,說明該系統並未立即處理連接關閉請求;這一方面會產生大量的無用連接,無故增加tcp的連接數,另一方面就是服務端可能阻塞了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM