Linux-網路分析-netstat__Linux
來源:互聯網
上載者:User
前邊寫了很多關於 cpu 與 memory 的相關分析,那在linux下,該如何查看本機網路相關的情況呢。 使用: netstat
netstat是在核心中訪問網路及相關資訊的程式 ,一般用於檢驗本機各連接埠的網路連接情況,它能提供 TCP串連,TCP和UDP監聽 ,進程記憶體管理的相關報告 。
一. netstat分析 二. 常用命令 三. 網路連接state狀態詳解
本文三個部分,敘述了常用命令, 以及tcp/ip體系傳輸層的三向交握四次揮手示意即狀態詳解,如果瞭解了這個過程,對在以後的編程中碰到什麼問題,解決起來也是有協助的。 比如: 用戶端在第三次揮手後進入 time_wait狀態,那麼問題來了,當我們碰到這種狀態過多,該 如何解決Time_Wait過多造成的問題。。
一. netstat分析 事實上,netstat是若干個工具的匯總。 1.顯示路由表2.顯示介面特性3.顯示連結 從整體上看,netstat的輸出結果可以分為兩個部分, 1. Active Internet connections,稱為有源TCP串連 2. Active UNIX domain sockets,稱為有源Unix域套介面 。在上面的輸出結果中,第一部分有5個輸出結果,顯示有源TCP串連的情況,而第二部分的輸出結果顯示的是Unix域套介面的串連情況。Proto顯示串連使用的協議;RefCnt表示串連到本套介面上的進程號;Types顯示套介面的類型;State顯示套介面當前的狀態;Path表示串連到套介面的其它進程使用的路徑名。
二. 常用命令
1. netstat -t : 列出 TCP 協議的串連 (或-at,動態顯示)
2. netstat -u : 列出 UDP 協議的串連 (或-au,動態顯示)
3. netstat -p : 選項查看進程資訊
查看連接埠和串連的資訊時,能查看到它們對應的進程名和進程號對系統管理員來說是非常有協助的。舉個栗子,Apache 的 httpd 服務開啟80連接埠,如果你要查看 http 服務是否已經啟動,或者 http 服務是由 apache 還是 nginx 啟動的,這時候你可以看看進程名。
4.尋找較多的time_wait串連 netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.尋找較多的串連 netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
三. 網路連接state狀態詳解
共有12中可能的狀態,前面11種是按照TCP串連建立的 三向交握 和TCP串連斷開的 四次揮手 過程來描述的。 TCP協議:三向交握,四次揮手.note
1)、LISTEN:首先服務端需要開啟一個socket進行監聽,狀態為LISTEN. 2)、SYN_SENT:用戶端通過應用程式調用connect進行active open.於是用戶端tcp發送一個SYN以請求建立一個串連.之後狀態置為SYN_SENT. 【用戶端:第一次握手後的狀態】 3)、SYN_RECV:服務端應發出ACK確認用戶端的 SYN,同時自己向用戶端發送一個SYN. 之後狀態置為SYN_RECV 【服務端:第一次握手後的狀態】 4)、
ESTABLISHED : 代表一個開啟的串連,雙方可以進行或已經在資料互動了。 【用戶端:第二次握手後的狀態;服務端:第三向交握後的狀態】
5)、FIN_WAIT1:主動關閉(active close)端應用程式調用close,於是其TCP發出FIN請求主動關閉串連,之後進入FIN_WAIT1狀態. 【用戶端:第一次揮手後的狀態】 6)、CLOSE_WAIT:被動關閉(passive close)端TCP接到FIN後,就發出ACK以回應FIN請求(它的接收也作為檔案結束符傳遞給上層應用程式),並進入CLOSE_WAIT. 【服務端:第二次揮手後的狀態】 7)、FIN_WAIT2:主動關閉端接到ACK後,就進入了 FIN-WAIT-2 . 【用戶端:第二次揮手後的狀態】 8)、LAST_ACK:被動關閉端一段時間後,接收到檔案結束符的應用程式將調用CLOSE關閉串連。這導致它的TCP也發送一個 FIN,等待對方的ACK.就進入了LAST-ACK . 【服務端:第三次揮手後的狀態】 9)、
TIME_WAIT :在主動關閉端接收到FIN後,TCP 就發送ACK包,並進入TIME-WAIT狀態。【blog: 解決TIME_WAIT過多造成的問題 】 【用戶端:第三次揮手後的狀態】 10)、CLOSING: 比較少見. 11)、CLOSED: 被動關閉端在接受到ACK包後,就進入了closed的狀態。串連結束. 【服務端:第四次揮手後的狀態】 12)、UNKNOWN: 未知的Socket狀態。
SYN: (同步序列編號,Synchronize Sequence Numbers)該標誌僅在三向交握建立TCP串連時有效。表示一個新的TCP串連請求。 ACK: (確認編號,Acknowledgement Number)是對TCP請求的確認標誌,同時提示對端系統已經成功接收所有資料。 FIN: (結束標誌,FINish)用來結束一個TCP回話.但對應連接埠仍處於開放狀態,準備接收後續資料。
參考文章:
netstat 的10個基本用法 https://linux.cn/article-2434-1.html
netstat命令及日誌分析命令 http://www.2cto.com/os/201308/240205.html
本文出處:http://blog.csdn.net/ty_hf/article/details/63404219