0x01 现象

本来正常的Zookeeper选举连接,过一段时间会突然异常,重新选举,查看日志提示连接被Reset掉了。

java.net.SocketException: Connection reset

各个实例的日志都查看了,也没找到异常点。
没办法,只能抓包了。同事使用tcpdump抓了包,使用wireshark打开看了,也没有看到什么异常。正常的连接,会突然收到一个RST包。

本来对ZooKeeper了解不多,但有接触过,也被拉着一起排查。
同事排除了SSL的影响,我一开始的怀疑点是数据包损坏,但数据包损坏的话,应该有重传发生,根据抓的包看,并没有发现重传,这个方向应该不对。

其他可能的原因就只有两个了。

  1. ZooKeeper本身未知的问题;
  2. 某些流量中的pattern触发了网络设备的防护机制。

同事反馈这个环境里的ZooKeeper实例是在同一个二层网络中,也就是说并没有跨网络设备。鉴于1的可能性也比较小,就目前手头有的输入来说,就只有抓到的包,还是按照2的方向排查下。

0x02 IP协议细节

2.1 identity字段

通过对比正常和异常的数据包,发现有以下异常。

正常包的identity字段是逐渐递增的。
而RST的包只有0和固定的23352(经过了修改)。查询资料1,有的说是可以标识IP包来源的,有的说没有特别含义,只是分片后在目标端用来重组IP数据包。跟同事反馈了,算是一个线索,但并没被完全认可。不能完全证实是网络设备发送的RST包。

正常RST为0。

Identification: 0x0000 (0)

异常RST的(以下信息经过了修改)。

Identification: 0x8882 (23352)

2.2 TTL字段

这个字段学习过IP协议的同学都知道,是用来标识一个报文在网络中的生存跳数,每过一次路由器,TTL就会减1,避免报文无限制转发。

同样注意到异常RST包的TTL有两个值,一个是64,一个128。通过比较正常报文发现,正常报文的也是64。通过右键字段,可以将其“应用为列”,展示在wireshark报文列表中,更直观看出。

这个字段可以作为有效证据,证实确实有网络设备发送了TCP RST包。

那到底是什么设备发送的?还有另外一个直接线索。

0x03 额外的直接线索

由于wireshark默认展示到列表中的字段有有限,很多细节需要自己去对比。比如这个问题中最重要的线索,MAC地址。这是同事发现的,前面说的异常的源MAC地址,跟其他数据报文的明显不同,writeshark直接展示为

Ethernet II, Src: Shenzhen_xx:xx:xx (xx:xx:xx:xx:xx:xx),
...

正常的

Ethernet II, Src: xx:xx:xx:xx:xx:xx (xx:xx:xx:xx:xx:xx),
...

另外一个非集群成员的设备伪装发送了一个RST包。正式结案。

0x04 结论

证实了是网络设备发出的RST包,还没结案。为什么二层网络中,会经过网络设备?

这个问题咨询了这方案的专家,得到的答复是:

交换机开启了STP协议,STP震荡导致了交换机的FDB表刷乱了,导致一些二层包,转到了网络设备上,触发了网络设备的默认防护行为,连接被Reset。

STP是交换机中软件层面用来防止环路的一种协议,也确认证实当时的环境有开启。

0x05 总结

排查过程先注意到IP协议中identity字段,然后注意到TTL字段,最直接的链路层的src MAC最后才注意到,一开始并没有找到最关键的点。协议用时方恨了解的少。

ZooKeeper TCP连接被防火墙阻断排查过程相关推荐

  1. 多队列 部分队列没有包_记一次TCP全队列溢出问题排查过程

    简介:记一次TCP全队列溢出问题排查过程 1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家. 2. 问题描述 ...

  2. TCP连接的建立和释放过程详解(三次握手、四次挥手)

    1. TCP是基于连接的协议 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.所谓面向连接,是指通信双方在进行通 ...

  3. 查看TCP连接状态及问题排查

    一.连接状态 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WA ...

  4. 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...

  5. 访问windows 共享提示找不到网络路径 排查过程

    阅读原文请点击 摘要: windows共享访问提示 "0x80070035 找不到网络路径" 网络服务异常,抓包可以一针见血看清过程 问题现象 windows 2008 系统搭建的 ...

  6. TCP/IP 笔记 - TCP连接管理

    TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...

  7. 《计算机网络》实验报告——使用SNORT观察网络数据包和TCP连接

    实验名称:使用SNORT观察网络数据包和TCP连接 实验地点: 所使用的工具软件及环境: Windows ,snort.winpcap 一.实验目的: 通过本实验,熟悉SNORT的使用,通过抓包分析, ...

  8. 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”

    作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念 ...

  9. 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”

    作者 |  AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概 ...

最新文章

  1. IT职场人生系列之二十二:如何学习新语言(二)
  2. 网络推广团队分享新手必看的长尾关键词挖掘技巧!
  3. ABAP动态取得数据的方法
  4. 安卓中AIDL的使用方法快速入门
  5. neo4j-admin导入海量数据
  6. 页面中color颜色值_计算机毕业设计中实现一个简易美观的登录界面
  7. 【NOIP2015提高组】子串 区间DP+滚动数组优化
  8. 3K 万能JQuery弹出层类库
  9. 01屏幕增强 sap_SAP (MM01 MM02 MM03)屏幕增强
  10. PNG免抠素材教你如何设计一张有创意的中秋节热点海报?
  11. 分布式为什么使用python
  12. jsp银行排队叫号系统
  13. 使用linux批量引物设计,使用NCBI-ePCR和Primer3进行引物批量化设计
  14. java 设置表头字体_Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)...
  15. win7 共享wifi 手机如何上网
  16. flutter小控件备忘
  17. 基本概念学习(7003)---网络流量
  18. Android GPS根据经度获取时区
  19. C++学习 控制程序的流程
  20. htc+one+m7+linux驱动,htc one m7刷入recovery的教程

热门文章

  1. java实现装饰模式,JAVA实现装饰模式
  2. jQuery中replaceWith()方法与unwarp()方法
  3. 书评 — 凯文·凯利《失控》
  4. 经纬度与高克投影转换代码(VB)
  5. ddd理论层次-by banq
  6. [图像检索] paddleclas pp-shitu v1/v2
  7. [Luogu P2257] YY的GCD (莫比乌斯函数)
  8. 数据库(MySQL)概念和操作
  9. 弘玑Cyclone RPA为国金证券提供技术支撑,超200个业务场景实现流程自动化
  10. 魏晋南北朝修谱之风盛行,家谱数量剧增,为什么会形成这种风气?