網路問題定位工具記錄
老王內網發了一篇使用各種工具定位網路丟包問題的文章。
裡面的工具我發現都沒用過。。。慚愧。。。趕緊補充linux命令知識。
linux的nstat命令是做什麼的?輸出格式是什麼意思?
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 是一種網路分析工具,用於捕獲和分析網路資料包。它可以透過指定匹配規則來篩選和捕獲特定的資料包,以便於對網路流量進行監控和分析。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 請求,請相應地修改命令。
、