ZooKeeper TCP连接被防火墙阻断排查过程
0x01 现象
本来正常的Zookeeper选举连接,过一段时间会突然异常,重新选举,查看日志提示连接被Reset掉了。
java.net.SocketException: Connection reset
各个实例的日志都查看了,也没找到异常点。
没办法,只能抓包了。同事使用tcpdump抓了包,使用wireshark打开看了,也没有看到什么异常。正常的连接,会突然收到一个RST包。
本来对ZooKeeper了解不多,但有接触过,也被拉着一起排查。
同事排除了SSL的影响,我一开始的怀疑点是数据包损坏,但数据包损坏的话,应该有重传发生,根据抓的包看,并没有发现重传,这个方向应该不对。
其他可能的原因就只有两个了。
- ZooKeeper本身未知的问题;
- 某些流量中的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连接被防火墙阻断排查过程相关推荐
- 多队列 部分队列没有包_记一次TCP全队列溢出问题排查过程
简介:记一次TCP全队列溢出问题排查过程 1. 前言 本文排查的问题是经典的TCP队列溢出问题,因TCP队列问题在操作系统层面没有明显的指标异常,容易被忽略,故把排查过程分享给大家. 2. 问题描述 ...
- TCP连接的建立和释放过程详解(三次握手、四次挥手)
1. TCP是基于连接的协议 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.所谓面向连接,是指通信双方在进行通 ...
- 查看TCP连接状态及问题排查
一.连接状态 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:正常数据传输状态 FIN_WA ...
- 网络七层协议 五层模型 TCP连接 HTTP连接 socket套接字
socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...
- 访问windows 共享提示找不到网络路径 排查过程
阅读原文请点击 摘要: windows共享访问提示 "0x80070035 找不到网络路径" 网络服务异常,抓包可以一针见血看清过程 问题现象 windows 2008 系统搭建的 ...
- TCP/IP 笔记 - TCP连接管理
TCP是一种面向连接的单播协议,在发送数据之前,通信双方必须在彼此建立一条连接:这与UDP的无连接不同,UDP无需通信双方发送数据之前建立连接.所有TCP需要处理多种TCP状态时需要面对的问题,比如连 ...
- 《计算机网络》实验报告——使用SNORT观察网络数据包和TCP连接
实验名称:使用SNORT观察网络数据包和TCP连接 实验地点: 所使用的工具软件及环境: Windows ,snort.winpcap 一.实验目的: 通过本实验,熟悉SNORT的使用,通过抓包分析, ...
- 三次握手和四次挥手图解_详解 TCP 连接的“三次握手”与“四次挥手”
作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概念 ...
- 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
作者 | AhuntSun 责编 | Elle TCP connection 客户端与服务器之间数据的发送和返回的过程当中需要创建一个叫TCP connection的东西: 由于TCP不存在连接的概 ...
最新文章
- IT职场人生系列之二十二:如何学习新语言(二)
- 网络推广团队分享新手必看的长尾关键词挖掘技巧!
- ABAP动态取得数据的方法
- 安卓中AIDL的使用方法快速入门
- neo4j-admin导入海量数据
- 页面中color颜色值_计算机毕业设计中实现一个简易美观的登录界面
- 【NOIP2015提高组】子串 区间DP+滚动数组优化
- 3K 万能JQuery弹出层类库
- 01屏幕增强 sap_SAP (MM01 MM02 MM03)屏幕增强
- PNG免抠素材教你如何设计一张有创意的中秋节热点海报?
- 分布式为什么使用python
- jsp银行排队叫号系统
- 使用linux批量引物设计,使用NCBI-ePCR和Primer3进行引物批量化设计
- java 设置表头字体_Java将数据按列写入Excel并设置格式(字体、背景色、自动列宽、对齐方式等)...
- win7 共享wifi 手机如何上网
- flutter小控件备忘
- 基本概念学习(7003)---网络流量
- Android GPS根据经度获取时区
- C++学习 控制程序的流程
- htc+one+m7+linux驱动,htc one m7刷入recovery的教程
热门文章
- java实现装饰模式,JAVA实现装饰模式
- jQuery中replaceWith()方法与unwarp()方法
- 书评 — 凯文·凯利《失控》
- 经纬度与高克投影转换代码(VB)
- ddd理论层次-by banq
- [图像检索] paddleclas pp-shitu v1/v2
- [Luogu P2257] YY的GCD (莫比乌斯函数)
- 数据库(MySQL)概念和操作
- 弘玑Cyclone RPA为国金证券提供技术支撑,超200个业务场景实现流程自动化
- 魏晋南北朝修谱之风盛行,家谱数量剧增,为什么会形成这种风气?