雪花新聞

終於搞懂了 TCP 的 11 種狀態 ,太不容易了…

本來想寫運維過程中,nginx 服務器中 time_wait 的相關測試及解決方法的,然後發現TCP 的狀態需要先鋪墊一下,於是就整理了這篇文章。

網上很多大佬整理TCP三次握手、四次揮手,看到過很多人寫,但其實從運維角度來說,我們分析 TCP 鏈接狀態的時候,首先是用 netstat ss 來查看。

之後纔會根據 TCP 狀態的情況進行抓包分析,進一步確認一些問題,所以我們首先看到的會是 TCP 的狀態,那麼就需要很清楚的瞭解 TCP 的11種狀態代表着什麼。

TCP 的11種狀態分別對應 TCP 三次握手過程的5種狀態和TCP四次揮手斷開過程中的6種狀態。

如上圖,就是11種狀態,在整個TCP建立連接和斷開連接的整個過程

下面我用 tcpdump 抓了個完整的客戶端和服務端的三次握手和四次揮手的包,可以對應上面的狀態圖

下面分開來詳細看,首先是三次握手

上面這個圖就是完整的三次握手過程

整個過程中對應的TCP狀態如下:

以上就是三次握手的五種TCP狀態,單從客戶端服務端角度來區分的話,CLOSED和ESTABLISHED會在客戶端和服務端都出現,而LISTEN和SYN_RCVD通常是出現在服務端,SYN_SENT出現在客戶端

但通常在服務器和客戶端並不是絕對的,比如 Nginx 的服務器中,Nginx 通常作爲 web 代理服務器,它既是服務端,也是客戶端,所以在查詢統計 TCP 狀態的時候,最好通過匹配端口來區分是客戶端的還是服務端的,來更精確的定位問題。

接着看四次揮手的狀態

以上就是四次揮手的6種狀態,瞭解了每個狀態的詳細含義,就可以在性能調優及故障排查中快速定位問題,調整相關參數。

如文章開頭說的一樣,整理這篇主要是鋪墊後面想整理的 nginx 中常見的 TIME_WAIT 的問題,TIME_WAIT 必須快速回收處理嗎?TIME_WAIT 多少算多,會有什麼影響,什麼時候會產生大量的 TIME_WAIT,除了快速回收和重複利用,還有什麼方法可以解決TIME_WAIT 的問題,下篇文章繼續!

來源:本文來源於公衆號運維研習社。

倒計時1天,GNSEC 2020 全球新一代軟件工程線上峯會馬上就要開始了!

抓緊最後的機會,掃描下方二維碼立即報名

近期好文:

一個因 CA 根證書過期引起的故障,真相竟然是…

一文搞懂什麼是 vlan、三層交換機、網關、DNS、子網掩碼、MAC地址

“高效運維”公衆號誠邀廣大技術人員投稿,

投稿郵箱:jiachen@greatops.net,或添加聯繫人微信:greatops1118.

點擊閱讀原文,進入“GNSEC 線上峯會”官網

點個“在看”,一年不宕機

相關文章