网络问题定位工具记录

时间:2022-03-16 00:38:57

老王内网发了一篇使用各种工具定位网络丢包问题的文章。

里面的工具我发现都没用过。。。惭愧。。。赶紧补充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 请求,请相应地修改命令。