IPv6端到端双程时延和包丢失率探测技术
2018-05-03王雅兰朱尚明王永全
王雅兰 朱尚明 王永全
(华东政法大学 上海 201620)
0 引 言
一直以来,网络路径性能探测领域的研究非常活跃。对网络路径进行测量和评价,是了解网络行为、发现网络瓶颈、优化网络配置、提高网络性能的基础和重要环节[1-2]。作为新一代网络体结构核心的IPv6协议,由于其地址和协议结构的改变,原有的IPv4探测技术难以直接应用于IPv6环境,不能满足新一代IPv6互联网技术的需要。本文将在详细研究端到端IPv6网络的路径性能探测技术的基础上,采用双程时延和包丢失率作为网络路径的性能参数,提出一种使用主动探测技术、基于ICMPv6的对端到端IPv6网络路径性能进行动态测量的方法,并给出了详细的设计方案和具体的编程实现。
1 网络路径性能参数和探测机制
1.1 端到端网络路径性能参数
对IPv6网络路径进行探测,首先需要建立性能度量的问题模型和给出性能参数定义。衡量一个网络路径和链路性能的参数很多,例如时延、带宽、包丢失率、代价、利用率、拥塞程度等,不同的参数需要不同的测量方法。
对于一个有向网络拓扑G,假设具有N个节点和L个链路,定义σ=(s,d)为一个源-目的节点对,这里,s,d∈N。R为源-目的节点对σ之间的一个路径集,其中每一条路径r都由若干个链路构成,即r={l:l∈L}。
假设dl为链路l的双程时延,dr为路径r的双程时延,qr为路径r的包丢失率,qe为源-目的节点对间的端到端包丢失率。dl、dr、qr以及qe都是随着网络拓扑结构和负载流量而动态变化的,其计算方法为:
• 链路双程时延dl:若一个数据包由节点u在t1时刻经链路l发送给邻近节点v,节点v收到后再经链路l回送一个应答包,且节点u在t2时刻收到该应答包,那么,链路l的双程时延为:
dl=t2-t1
(1)
• 路径双程时延dr:路径的双程时延是各个链路上的累积时延相加而得[3-4],为:
(2)
• 路径的包丢失率qr:若源节点s经由一条路径r向目的节点d发送了xr个数据包,目的节点d仅收到了其中的yr个数据包,那么,该路径r的包丢失率为:
(3)
• 端到端的包丢失率qe:若源节点s经由一个或多条路径向目的节点d发送了x个数据包,目的节点d仅收到了其中的y个数据包,那么,端到端的包丢失率为:
(4)
1.2 网络路径性能探测技术
网络路径性能探测技术可以分为主动探测和被动探测两大类[5],现以网络路径的时延探测为例介绍并比较这两种探测技术。
1) 主动探测。主动探测技术通过向目的节点发送探测数据包来获得网络路径的性能参数。例如可以向目的节点发送ICMP6 ECHO_REQUEST或者TCP SYN包。发送探测包和收到应答包之间的时间差就是源节点到目的节点一条路径的双程时延。
2) 被动探测。被动探测技术通过跟踪源节点对目的节点的访问抽样信息来计算时延,这些抽样信息一般来自由源节点向目的节点发起的Web请求和应答信息。
主动探测技术通过发送数据包探测网络路径的性能,虽然会带来一定的开销,但较被动探测技术更有针对性和目的性,其以实时性好、测量结果准确等优点,而被网络运营商及国内外研究学者所青睐[6]。被动探测技术开销较小,但获得的路径信息有限。因此,本文使用主动探测技术,通过源节点向目的节点发送ICMPv6的数据包来对端到端的网络中一条路径的双程时延和包丢失率进行动态测量。
2 ICMPv6报文和Socket网络编程
2.1 ICMPv6报文
ICMPv6是IPv6的Internet控制报文协议,它属于IPv6协议的一个组成部分,可以报告IPv6报文在网络中传输的情况。
ICMPv6报文作为IPv6分组的数据荷载,封装在IPv6分组中进行传输[7]。网络路径性能探测主要通过ICMPv6的回送请求(ECHO REQUEST)和回送应答(ECHO REPLY)两种信息报文来完成。其格式如图1所示。探测时源节点向目的节点发送类型为128的回送请求报文,并生成标识符和序列号字段的值,这些值可以帮助源节点将回送请求报文和返回的回送应答报文对应起来。为计算双程时延,源节点可将发送时间作为数据负载,填入报文主体(Data)字段。目的节点收到后发送类型为129的回送应答报文,其标识符、序列号和报文主体字段的值均从回送请求报文中获得。这样,源节点收到回送应答报文后,通过将发送时间和当前时间的比较以及报文个数的计算,就可以获得源-目的节点间的双程时延和包丢失率。
图1 ICMPv6消息报文格式
2.2 Socket网络编程
Socket套接字是应用程序与底层通信驱动程序之间运行的开发接口,可以将应用程序与具体的TCP/IP隔离开来,使得应用程序不需要了解具体细节,就能够实现数据传输。
Socket编程的层次结构如图2所示。可以看到,Socket开发接口位于应用层和传输层之间,可以选择TCP和UDP两种传输层协议实现网络通信。
图2 Socket编程的层次结构
在Socket通信中,套接字分为三种类型,即流式套接字(SOCK_STREAM)、数据报套接字(SOCK_DGRAM)和原始套接字(SOCK_RAW)[8]。流式套接字提供面向连接的、可靠的数据传输服务,数据报套接字提供无连接的数据传输服务。本文采用的原始套接字是公开的Socket编程接口,使用它可以在IPv6上对Socket进行编程,发送和接收网络层上的原始数据包,例如ICMPv6、TCP、和UDP等协议的数据包。
3 双程时延的探测
3.1 双程时延探测方法
IPv6网络路径时延是指沿一条IPv6路径从发送包到接收包之间的时间差,它是反映网络运行情况的重要性能指标。时延小时表示传输路径负载较轻,时延大时表明路径可能存在拥塞。互联网宏观拓扑结构下的时延特征对于IPv6网络的拥塞控制与性能具有重要作用[9]。
网络路径的时延测量可以分为单程时延和双程时延两种。由于单程时延的主要难点是需要解决源-目的主机之间的时钟基准不一致的问题,精确测量起来困难很大,系统设计和部署都很复杂。而双程时延的探测都在源节点进行计算,不存在时钟基准问题,可以避免不同主机时钟抖动引起的误差,而且容易部署和解析。因此,本文使用双程时延作为路径的性能参数。
双程时延的探测步骤如下:(1) 探测程序在源节点生成一个具有固定长度的ICMPv6探测包;(2) 探测程序在源节点给探测包打上一个发送时间戳,然后将ICMPv6报文发往目的节点;(3) 到达目的节点后,目的节点尽快回应一个应答包到源节点;(4) 如果应答包在一个合理的时间内到达,在接收应答包时探测程序尽快记下一个结束时间戳,发送时间戳和结束时间戳的差值就是双程时延;(5) 如果探测包无法在合理的时间内到达,探测程序则认为双程时延值是超时的。
3.2 编程实现
本文在.Net环境下利用MFC基于原始套接字(Raw Socket)对IPv6网络路径双程时延的探测进行了编程实现。为生成ICMPv6回送请求和应答报文,首先定义一个ICMPv6包的结构如下:
typedefstruct icmp6_hdr
{ u_char icmp6_type;
// 类型
u_char icmp6_code;
//代码
u_short icmp6_cksum;
//校验和
u_short icmp6_id;
//标识符
u_short icmp6_seq;
//序列号
u_int icmp6_data[4];
//报文主体:存储发送时间
} ICMP6_HDR,*PICMP6_HDR;
探测程序实现流程如图3所示。
图3 IPv6网络路径的双程时延探测
探测程序首先初始化ICMP6探测包数量、目的地址以及发送、接收数据包的超时等待时间。为了使探测程序能够从发送和接收进程中跳出,避免对一些无法访问的目的主机的死等待,这里设置Timeout为5秒。当等待时间超过5秒时,系统将不再等待,输出结果为“超时”。
接下来探测程序创建原始套接字,对目的IPv6地址进行转换,利用函数inet_pton和inet_ntop实现IPv6地址字符串和网络字节顺序格式IP地址之间的转换。如IPv6地址正确,探测程序将利用ICMP6报头构建ICMP6_ECHO回显报文。在发送进程中,探测程序产生并发送一定数量ICMP6_ECHO_REQUEST回显请求报文。同时调用GetTickcount函数返回从操作系统启动到当前所经过的毫秒数,作为发送时间戳保存至数组icmp6_data[0],然后探测程序将该报文发送给目的主机。
探测程序将同时启动接收进程,接收来自目的主机回送的ICMP6_ECHO_REPLY回显应答报文。在接收进程中,探测程序调用GetTickcount获得接收时间戳,并将其与icmp6_data[0]中保存的发送时间戳的差值保存至Roundtriptime,然后计算最大、最小和平均时延并进行输出。
3.3 实验结果分析
探测网络环境设置为:源地址= 2001:da8:8020:9b:6c79:a68:ed0d:5c7 (华东政法大学的一台主机),目的地址1=2001:470:0:76::2 (he.net),目的地址2=2001:12ff:0:4::6 (nic.br)。源主机在不同运行情况和不同状态下,程序运行结果如表1所示。为了进行比较,将Windows自带的探测工具Ping的探测结果列入表1中。从表1可以看出,本文所设计探测方法的探测结果与Ping工具的结果是基本相符的。此外,从表1中还可以计算出,针对目标地址1本文所设计的探测算法和Ping工具的累计平均时延分别为249.6和256.4 ms,标准方差分别为4.62和7.47,针对目标地址2本文所设计的探测算法和Ping工具的累计平均时延分别为430.6和432.4 ms,标准方差分别为3.91和5.41。两种情况下两者都小于Ping结果,表明本文所设计算法的测量结果和Ping工具相比偏小,离散程度优于Ping工具。
表1 平均时延探测结果比较
4 包丢失率的探测
4.1 包丢失率探测方法
源端向目的端发送的报文,若在指定时间内该报文没有到达目的端,则称为报文丢失或丢包(Packet Loss)。物理线路故障、网络拥塞、设备故障、病毒攻击、路由信息错误等是网络发生丢包的主要原因。
路径包丢失率的探测取决于构成一条路径上各个链路的服务质量。在不超过链路可用带宽的情况下,探测程序按照一定的速率从源节点经由一条路径向目的节点发送若干个ICMP6数据包,统计目的节点返回的数据包个数。然后根据包丢失率qr计算公式得到的相对差值就是该路径在该发送速率下的包丢失率。
4.2 编程实现及探测结果
与前面双程时延的探测方法相同,包丢失率的计算也是在源节点进行探测和计算的。源节点对每个发送和接收的ICMPv6数据包进行计数,然后计算其相对差值的百分比作为包丢失率,并进行输出。
包丢失率网络探测环境设置同上,源主机在不同运行情况和不同状态下,每次发送100个ICMPv6的探测包。然后计算其包丢失率,并和Ping工具的测量值进行比较,结果如表2所示。从表2可以看出,本文所设计探测方法的探测结果与Ping工具的结果是基本接近的。针对目标地址1和目标地址2,本文所设计的探测算法和Ping工具相比,两种情况下其平均包丢失率都小于Ping结果。
表2 包丢失率探测结果比较 %
5 结 语
由于篇幅有限,本文仅针对双程时延和包丢失率的探测技术进行了分析和设计,给出了IPv6环境下的详细技术方案,并基于.Net利用MFC对所设计的技术方案进行了具体的编程实现。实验结果表明,所设计
的方案和实现的方法是可行和有效的。
[1] 胡治国,田春岐,杜亮,等.IP网络性能测量研究现状和进展[J].软件学报,2016,28(1):105-134.
[2] 李广野,雷为民,胡丹丹,等.一种基于压缩感知的重叠网络路径性能评价方法[J].小型微型计算机系统,2017,38(1):67-71.
[3] Tang C,Mckinley P K.On the cost-quality tradeoff in topology-aware overlay path probing[C]//IEEE International Conference on Network Protocols.IEEE Computer Society,2003:268-279.
[4] Hasegawa G,Murata M.Scalable and Density-aware measurement strategies for overlay networks[C]//International Conference on Internet Monitoring and Protection(ICIMP),2009:21-26.
[5] 尹浩,李峰.互联网性能测量技术发展研究[J].计算机研究与发展,2016,53(1):3-14.
[6] 陈宇,温欣玲,段哲民,等.一种大规模IP网络多链路拥塞推理算法[J].软件学报,2017,28(7):1815-1834.
[7] 王相林.IPv6网络—基础、安全、过渡与部署[M].电子工业出版社,2015:77.
[8] 杨秋黎,金智.Windows网络编程(第二版)[M].人民邮电出版社,2015:79.
[9] 林川,赵海,毕远国,等.互联网网络时延特征研究[J].通信学报,2015,36(3):167-178.