5

网络问题定位工具记录 - 轩脉刃

 1 year ago
source link: https://www.cnblogs.com/yjf512/p/17174669.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

网络问题定位工具记录

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK