老王內網發了一篇使用各種工具定位網路丟包問題的文章。
裡面的工具我發現都沒用過。。。慚愧。。。趕緊補充linux命令知識。
nstat
是一個Linux命令列工具,用於顯示網路介面的統計資訊,包括TCP、UDP、IP和ICMP協定的資料。
該命令的輸出格式如下:
[root@wemeet-wemeet-together-service-stke-formal-0 /app]# nstat
#kernel
IpInReceives 551070 0.0
IpInDelivers 551006 0.0
IpOutRequests 296793 0.0
IpReasmReqds 82 0.0
IpReasmOKs 18 0.0
IcmpInMsgs 170 0.0
IcmpInEchos 170 0.0
IcmpOutMsgs 170 0.0
IcmpOutEchoReps 170 0.0
其中,每個欄位的含義如下:
IpInReceives
:接收到的IP封包數量IpInDelivers
:已成功交付的IP封包數量IpOutRequests
:傳送的IP封包數量TcpActiveOpens
:主動開啟的TCP連線數量TcpPassiveOpens
:被動開啟的TCP連線數量TcpCurrEstab
:當前建立的TCP連線數量UdpInDatagrams
:接收到的UDP封包數量UdpOutDatagrams
:傳送的UDP封包數量UdpNoPorts
:無法處理的UDP封包數量(即找不到對應的程序)。這些統計資訊對於網路效能分析和故障排除非常有用。
所以文章中第一個命令
shell> watch -d -n1 "nstat -a | grep -i -E 'drop|error|fail|loss|overflow'"
意思就是獲取所有的異常連線。
[root@wemeet-wemeet-together-service-stke-formal-0 /app]# nstat -a | grep -i -E 'drop|error|fail|loss|overflow'
IcmpInErrors 5 0.0
TcpAttemptFails 2311127 0.0
TcpExtTCPLossUndo 15515 0.0
TcpExtTCPSackFailures 1164 0.0
TcpExtTCPLossFailures 2204 0.0
TcpExtTCPLossProbes 6558920 0.0
TcpExtTCPLossProbeRecovery 28662 0.0
TcpExtTCPSackRecoveryFail 78405 0.0
這幾個網路介面資料資訊是什麼意思?
IcmpInErrors
:接收到的ICMP錯誤報文數量。TcpAttemptFails
:TCP連線嘗試失敗的次數,通常由於目標埠未開啟或網路擁塞等原因。TcpExtTCPLossUndo
:TCP重傳封包成功到達目標埠,但之前已經由於超時或擁塞丟失,因此被視為「復原」丟失的封包數量。TcpExtTCPSackFailures
:TCP SACK(選擇性確認)失敗的次數,SACK是一種用於減少丟包的技術。TcpExtTCPLossFailures
:TCP重傳封包失敗的次數,這通常是由於網路延遲或擁塞導致的。TcpExtTCPLossProbes
:TCP檢測到丟失的封包數量,通常用於檢測網路擁塞或丟包。TcpExtTCPLossProbeRecovery
:TCP檢測到丟失的封包恢復的次數。TcpExtTCPSackRecoveryFail
:TCP SACK恢復失敗的次數。在文章中,通過這個工具看出,伺服器的 TcpExtTCPLossProbes 指標比較大。
TcpExtTCPLossProbes 是 Linux 核心中的一個 TCP 相關指標,用於記錄 TCP 傳送方因為丟包而觸發的重傳次數。如果一個伺服器上的 TcpExtTCPLossProbes 指標比較大,說明該伺服器上的 TCP 連線存在丟包現象,TCP 傳送方為了保證資料可靠性會不斷進行重傳,從而導致了該指標的增加。
TCP 丟包可能由多種原因引起,例如網路擁塞、鏈路故障、封包篡改等。在排查該問題時,可以通過檢查伺服器上的系統紀錄檔或 TCP 報文捕獲封包進行進一步分析,以確定具體的原因,並採取相應的措施進行修復。例如,可以嘗試優化網路拓撲、調整 TCP 引數等方式來緩解該問題。
文章的中間是使用bcc工具來分析重試的埠,最終確認是80埠。
然後用ngrep工具來抓取某個ip的所有請求
ngrep 是一種網路分析工具,用於捕獲和分析網路封包。它可以通過指定匹配規則來篩選和捕獲特定的封包,以便於對網路流量進行監控和分析。ngrep 支援的匹配規則包括基於字串、正規表示式、16進位制值等多種方式。同時,ngrep 還提供了許多選項和過濾器,可以用於控制輸出、限制捕獲封包的數量、過濾掉不感興趣的封包等。
ngrep 工具常用於網路故障排查、安全監控、流量分析、協定分析等場景。例如,可以使用 ngrep 來捕獲某個應用程式所傳送和接收的封包,以便於瞭解應用程式的行為和效能瓶頸;也可以使用 ngrep 來檢測和分析網路攻擊行為,例如檢測惡意軟體的行為、分析網路釣魚攻擊等。
ngrep 抓取目標ip為1.2.3.4的所有http請求,如何寫命令列?
可以使用如下命令列來抓取目標 IP 為 1.2.3.4 的所有 HTTP 請求:
ngrep -q -W byline 'Host: ' 'tcp and dst host 1.2.3.4 and tcp dst port 80'
這個命令使用了 -q
引數來關閉詳細輸出,並使用了 -W byline
引數將每個匹配的行分開顯示。它還使用了兩個過濾器來捕獲目標 IP 為 1.2.3.4 的所有 TCP 流量,並匹配所有包含 Host:
的 HTTP 請求頭部。要注意的是,此命令假定 HTTP 請求是通過 TCP 埠 80 進行傳輸的,如果要捕獲其他埠的 HTTP 請求,請相應地修改命令。
、
實時瞭解作者更多技術文章,技術心得,請關注微信公眾號「軒脈刃的刀光劍影」
本文基於署名-非商業性使用 3.0許可協定釋出,歡迎轉載,演繹,但是必須保留本文的署名葉劍峰(包含連結http://www.cnblogs.com/yjf512/),且不得用於商業目的。如您有任何疑問或者授權方面的協商,請與我聯絡。