Linux-網絡分析-netstat

前邊寫了很多關於cpumemory的相關分析,那在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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章