老王内网发了一篇使用各种工具定位网络丢包问题的文章。
里面的工具我发现都没用过。。。惭愧。。。赶紧补充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 请求,请相应地修改命令。
、