写点什么

“程”风破浪的开发者|数据包分析思路方法分享

  • 2022-10-27
    北京
  • 本文字数:2172 字

    阅读完需:约 7 分钟

“程”风破浪的开发者|数据包分析思路方法分享

面对越来越复杂的网络环境,每天发生着数以万亿的数据交互,一旦出现问题我们就需要快速去定位解决,那么我们就必须储备丰富的知识,利用手头各种工具帮助我们来分析问题。


但有时应用日志、网管平台等看起来一切都没有异常,分析变得一筹莫展,这是就需要使用数据包分析技术,来深入探索每一个 TCP 连接及上层应用,最终来定位问题。


数据包分析的切入点很大程度上取决于具体的问题现象,也就是说并没有一个绝对固定不变的流程。那么如何去做好数据分析,分享下我的一些心得供大家来进行参考。

1、明确故障现象

针对我们要分析的问题首先需要有个全面的了解,了解的也详细对我们分析根因越有帮忙。这里就像我们写记叙文一样要掌握这个故障问题的时间地点人物事件四要素。

  • 时间:问题发生的准确时间点是第一要素,数据流交互过程以毫米、微秒、纳秒计算,需要在海量数据中提取数据需要明确的时间范围。

  • 地点:在网络拓扑上,问题发生在哪里,涉及哪些设备和路径。

  • 事件: ​故障现象的真实描述,还原现场,真实的现场还原描述是分析问题的基础,任何一个细节都有可能是突破口。

  • 人物:受到影响的用户是谁?或者波及的范围有多大?问题波及的用户面可以快速帮助我们判断问题发生的层次、位置。

2、获取有效数据

是否能够获取有效的数据,对我们分析起到至关重要的影响。有效的数据往往就是事半功倍。我们在实际环境中,主要通过以下四个步骤。

  1. 逻辑拓扑:了解应用逻辑和数据路径,以及物理拓扑

  • 对于多层架构的应用,发生问题不再是请求/响应这样单一的过程。

  • 了解业务逻辑拓扑是为了获取有效数据包、制定下一步的分析策略。


  1. 关键节点:把握数据路径上的关键环节

  • 网络层:防火墙、应用交付类设施,这些设施可以改变、控制业务数据流,即有可能影响到业务交互。

  • 应用层:按照逻辑架构(Web、App、DB...),结合问题现象,列出关键节点。

  • 客户端:影响到终端的问题,在客户端进行模拟测试可以获得真实现象信息。


在这里可能会涉及到流量镜像位置的选择,一般会基于以下的策略:

1)根据故障或者异常现象,首先确认用户到应用服务器的数据访问路径。

2)从靠近应用服务器的一端开始,定位问题发生的层面(应用服务自身层面的原因?还是网络传输层面的原因?)。

3)在网络层面,重点关注防火墙、负载均衡类设备(当有负载均衡类设备或者负载均衡链路时,要注意可能需要同时捕获多个端口的流量才能获得完整的 TCP 会话数据)。

4)在数据路径上多点同时捕获数据,进行对比分析。

5)根据故障或者异常现象发生的范围特征,灵活选取数据捕获的关键点。


  1. 捕获数据:完整、少重复、时间同步

  • 确保完整性,不丢包,不乱序。

  • SPAN 策略

  • 活动端口,全单向,封闭(Port Channel 除外)

  • 负载均衡汇聚

  • 高负载两个 Session 分摊

  • 级联端口 Both 镜像

  • 广域网出口,IN/OUT 分开

  • 避免数据繁冗,尽量少的重复。

  • 在多点捕获情况下确保时间同步。


  1. 过滤数据:排除干扰,在海量数据中找到最能反映问题的数据

  • 疑难杂症往往最终是通过极少数的数据分析诊断出来的,能够快速过滤出目标数据可以大大提高故障诊断效率。

  • 定义过滤器常用的条件包括:时间、IP 地址、协议、端口号、Vlan、QoS、特征值等等,以及用以上条件组合而成的复合条件。

  • 过滤器可以在捕获前设置,只捕获相关的目标数据;也可以在捕获之后设置 ,从捕获到到全部数据中提取出目标数据。

  • 现有的流量分析工具通常使用逻辑表达式的方式进行过滤器定义,有些具有图形化的定义界面。

3、深入分析数据

虽然问题现象千差万别,但总体上我们可以用排除法判断在哪些层次没有发生问题,快速把分析的重点找到,大概可以划分为如下三层:

  • 网络层

  • 指标是相对通用化的。

  • 多点对比分析常常用于网络设备层设备故障排查。

  • 传输层

通常我们利用通用的 TCP /UDP 模型,分析其通信过程和具体行为。

  • TCP:1)反应系统层问题——扩大因子、​Nagle、Delayed Ack 等。

2)​反映应用层问题——窗口、响应时间、状态机变迁等。

  • UDP:主要涉及应用层分析。

  • 应用层

  • 应用层指标则是专用的,应对于各种业务应用。

  • 可以识别的,包括应用层代码、响应时间、连接分析等。

  • 正常/异常时的对比是分析行为的有效方法。

4、重在千锤百炼

分析数据包是一项耗时耗力的精细活,不是一朝一夕可以全部掌握,重点在积累,分析的多了无师也能自通。那么如何获取经验,然后成为他人口中的高手,总结几点如下:

  • 经验获得

  • 在现场做故障诊断,往往受到很多外界因素影响。

  • 每个案例分析过后再回顾,一定可以发现并归纳出一些技术、技巧以及思路上的优化方法。

  • 行业化的应用模式具有通用性,特别是金融行业,应用通信模式有很多相似性。

  • 只有类似的案例,没有一模一样的案例,在回顾和思考中深入理解知识点和其应用模式。

  • 经验可贵,但不是全部,走投无路的时候要放弃经验。

  • 成为高手

  • 熟悉 TCP/IP 理论

  • 熟练分析工具的使用方法,事半功倍

  • 精通网络架构和业务架构

  • 了解操作系统的 TCP 配置及影响

  • 形成分析问题的思路

  • 多看案例分析

  • 多动手多分析多总结

  • 书籍推荐

  • 经典之作

  • TCP/IP 详解卷一

  • 图解 TCP/IP

  • 程序是怎么跑起来的

  • 计算机是怎么跑起来的

  • ​网络是怎么连接的

  • HTTP 权威指南

  • Wireshark

  • Wireshark 网络分析就这么简单

  • ​Wireshark 网络分析的艺术

  • Wireshark 数据包分析实战 第 3 版


如果在实际工作中遇到网络故障问题,或者你怀疑是网络引起的问题,那么也是很好的机会。可以参考下以上内容进行抓包分析。关于如何分析数据包的分享就到这里了,希望可以给你带来一点点帮助。附注上整理的思维导图。


发布于: 2022-10-27阅读数: 28
用户头像

InfoQ签约作者 2018-11-30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
“程”风破浪的开发者|数据包分析思路方法分享_学习方法_穿过生命散发芬芳_InfoQ写作社区