网络排查案例课
杨胜辉
eBay 资深运维专家,流量系统负责人
22781 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 39 讲
实战三:不用抓包就能做的网络排查篇 (2讲)
网络排查案例课
15
15
1.0x
00:00/00:00
登录|注册

05 | 定位防火墙(一):传输层的对比分析

其他方法基于网络七层模型
使用裸序列号
超时导致的耗时
重传报文
乱序报文
Chat:TCP挥手、握手
Note:快速重传、重传、重复确认
Warning:乱序、未抓到报文
对比两侧抓包文件
分析TCP流
关注可疑报文
查看Expert Information
重现问题
同时开始和结束
过滤条件:对端IP
客户端和服务端同时抓包
应用A访问应用B(HTTPS慢于HTTP)
网络层的精确打击(下节课讲解)
传输层和应用层的分析推理
聚焦网络层的精确打击
定位两侧同个报文的方法
HTTPS受影响,HTTP未受影响
隧道封包拆包过程中出现问题
防火墙隧道Bug导致乱序
发现乱序和重传问题
对比两侧报文顺序
使用TCP序列号定位
问题报文分析
Expert Information
抓包分析步骤
两侧抓包
案例分析
应用层:问题表象(超时、报错等)
传输层:TCP/UDP
防火墙排查技巧
防火墙作为网络设备遵循技术原理和网络规范
下节课预告
思考题
防火墙问题定位
两侧报文对比分析
抓包分析细节
抓包分析
传输层和应用层的分析推理
定位防火墙
防火墙排查技巧总结

该思维导图由 AI 生成,仅供参考

你好,我是胜辉。今天我们来聊一个有趣的话题:防火墙。
在网络排查中,防火墙作为一个隐形神秘的存在,时常给排查工作带来一定的不确定性。有时候,你不知道为什么一些网络包能正常发出,但对端就是没收到。有时候,同样的两端之间,有些连接可以通信,有些就是不行。
这个时候,你很可能会怀疑是防火墙在从中作祟了,但是你有什么证据吗?
你不是防火墙工程师,就没有查看它的配置的权限。但是这样一个看不见摸不着的东西,却可能正在影响着你的应用。相信你也一定想彻底转变被动的状态,把问题搞定。
其实,无论防火墙有多么神秘,它本质上是一种网络设备。既然是网络设备,那么它必然同样遵循我们知道的技术原理和网络规范。所以,防火墙的踪迹,虽然表面上给人一种虚无缥缈的感觉,但从理论上说,总是有迹可循的。所以这次,我就帮助你抓住防火墙的蛛丝马迹。
当然,防火墙的排查技巧确实并不简单,为了把这个主题讲透,我将用两节课的时间,来给你专门讲解这方面的排查技巧:一节是结合传输层和应用层的分析推理,一节是聚焦在网络层的精确打击。相信你通过这两讲的学习,一定能掌握不少独门秘技,从而为你的应用保驾护航。
今天这一讲,我们先学第一种方法:结合传输层和应用层的分析推理。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入介绍了通过结合传输层和应用层的分析推理来定位防火墙的方法。通过详细案例介绍了处理网络问题时的具体操作步骤,强调了双向抓包的重要性,并提出了在抓包过程中需要注意的关键点。作者介绍了在分析抓包文件时的具体步骤,包括查看Expert Information、重点关注乱序报文等。通过这些步骤,读者可以了解到在处理类似网络问题时,如何通过抓包和分析来定位问题,并且可以学习到一些实用的技术方法。文章内容详实,适合网络运维人员和对网络故障定位感兴趣的读者阅读学习。文章还介绍了通过TCP序列号来定位对应TCP流的技巧,以及在分析过程中发现的乱序报文问题,并最终发现问题出现在防火墙上。文章还提到了隧道引发的乱序问题以及对HTTPS事务的影响。整体内容涵盖了网络故障排查的实际操作和技术细节,对读者具有一定的启发意义。文章中还提到了在两个不同的抓包文件中如何定位到同个报文的方法,也就是使用裸序列号。在一侧的文件中找到某个报文的裸序列号,作为搜索条件,在另外一侧的报文中搜索得到同样这个报文。这正是利用了TCP裸序列号在网络中传输的一致性(不变性)。后面的课程中,作者还将介绍更多这种“寻找同样报文”的方法,基本思想也都是基于某些信息在网络传输的一致性。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《网络排查案例课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 那时刻
    要定位两侧的同个报文,还可以依据消息内容,frame contains进行过滤

    作者回复: 很棒! 这个方式也很好,通过搜索特定消息内容(比如某个http事务的唯一uuid)的方式,找到两边抓包文件里同一个报文。这个消息越确定越唯一,匹配的范围就越小越精确。 在二层就是用frame contains 在三层就是用ip contains 在四层就是tcp contains 在七层就可能是http contains

    2022-01-21
    3
    23
  • 江山如画
    首先根据时间戳大致确认报文范围,再从不同层入手。 数据链路层,使用 mac 地址区分。 网络层,使用源IP,目的IP,IPv4/IPv6版本。 传输层,使用源端口,目的端口,协议类型,裸序列号,裸确认号,校验和。 会话层和表示层,比如 TLS,可以先用 Content Type 字段区分报文类型,比如是握手报文还是数据传输的报文。如果是握手阶段的报文,可以用 sessionID 区分,如果是正式的数据传输报文,可以用 Encrypted Application Data 区分。 应用层,使用 URL 区分,数据没有加密使用内容区分。

    作者回复: 差不多,很全面了,给你点赞! 你也可以参考另外一个同学的回答,就是在数据链路层,用frame contains "xxx"这个wireshark过滤器,在两个文件中找到同样的报文。当然前提是这个"xxx"应该足够唯一,否则是多个的话,得结合其他信息(比如ip,端口号,序列号等等)来综合判断。 一般来说,我个人用的比较多的就是两种: 1. 用裸序列号(也叫原始序列号) 2. 用应用载荷数据,比如frame contains, ip contains, tcp contains, http contains都可以

    2022-01-21
    3
    15
  • 志强
    但从经验上看,乱序几率大概在百分之一以下到千分之一左右都属正常 ----请问老师 问题中的乱序是多少呢? 这个百分比是谁除以谁得到的呢?

    作者回复: 就是指乱序报文的数量。比如有一个抓包文件里有1万个报文,其中10个是乱序报文(wireshark会提示的,在专家信息里可以看到),那么就是千分之一,是支持范围内,或者说不会明显影响到传输。 你可以这样得到百分比: 1. 计算全部报文数量:capinfos file.pcap | grep packets 2. 计算乱序报文数量:tshark -n -q -r file.pcap -z "io,stat,0,tcp.analysis.out_of_order" 3. 两者相除,或者肉眼也能看出来比例大概在什么数量级了

    2022-01-21
    2
    5
  • 怀朔
    如果可以 希望老板把cap包发一下 大家一起分析看看

    作者回复: 嗯这个在计划中的,后续陆续对抓包文件做数据脱敏,然后整理出来,放到gitee上方便大家的学习

    2022-01-25
    2
    3
  • 我为什么这么菜
    老师,根据上面的乱序报文,它对应的 ACK 是否是这样的: 1. 客户端收到 [包4],回复 ACK5 2. 客户端收到 [包1],回复 ACK2 3. 客户端收到 [包2],回复 ACK3 4. 客户端收到 [包3],回复 ACK4 因为这几次 ACK 的值都不一样,所以不会引起快速重传。 但如果是下面这种乱序,应该就会引发快速重传吧? 1. 客户端收到 [包1],回复 ACK2 2. 客户端收到 [包3],回复 ACK2 3. 客户端收到 [包4],回复 ACK2 这时候服务端连续收到 3 个 ACK2,就会引发快速重传吧?

    作者回复: 一方收到3个DupAck会启动快速重传,注意是3个DupAck,而加上原始Ack就是4个同确认号的Ack了,比你这里说的多一个:)

    2022-05-09
    2
  • 星星云
    服务端经过了haproxy和nginx,还能这样抓包吗

    作者回复: 经过了LB(包括这里的haproxy和nginx),那么LB前后的TCP连接是没有关系的,在TCP层面的信息毫无联系,所以就不能按这节课里的方法(对比两侧的抓包文件)来对比客户端抓包和服务端(在LB后面)抓包。不过我们还是可以在以下两种抓包场景里做比较: 1. 比较客户端抓包和LB抓包(LB的客户侧) 2. 比较LB抓包(LB的服务侧)和服务端抓包 但是因为1和2是不同的TCP连接,无法从TCP元数据(IP,port,序列号等等)上找到关联关系。不过,可以在应用层数据上找到这种关系。比如客户侧的某个请求有个特定的uuid,那么LB转发到服务侧后,这个uuid还是保留的,就可以通过它来找到两侧TCP的关系。 这个话题很大,在后续课程里会陆续提到的~

    2022-05-07
    2
    2
  • includestdio.h
    老师留的思考题没啥头绪,我就大概按照我的理解总结下本篇的知识点吧 - - 排查原则: “两端抓包”,听完“A”的抱怨,也该问问“B”的解释,这样才公平 注意事项: 1.各端的抓包过滤条件一般以对端 IP 作为条件 2.两端的抓包应该差不多在同时开始和结束 3.边重现,边抓包(确保问题出现,再停止抓包) 排查步骤: 1.查看 expert information; 2.重点关注可疑报文(比如 Warining 级别),追踪其整个 TCP 流【TCP流追踪方法:Follow -> TCP Stream】; 3.深入分析这个可疑 TCP 流的第二到四层的报文,再结合应用层表象,综合分析其根因; 4.结合两侧的抓包文件,找到属于同一个 TCP 流的数据包,对比分析,得出结论【通过TCP裸序号,找到对端同个TCP流】; 另外有个小建议,老师后续能不能在下篇专栏内容开头公布下思考题答案

    作者回复: 你的总结太好了,学习委员就是你了:) 这个排查分析的思路虽然不包含具体的操作,但对我的排查工作的开展非常有指导意义,希望对你也有帮助

    2022-01-21
    2
  • bingo
    请问老师,客户端和服务端同一个包显示的时间不一样,这是什么原因呢?

    作者回复: 你好,你具体指的是客户端或者服务端的哪个报文,或者是对哪个图有困惑呢?

    2022-03-05
    2
  • 晴天了
    在 客户端a 和 服务器端b分别用tcpdump抓包. 然后用wireshark 展开分析 . 发现a 第一次握手发送的序号是 3758130604 , 而在b抓到包内容展示的第一次握手的序号是1594004265, 问下老师是什么问题?

    作者回复: 比较奇怪,一般发生序列号改变的话,是经过了LB的,你是这种场景吗

    2022-02-25
    3
  • 追风筝的人
    在两个不同的抓包文件中如何定位到同个报文的方法,也就是使用裸序列号SN。

    作者回复: 恩,如果我们在通信两端都做了抓包,那么同一个报文就会在两个文件中都出现(假设没有丢包),通过这种方法,找到同一个tcp流

    2022-02-21
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部