網(wǎng)絡問題定位工具記錄
老王內(nèi)網(wǎng)發(fā)了一篇使用各種工具定位網(wǎng)絡丟包問題的文章。
里面的工具我發(fā)現(xiàn)都沒用過。。。慚愧。。。趕緊補充linux命令知識。
linux的nstat命令是做什么的?輸出格式是什么意思?
nstat
是一個Linux命令行工具,用于顯示網(wǎng)絡接口的統(tǒng)計信息,包括TCP、UDP、IP和ICMP協(xié)議的數(shù)據(jù)。
該命令的輸出格式如下:
[root@wemeet-wemeet-together-service-stke-formal-0 /app]# nstat#kernelIpInReceives ? ? ? ? ? ? ? ? ? ?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數(shù)據(jù)包數(shù)量IpInDelivers
:已成功交付的IP數(shù)據(jù)包數(shù)量IpOutRequests
:發(fā)送的IP數(shù)據(jù)包數(shù)量TcpActiveOpens
:主動打開的TCP連接數(shù)量TcpPassiveOpens
:被動打開的TCP連接數(shù)量TcpCurrEstab
:當前建立的TCP連接數(shù)量UdpInDatagrams
:接收到的UDP數(shù)據(jù)包數(shù)量UdpOutDatagrams
:發(fā)送的UDP數(shù)據(jù)包數(shù)量UdpNoPorts
:無法處理的UDP數(shù)據(jù)包數(shù)量(即找不到對應的進程)。
這些統(tǒng)計信息對于網(wǎng)絡性能分析和故障排除非常有用。
所以文章中第一個命令
shell> watch -d -n1 "nstat -a | grep -i -E ?'drop|error|fail|loss|overflow'"
意思就是獲取所有的異常連接。
[5 ? ? ? ? ? ? ? ? ?0.0TcpAttemptFails ? ? ? ? ? ? ? ? 2311127 ? ? ? ? ? ?0.0TcpExtTCPLossUndo ? ? ? ? ? ? ? 15515 ? ? ? ? ? ? ?0.0TcpExtTCPSackFailures ? ? ? ? ? 1164 ? ? ? ? ? ? ? 0.0TcpExtTCPLossFailures ? ? ? ? ? 2204 ? ? ? ? ? ? ? 0.0TcpExtTCPLossProbes ? ? ? ? ? ? 6558920 ? ? ? ? ? ?0.0TcpExtTCPLossProbeRecovery ? ? ?28662 ? ? ? ? ? ? ?0.0TcpExtTCPSackRecoveryFail ? ? ? 78405 ? ? ? ? ? ? ?0.0
] IcmpInErrors ? ? ? ? ? ? ? ? ? ?
這幾個網(wǎng)絡接口數(shù)據(jù)信息是什么意思?
IcmpInErrors
:接收到的ICMP錯誤報文數(shù)量。TcpAttemptFails
:TCP連接嘗試失敗的次數(shù),通常由于目標端口未打開或網(wǎng)絡擁塞等原因。TcpExtTCPLossUndo
:TCP重傳數(shù)據(jù)包成功到達目標端口,但之前已經(jīng)由于超時或擁塞丟失,因此被視為“撤銷”丟失的數(shù)據(jù)包數(shù)量。TcpExtTCPSackFailures
:TCP SACK(選擇性確認)失敗的次數(shù),SACK是一種用于減少丟包的技術(shù)。TcpExtTCPLossFailures
:TCP重傳數(shù)據(jù)包失敗的次數(shù),這通常是由于網(wǎng)絡延遲或擁塞導致的。TcpExtTCPLossProbes
:TCP檢測到丟失的數(shù)據(jù)包數(shù)量,通常用于檢測網(wǎng)絡擁塞或丟包。TcpExtTCPLossProbeRecovery
:TCP檢測到丟失的數(shù)據(jù)包恢復的次數(shù)。TcpExtTCPSackRecoveryFail
:TCP SACK恢復失敗的次數(shù)。
在文章中,通過這個工具看出,服務器的 TcpExtTCPLossProbes 指標比較大。
TcpExtTCPLossProbes 是 Linux 內(nèi)核中的一個 TCP 相關(guān)指標,用于記錄 TCP 發(fā)送方因為丟包而觸發(fā)的重傳次數(shù)。如果一個服務器上的 TcpExtTCPLossProbes 指標比較大,說明該服務器上的 TCP 連接存在丟包現(xiàn)象,TCP 發(fā)送方為了保證數(shù)據(jù)可靠性會不斷進行重傳,從而導致了該指標的增加。
TCP 丟包可能由多種原因引起,例如網(wǎng)絡擁塞、鏈路故障、數(shù)據(jù)包篡改等。在排查該問題時,可以通過檢查服務器上的系統(tǒng)日志或 TCP 報文捕獲數(shù)據(jù)包進行進一步分析,以確定具體的原因,并采取相應的措施進行修復。例如,可以嘗試優(yōu)化網(wǎng)絡拓撲、調(diào)整 TCP 參數(shù)等方式來緩解該問題。
文章的中間是使用bcc工具來分析重試的端口,最終確認是80端口。
然后用ngrep工具來抓取某個ip的所有請求
ngrep工具是用來做什么的?
ngrep 是一種網(wǎng)絡分析工具,用于捕獲和分析網(wǎng)絡數(shù)據(jù)包。它可以通過指定匹配規(guī)則來篩選和捕獲特定的數(shù)據(jù)包,以便于對網(wǎng)絡流量進行監(jiān)控和分析。ngrep 支持的匹配規(guī)則包括基于字符串、正則表達式、16進制值等多種方式。同時,ngrep 還提供了許多選項和過濾器,可以用于控制輸出、限制捕獲數(shù)據(jù)包的數(shù)量、過濾掉不感興趣的數(shù)據(jù)包等。
ngrep 工具常用于網(wǎng)絡故障排查、安全監(jiān)控、流量分析、協(xié)議分析等場景。例如,可以使用 ngrep 來捕獲某個應用程序所發(fā)送和接收的數(shù)據(jù)包,以便于了解應用程序的行為和性能瓶頸;也可以使用 ngrep 來檢測和分析網(wǎng)絡攻擊行為,例如檢測惡意軟件的行為、分析網(wǎng)絡釣魚攻擊等。
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
?參數(shù)來關(guān)閉詳細輸出,并使用了?-W byline
?參數(shù)將每個匹配的行分開顯示。它還使用了兩個過濾器來捕獲目標 IP 為 1.2.3.4 的所有 TCP 流量,并匹配所有包含?Host:
?的 HTTP 請求頭部。要注意的是,此命令假定 HTTP 請求是通過 TCP 端口 80 進行傳輸?shù)模绻东@其他端口的 HTTP 請求,請相應地修改命令。