網路問題定位工具記錄

2023-03-03 12:03:10

網路問題定位工具記錄

老王內網發了一篇使用各種工具定位網路丟包問題的文章。

裡面的工具我發現都沒用過。。。慚愧。。。趕緊補充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 請求,請相應地修改命令。