momo's Blog.

记录一次问题抓包

字数统计: 438阅读时长: 1 min
2022/02/22 Share

前言

因为服务要从公网连接Redis, 而走公网延迟又不稳定,所以通过专线走了内网。

完整的链路是这样的的, Node -> 内网Nginx -> GCP内网 -> 阿里云专线 -> 阿里云内网Redis

所以, 我们需要让应用连接到内网的Nginx端口.

但是在配置过程中却发现了一个奇怪的事情。 明明配置了指定的IP,但是程序连接的时候却直接连接到了阿里云的内网Redis IP。

解决

在出现问题的节点上抓6379端口的包

1
tcpdump tcp port 6379  -i ens33 -w /tmp/6379_save.cap

拖到 wireshark 里面看看.

说实话,其实第一次抓包看起来并没有什么头绪,因为你没办法定位到为什么会连接错IP。 只是单纯的看到客户端一直在发SYN,然后没有ACK响应。

重新理了一遍逻辑,通过

netstat -anput | grep dotnet

实际上发现, 业务有一部分在连正常的IP端口. 之前分析数据包也能看出来一部分正常一部分异常。

研发怀疑是Redis连接池的问题, 但是配置也仅仅只有一个配置,为什么会出现这种情况呢?

仔细从第一次程序发送错误的IP,SYN数据往上回溯, 终于发现了端倪。

可以看到, 程序在连接redis成功以后, 发了一个cluster nodes的命令。

Redis正常返回了数据, 其中的内容刚好是Redis内网的端口, 并且在下一步, 立马出现了对于这个IP建立连接的SYN请求.

总结

这种抓包还是要从出问题的地方往上翻一下才行。。

CATALOG
  1. 1. 前言
  2. 2. 解决
  3. 3. 总结