一种高效的目标主机末跳路由器探测方法与流程

文档序号:18884997发布日期:2019-10-15 20:45阅读:251来源:国知局
一种高效的目标主机末跳路由器探测方法与流程

本发明涉及网络拓扑探测的方法。



背景技术:

网络拓扑测量是网络结构研究的基石,是研究优化网络资源配置、网络协议设计、网络攻击检测与防范、网络地理定位等方向的基础。目前成熟的网络拓扑测量技术大都基于ping和traceroute,其中ping进行存活主机发现,traceroute获取探测源到目标的完整路由路径,进而构建出网络拓扑结构。

目前极少对目标主机末跳路由器探测的相关研究和方法。目标主机的末跳路由器,是指与探测目标逻辑上直接相连的路由器,简称末跳路由器。traceroute通过设置探测包ttl从1开始递增来发现探测源到目标主机网络路径上所有的路由器节点,进而能获得探测源到目标主机的倒数第一跳路由器节点,即目标主机的末跳路由器信息。

现有文献cn103905276a公布了一种快速的网络拓扑探测方法,包括如下步骤:步骤一:从源节点向目的节点序列r中的各个目的节点发送单探测包,收集ttl信息;步骤二:根据收集的ttl信息,选择参考节点,向参考节点与剩余节点发送背靠背包对,计算共享路径加性特征量;步骤三:按照共享路径加性特征量对目的节点序列r进行排序,得到序列位置向量;步骤四:寻找分割点;步骤五:在分割点中寻找最优二分节点;步骤六:得到符合dfs排序的目的节点的序列。该现有技术有效地解决了在网络拓扑发现过程中探测包数量过多,效率低下的问题。该现有技术没有提及目标主机末跳路由器探测的相关技术手段。

现有技术没有给出通过设计并实现网络距离预测、缺省ttl区间划分技术,来降低获取末跳路由器的发包数量的启示。事实上,末跳路由器发现对于快速探测目标子网结构,降低网络拓扑测量负载、目标主机地理定位等方面具有很大应用价值。



技术实现要素:

本发明要解决的技术问题是:

本发明提供了一种高效的末跳路由器探测方法,以实现对于指定的探测目标仅发送少量的探测包就能获取目标的末跳路由器信息。

本发明为解决上述技术问题采取的技术方案是:

一种高效的目标主机末跳路由器探测方法,所述方法的实现过程为:

步骤1:开启icmp端口不可达监听器;

步骤2:向目标发送udp大端口探测包;

步骤3:若收到icmp端口不可达报文,从该报文中提取ttl信息,计算当前探测点到目标主机的网络距离,转步骤6,否则执行步骤4;

步骤4:执行步进法获取网络距离;

步骤5:若步进法获取网络距离成功,转步骤6,否则转步骤10;

步骤6:开启icmp生存时间超时监听器;

步骤7:向目标主机发送生存时间ttl为网络距离减1的探测包;

步骤8:如果收到末跳路由器返回的icmp生存时间超时报文,转步骤9,否则转步骤10;

步骤9:解析末跳路由器返回的icmp生存时间超时报文,从报文中获取末跳路由器ip;

步骤10:末跳路由探测结束。

进一步地,执行步进法获取网络距离的过程为:

(1)、初始化收到icmpechoreply报文时最小ttl值echo_reply_flag、收到icmp生存时间超时的最大ttl值time_exceeded_flag为-1,发送ping包,如果收到目标的响应报文,转步骤(2),否则说明目标主机未存活,转步骤(8);

(2)、从目标主机回复的报文中提取reply_ttl,根据reply_ttl判断目标主机的初始生存时间t_init_ttl,确定探测包设置的生存时间send_ttl;

(3)、发送ttl为send_ttl的探测包,若收到目标主机回复的icmpechoreply报文,则说明源到目标的网络距离小于等于send_ttl,转到步骤(4);如果收到icmp生存时间超时报文,说明此时探测包设置的生存时间send_ttl还不足以到达目标,转到步骤(5);如果未收到任何报文,转到步骤(6);

(4)、发送方接下来每次发送生存时间为send_ttl减1的探测包,直到第一次收到icmp生存时间超时报文,设置time_exceeded_flag为此时对应的探测包设置的生存时间send_ttl值,转步骤(7);

(5)、发送方接下来每次发送生存时间为send_ttl加1的探测包,直到第一次收到目标主机返回的icmpechoreply报文,设置echo_reply_flag为此时对应的探测包设置的生存时间send_ttl值,转步骤(7);

(6)、若在超时时间内为收到任何报文,认为探测包设置的ttl值小于网络距离d,不足以到达目标,只是中间路由器不予回应,将探测包生存时间send_ttl加1,转到步骤(3);

(7)、如果满足echo_reply_flag=time_exceeded_flag+1,发送方到目标的网络距离d等于echo_reply_flag,获取网络距离成功;如果不满echo_reply_flag=time_exceeded_flag+1获取网络距离失败;

(8)、结束网络距离获取。

进一步地,在步骤6中,开启icmp生存时间超时监听器的过程为:

(1)设置icmp生存时间超时报文过滤字符串;

(2)调用监听器函数,监听icmp生存时间超时报文;

(3)程序睡眠1秒钟,保证监听线程完全启动;

(4)开启icmp生存时间超时监听器成功。

进一步地,在步骤9中,获取末跳路由器ip的过程为:

(1)提取返回的icmp生存时间超时报文头部,转化为对象格式;

(2)从对象中直接读取源ip;

(3)获取末跳路由器ip成功。

本发明的有益效果是:

本发明提供了一种高效的末跳路由器探测方法,对于指定的探测目标,该方法相对于traceroute等工具仅发送少量的探测包,即能获取目标的末跳路由器信息,在发包数量上相对于traceroute平均减少60%,且发包数量不依赖于探测源到目标所经过的路由器数目,这一点traceroute无法做到。

本发明通过设计并实现网络距离预测、缺省ttl区间划分技术,有效降低获取末跳路由器的发包数量,相对于traceroute获取末跳路由器的方法,发包效率有质的提升,有效降低测量负载,改善网络环境,对高效的网络拓扑测量工作有着一定的意义。末跳路由器发现对于快速探测目标子网结构,降低网络拓扑测量负载、目标主机地理定位等方面具有很大应用价值。

附图说明

图1是icmp端口不可达报文结构图,

图2是基于icmp端口不可达获取末跳路由器时序图,

图3为traceroute和基于icmp端口不可达末跳路由获取发包量对比图,

图4为网络主机缺省ttl分布图,

图5为步进法获取网络距离流程图,

图6为末跳路由器获取量对比图,

图7为获取末跳路由器平均发包量对比图,

图8为步进法网络距离预测实际偏差柱图,

图9为末跳路由器获取系统流程图,

图10是获取末跳路由器平均发包量对比图。

具体实施方式

结合附图1至图10,对本发明所述一种高效的目标主机末跳路由器探测方法的实现进行如下阐述:

首先说明获取目标主机的末跳路由器的基准方法,如果已经获知探测源到目标主机中间经过的路由器跳数为hop,探测源发送生存时间为hop的报文,报文到达末跳路由器后,报文中ttl刚好减为0,因此末跳路由器丢弃此报文同时返回源ip为自身的icmp生存时间超时消息,据此可以获取末跳路由器的ip信息。如果探测源发送生存时间为hop加1的报文,此报文刚好能够到达目标主机,因此我们定义hop加1为源到目标的网络距离。下具体说明结合icmp端口不可达网络距离的末跳路由器获取、步进法获取网络距离的末跳路由器获取两种方案,最终给出实现本发明所述末跳路由器探测的方法:

1.基于icmp端口不可达网络距离估计及末跳路由器获取方案

1.1原理

icmp协议是互联网中报文消息控制协议,通过调研发现,icmp协议中端口不可达消息(icmp包头信息type=3,code=3)的负载数据部分包含探测源发送给目标的原始报文数据。当探测源收到目标发送的icmp端口不可达消息后,从消息的负载部分可以提取原始报文信息,这时原始报文信息中的ttl字段中的数据是探测源发送的原始报文中初始ttl减去中间经过的路由器数目后,剩余的ttl值,我们定义为left_ttl,而原始报文发送时初始ttl我们定义为init_ttl。因此hop=init_ttl-left_ttl,发送ttl为hop的探测包恰好触发末跳路由器返回icmp生存时间超时消息。如图1所示,图1为icmp端口不可达消息的报文结构。

1.2具体设计

通过向目标主机发送udp大端口探测包,能够获取源到目标的网络距离,向目标主机发送ttl为网络距离减1的udp报文,刚好能使目标主机的末跳路由器返回icmp生存时间超时报文,从此报文中即可获得末跳路由器信息。

因此,需要两个监听器(listener)分别监听icmp端口不可达报文和icmp生存时间超时报文。如图2所示,具体流程为:

步骤一:首先,udpsender构造出udp大端口探测包发送给目标主机,若目标主机指定端口未开放,返回icmp端口不可达报文,此报文的数据部分填充为发送给目标的udp大端口探测包;

步骤二:当本地icmp端口不可达listener捕获到目标主机返回的报文后,从报文的数据部分提取udp大端口探测包中的剩余ttl:left_ttl,根据left_ttl计算出源到目标所经过的路由器跳数hop;

步骤三:向目标主机发送ttl为hop的新的探测包,此探测包到达目标主机的末跳路由器时ttl值刚好减为零,触发末跳路由器返回生存时间超时报文;

步骤四:本地icmp生存时间超时listener会捕获末跳路由器返回的报文,从报文中提取末跳路由器信息。

1.3实验结果对比

理论上,此方法仅仅需要发送两个探测包,就能发现目标主机的末跳路由器,而传统traceroute的方法发送的探测包是中间经过路由器数目加1。因此,此方法相对于传统方法发送探测包减少了几倍,高效而稳定,有质的提升。

实验选取10万个存活的目标主机,使用上述方案和traceroute同时对目标主机进行末跳路由器发现,统计各自成功发现末跳路由器的数目,并记录各自的发包量。

如图3展示的是在同样成功获取9417个末跳路由器的情况下,传统traceroute方法和此方法发包量的对比图。从图中可以看出传统traceroute发送了176451个数据包,而此方法发送了18834个数据包,相对于传统方法来说,减少了9倍。traceroute每获取一个末跳路由器平均需要发送18.7个数据包,说明源到目标主机平均网络距离为18.7,即源到目标主机平均经过了17.7跳个路由器,符合真实的网络环境。而此方法平均是发送两个包,与理论值一致。因此相比于traceroute获取末跳路由器的方法,此方法的发包量约是traceroute的九分之一,在发包数量方面有质的提升。

2.步进法获取网络距离

2.1理论基础

traceroute可以获取源到目标路径中全部路由器信息,而我们仅仅需要获取目标主机的末跳路由器信息,因此,只需确定源到目标的网络距离,发送ttl为网络距离减1的探测包到目标主机,由于该探测包到达目标主机的末跳路由器时,ttl值刚好减为0,触发末跳路由器返回icmp生存时间超时报文,报文中即可提取末跳路由器信息。

我们的目标是获取网络距离,而非源到目标主机路径上所有路由器,因此,探测包只需满足:

(1)发送生存时间为ttl的探测包时,收到icmp生存时间超时的返回报文;

(2)发送生存时间为ttl加1的探测包时,收到来自目标主机返回的报文。

说明ttl加1恰好是源到目标的网络距离。

虽然无法直接获取源到目标的网络距离,但是可以通过ping的方式获取目标的源的网络距离,以此作为源到目标的网络距离的参考值,进而一步步逼近真实的网络距离。通过ping,我们能够获取icmpechoreply消息中的剩余ttl值reply_ttl,结合目标主机缺省ttl,即可获取目标主机到源的网络距离,以此作为源到目标网络距离的参考距离。统计互联网中390万个存活主机的缺省ttl分布情况,如图4所示。根据峰值分布记录目标主机缺省ttl分布区间,reply_ttl值减去其所在区间上限值,即可获取目标到源的网络距离。用公式表示为:

目标到源网络距离=缺省ttl区间上限–reply_ttl+1(1-1)

源到目标的参考网络距离=目标到源网络距离(1-2)

2.2方案设计

从理论基础中我们明确源到目标主机的网络距离不一致,而目标主机到源的网络距离很容易获取,我们先假设它们相差不大,用目标主机到源的网络距离作为参考距离,即探测包初始的ttl值。根据返回包的类型进一步调整探测包的ttl值,每次以1为单位递增探测包设置的send_ttl,因此该方法叫做步进法。

步进法流程图如图5所示,具体流程如下:

1.初始化echo_reply_flag、time_exceeded_flag为-1,发送ping包,如果收到目标的响应报文,转步骤2,否则说明目标主机未存活,转步骤8;

2.从目标主机回复的报文中提取reply_ttl,根据reply_ttl判断目标主机的初始生存时间t_init_ttl,确定探测包设置的生存时间send_ttl;

3.发送ttl为send_ttl的探测包,若收到目标主机回复的icmpechoreply报文,则说明源到目标的网络距离小于等于send_ttl,转到步骤4;如果收到icmp生存时间超时报文,说明此时探测包设置的生存时间send_ttl还不足以到达目标,转到步骤5;如果未收到任何报文,转到步骤6;

4.发送方接下来每次发送生存时间为send_ttl减1的探测包,直到第一次收到icmp生存时间超时报文,设置time_exceeded_flag为此时对应的探测包设置的生存时间send_ttl值。转步骤7;

5.发送方接下来每次发送生存时间为send_ttl加1的探测包,直到第一次收到目标主机返回的icmpechoreply报文,设置echo_reply_flag为此时对应的探测包设置的生存时间send_ttl值。转步骤7;

6.若在超时时间内为收到任何报文,认为探测包设置的ttl值小于网络距离d,不足以到达目标,只是中间路由器不予回应。将探测包生存时间send_ttl加1,转到步骤3;

7.如果满足echo_reply_flag=time_exceeded_flag+1,发送方到目标的网络距离d等于echo_reply_flag,获取网络距离成功;如果不满足echo_reply_flag=time_exceeded_flag+1获取网络距离失败。

8.结束网络距离获取。

2.3实验结果对比

(1)末跳路由器获取率对比

实验选取10万个目标ip,分别使用传统traceroute和步进法进行网络距离估计和末跳路由器发现,统计了发包量,结果如下图6所示。从图中可以看出,traceroute方法和步进法末跳路由器获取量相差不大,说明此方法能够稳定可靠的获取目标主机的末跳路由器。

(2)平均发包量对比

在对10w个目标主机进行末跳路由器获取实验后,统计两种方法的发包情况如下:传统traceroute方法发包量为757188,步进法发包量为239356。因为每种方法的末跳路由器获取数量不同,我们计算每种方法的平均发包量进行比较,结果如图所示。从图7中可以看出步进法的平均发包量为4.83,traceroute平均发包量为15。平均发包量其计算方法为公式(3)。因此,步进法相对于traceroute方法发包量降低了60%以上。

其中,min_gap为最小的差值,min_gap为最大的差值,send_packeti为差值对应的发包量,ip_ratioi为差值为i的ip的百分占比,两者相乘求和即为平均发包量avg_packets。

(3)参考网络距离与实际网络距离差值分布

我们对250万个目标主机应用步进法进行网络距离估计,并与实际网络距离进行对比,统计实际网络距离与参考网络距离差值占比情况,如图8中柱形图所示。图中横坐标为实际网络距离与参考网络距离差值,纵坐标为这一差值对应的目标占比情况。从图中我们看出,偏差为0和1的所占比例最大,以偏差1为中心往两边递减。一方面说明我们缺省ttl区间划分合理,同时也说明网络中50%以上的主机网络网络距离相差很小。对于步进法来说,实际与预测的偏差值决定了发包量的多少,因此我们将偏差与发包量的关系图也加到图中。结合偏差占比与发包量,我们发现占比最大的偏差最小,即发包量也最小,占比与发包量成反比关系。

3.末跳路由器探测系统

3.1系统设计及执行流程

结合以上两种方案,最终设计并实现末跳路由器探测系统。该系统进行末跳路由器探测的详细步骤为:

步骤1:开启icmp端口不可达监听器;

步骤2:向目标发送udp大端口探测包;

步骤3:若收到icmp端口不可达报文,从该报文中提取ttl信息,计算到目标的网络距离,转步骤5,否则执行步骤4;

步骤4:执行步进法获取网络距离;(具体流程见2.2)

步骤5:若步进法获取网络距离成功,转步骤6,否则转步骤10;

步骤6:开启icmp生存时间超时监听器;

步骤7:向目标发送生存时间ttl为网络距离减1的探测包;

步骤8:如果收到末跳路由器返回的icmp生存时间超时报文,转步骤9,否则转步骤10;

步骤9:解析末跳路由器返回的icmp生存时间超时报文,从报文中获取末跳路由器ip;

步骤10:末跳路由探测结束。

程序执行流程如图9所示。

3.2系统测试

对70w个目标主机使用末跳路由探测系统进行末跳路由器获取实验,一共获取末跳路由器数目503631个。统计两种方法的发包情况如下:在获取相同末跳路由器数目情况下,传统traceroute方法发包量为8398015,本系统的发包量为3496868。我们计算每种方法的平均发包量进行比较,结果如图10所示。从图10中可以看出步进法的平均发包量为6.9个,traceroute方法平均发包量为16.6个。相比于traceroute,该系统发包量降低了57%。而相比于icmp端口不可达的方案和步进法的方案,本系统的发包量均高于这两种方案,分析发现只有20%的目标对udp大端口报文进行响应,因此剩余80%的目标使用icmp端口不可达方案发送的探测包就没有意义,因此系统的平均发包量比两种方案都高,但是也远低于traceroute发包量,同时将两种方案融合能够提高末跳路由器的探测速率。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1