疑难网络故障的分析方法和原理之关联分析法

来源:互联网 发布:java如何引用内部链表 编辑:程序博客网 时间:2024/05/16 10:16

文章出处:http://www.vants.org/?post=51


    前面我们在讲解对比分析法时,大家可能会有这样的疑问:对比分析法主要是通过对进出中间设备的数据包做对比分析,从而得出相关结论的,但是,我们都知道,很多中间设备会对经过它的数据包做一些修改和处理,那么我们怎么能够将进入设备前的数据包与被中间设备修改后转发出来的数据包对应起来呢?接下来这一节就是专门讲解我们如何将这些数据包关联起来的方法——关联分析法。


关联分析法

    数据包在经过各种中间设备时,经常会出现被中间设备(例如存储转发设备、NAT设备、负载均衡设备等)更改的情况,这对于我们分析问题非常不利,我们在做对比分析时,必须要将相应的数据流、数据包关联对应起来,否则就失去了可比性。


关联分析法定义

    关联分析法是指,一个数据包或数据流在经过一个中间设备时,被中间设备做了更改,我们利用数据包的IP标识、应用层字段、数据流的五元组等特性,将中间设备前后的数据包、数据流对应起来的方法。

那么如何关联呢?下面将针对关联分析法的原理做简单介绍。


关联分析法原理

1)网络层数据包关联——通过IP标识关联

    IP标识是IP报头中用来标识一个数据包的参数,其在IP报头中的位置如下图所示:



IP标识在IP数据报头中的位置

    很多中间设备在处理数据包的过程中,一般不会修改数据包的IP标识字段,那么我们就可以通过分析进出中间设备数据包的IP标识字段是否一致来判断是否属于同一个数据包。我们利用这个特性,将进出设备的数据包关联起来。

2)传输层的数据流关联——五元组关联

    五元组是指数据包封装过程中的源IP地址、目的IP地址、源端口、目的端口、协议类型等五个参数的组合。该五个字段在数据包封装中的位置如下图所示:


五元组在数据包封装中的位置

    在各种网络设备的检测技术中,经常会用到五元组的技术来定位一个传输层的会话。那么,我们在一个交换或纯路由(无NAT)的环境下做对比分析时,也可以利用五元组来将不同位置处抓取的数据流关联起来,因为在交换或者纯路由的环境下,数据报头的五元组信息不会被更改。

3)应用层会话关联——应用层关键字段关联

    由于应用层数据是端系统来处理的,因此绝大多数的中间设备在转发数据包时,仅仅会针对数据包的链路层、网络层和传输层的信息进行更改(例如更改数据包的目的MAC地址信息,NAT会更改数据包的IP地址信息、源端口信息等),一般不会对应用层的数据进行修改。那么,我们就可以利用这个应用层数据的一些特征进行关联。

例如,HTTP访问时的各种请求(get、post),其在经过复杂的网络时,不论其数据报头怎么变化,其应用层的请求内容总是不会变的,如下图所示:


HTTP的POST请求图示

我们就可以根据这些应用层字段对不通位置的数据报文进行关联。

    另外,有些应用层协议本身就带有一些标识同一应用层会话的参数,这些参数是辅助应用程序识别应用层会话的,我们可以利用这些参数来关联我们需要分析的数据包。

例如,ping程序的数据包,其在ICMP封装结构中有identifier和sequence number两个字段,如下图所示:


ping的icmp报文结构

    这两个值在网络交互过程中一般不会改变,那么,我们就可以利用这两个值来关联分析在网络不同位置处所抓取到的数据报文是否是同一数据报文。


关联分析法的应用范围

1)用于对比分析

    在做对比分析之前,必须要把相应的数据包或者数据流关联起来,否则,就失去了可比性,因此,关联分析是对比分析的前提和基础,关联分析经常用于对比分析之前。

2)用于应用交互的关联

    我们在上面分析了应用层会话关联的原理,其中讲到了一些应用在应用层协议封装中会包含一些标识字段,通过这些字段,应用程序之间可以标识出不同的应用层会话。

    在实际的环境中,可能由于某些原因导致应用出现异常,我们在做网络分析时,需要了解应用在数据报层面交互的所有细节,以确定可能导致故障的原因。这个时候,我们就要将应用程序服务器与客户端交互的数据报文关联起来进行分析。

    例如,如果我们要分析具体哪一个ping报文被丢弃了,那么,我们就可以根据ping请求与ping应答数据包结构中的identifier和sequence number字段关联出具体被丢弃的ping请求报文。




原创粉丝点击