钟 锐,刘夏宁,陶智勇
(1.光纤通信技术与网络国家重点实验室,湖北 武汉 430074;2.武汉邮电科学研究院,湖北 武汉 430074)
IPv6是替代现行IPv4的下一代IP协议,具有比IPv4更为丰富的IP地址空间。作为提高互联网容量的基础和先导,IPv6直接支撑着移动互联网、云计算、物联网等领域的发展。虽然,IPv6已经为大家所广泛接受,但是普及速度始终相当缓慢。不过,随着各种智能终端的爆发,尤其是iPad和其他平板、智能手机的普及和良好的市场驱动,各种设备联网需求猛增,将迅速催生IPv6的快速普及。但是与IPv4的头部长度20 byte相比,IPv6的40 byte的头部长度显得过于庞大,过大的头部开销在一定程度上影响着IPv6数据包的传输性能[1]。
众所周知,大多数实时或交互性应用的程序中经常用一些小包,这些小包一般从几个字节到几百字节之间。因此IP包的负载数据长度经常与IP的报头的长度一样,甚至更短。例如,90%的telnet和rlogin的数据包所传送的用户数据少于10 byte[2]。更极端的是用户经常用一个回车键或者其他键来回复消息,这些消息经常是单个字符的。这些单字节的数据将用TCP和IPv6的头部来传送,结果导致整个数据包的长度至少变为61 byte(数据+IP头部+TCP头部(没有任何选项的TCP头部为20 byte)),无用的开销将达到6000%。因此在这样的场景中,如何减少报头的大小、提高有效数据所占的比重是需要关注的。
本文设计了在3种不同情况下通过去掉IPv6的头部中的一些与在LAN中传输数据毫无相关的域或者一些域值可以从以太网帧头中推测出的域的办法来构建新的IPv6头部。使用这些设计,含IPv6报头的数据包在LAN中传输数据的性能将显著提高。
TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WAN)设计的。因此在LAN中使用TCP/IP其实并不是一个很好的选择,因为IPv6报头中的一些域(例如Flow label,Hop limit)只与在WAN中传输数据有关。除此之外,其他的一些域(例如Interface Identifier,Payload Length,IP version)也显得多余,因为它们的值在数据链路层的帧中也可以得到。因此通过有效的处理这些域,可以显著提高IPv6数据包在LAN中传输的性能。
通过科来网络分析系统软件来抓取局域网中的流量,经过一段时间(2 h)后,得到图1,从图中可以知道,TCP和IP 的数据包在网络所有传输的数据包中占到了绝对的比重,超过了所以数据量的90%。这也证明了TCP/IP是互联网的统治协议。TCP/IP协议栈从底层到高层共分为4层,依次为网络接口层、IP层、传输层和应用层[3]。
图1 局域网数据包监测(截图)
TCP/IP协议栈的每一层都会对数据进行封装,控制信息被添加到头部,然后根据协议族将数据发送到模型中的下一层。图2中显示了典型的TCP/IP以太网帧,从该图中可以看到,当TCP/IP的数据包在以太网中传输时,引入了很多额外的负载(图2中浅色部分为有效数据)。当要传输的数据包长度很短时,相关的头部在数据包中的比例很大。因此,对传输效率有着很大的影响。最极端的例子是用telnet远程登录,每敲一下键盘就产生一个数据报,每个数据报只有1 byte的有效数据,却要在这一个字节的数据上封装TCP报头和IP报头,该包的大小为61 byte,导致IP的报头占到了65.57%(40/61)。所以传输效率非常低下,急需改进。对于大包来说,与数据的封装相比,报头的长度可以忽略不计,例如,如果一个IP包的有效负载高达1044 byte,则IP头部只占到了3.69%。
图2 典型的TCP/IP以太网帧
但是通过科来网络分析系统软件来抓取局域网中的流量,经过一段时间(2 h)后,得到图3,从中可以看到:小于64 byte的数据包为56224个,65~127 byte的包为37813个,在检测时间内的总包数为157884个,因此小于128 byte的包占数据量中的大部分,约为59.6%,而大于1024 byte的包只为28.3%。
图3 局域网数据包监测(截图)
因此,针对LAN中传输的数据量中大部分的包为小于128 byte的小包,而IPv6头部却有40 byte的情况。在本文中,提出了3种不同情况下旨在减少IPv6头部开销的设计,这3种设计对标准的IPv6的头部进行一定的修改,使IP数据包在LAN中的传输效率更加高。这些设计对于LAN中的设备或LAN/WAN边缘的路由器的layer2和layer3是透明的。在LAN中传输的数据包将按照本文设计的IPv6报头进行传输,而到WAN中的数据包的IPv6报头将在LAN边缘的路由器被还原成标准的IPv6报头格式。
新设计的IPv6的头部是在标准头部的基础上把一些在LAN中传输数据无关或冗余的域去掉。图4为标准的IPV6的报头格式。
图4 标准的IPv6的报头格式
如果一个数据报文的源和目的在同一个链路上,那么称这个目的地址对于这个源地址是在线(On-Link)的[4]。在源主机向目标主机发送数据包的时候,源和目的IP地址、版本、流量类型、流标签和有效载荷长度字段都可以去掉。对只在本地传输的数据包来说,跳数限制(Hop Limit)为1(当路由器收到一个IPv6报头中的跳数限制字段值为1的数据报时,会丢弃该数据包并向源主机发送ICMPv6超时报文),因此Hop Limit也可以去掉。去掉这些域后,剩下的IPv6报头将如图5所示。从图5中可以看到,为只在LAN中传输的数据设计的IPv6报头从原来的40 byte减少到1 byte。新设计的IPv6报头将在源主机封装成帧然后发送到目标主机。在目标机中,在该包交付给网络层前,该包中的IPv6头部将先被还原成标准的IPv6报头。因为源主机和目标机在同一个局域网中,所以它们的网络前缀就是标准的Link-local前缀,该前缀值可以作为源和目的地址的前缀值,而Interface-ID的值则可以从以太网的帧头中提取出来,在帧中的源和目标MAC地址转换成EUI-64格式[5-6],转换方法为:
图5 LAN到LAN情况用IPv6报头
1)将48位的MAC地址从中间分开,插入一个固定数值FFFE:0050:3EE4:4C00—> 0050:3EFF:FEE4:4C00。
2)将第7个比特位反转,如果原来是0,就变为1,如果原来是1,就变为0,0050:3EFF:FEE4:4C00—> 0250:3EFF:FEE4:4C00。
3)加上前缀FE80::0250:3EFF:FEE4:4C00这就是一个完整的IPv6地址),然后加上网络前缀得到128 bit的源和目标IP地址。版本和有效负载长度的值也可以从以太网帧中获取,而流量类型和流标签的值则可以设置为0。在重组成含标准的IPv6报头的包后,该包就可以提交到网络层然后就可以像正常情况下一样处理该包。
当源主机在WAN中,而目标主机在一个LAN中时,数据包会先传送到边缘路由器,然后边缘路由器会对数据包进行检查然后找到LAN中的目标主机[7]。因此,在边缘路由器上数据包的报头可以重新设计,以便于更快捷地把该包发送给LAN中的目标主机。包中的目标主机的IP地址、流量类型、负载长度、跳数限制可以去除,只保留版本号、流标签、Next Header和源主机的IP地址。此时,包含着重新设计的IPv6头部的数据包将在数据链路层封装成帧然后发送给目标主机。在目标主机上,该包的IPv6头部在该包传送到网络层之前又可以恢复成标准头部的格式。在这个恢复过程中,版本号和负载长度的域值可以从以太网的帧头中读取到;而在IPv6中,IP地址被分割为前缀部分和接口ID[8-9],因此目的地址可以由路由通告的标准的全局前缀加上从以太网的帧头中获取到的目的MAC地址的接口ID组成。流量类型和流标签的域值则可以设置为0。包含着已经成标准恢复的IPv6报头的数据包就可以传送到网络层,然后进行相应的处理,该设计使得IPv6的数据包的报头长度从40 byte减少到20 byte。图6为WAN到LAN情况用IPv6报头。
图6 WAN到LAN情况用IPv6报头
当源主机在LAN中,而目标主机在WAN中的情况下。目标主机将有一个全局的IPv6地址[10],如果是这种情况,可以设计另一种IPv6报头,去掉源IP地址,保留目地地址;此外,流量类型、负载长度、跳数限制都可以去掉,流标签则保存。此时包含新的IPv6头部的数据包将传送给数据链路层,封装成帧并发送给边缘路由器。在边缘路由器上,该数据包在被传送给网络层之前,里面的IPv6头部就可以被恢复成标准格式。负载长度的值可以从以太网帧的头部中获得,跳数限制的值将被设置为默认值,流量类型的值如果没有在边缘路由器上特别设置的话就直接设置为0,从边缘路由器中获得的源IP地址的前缀加上从以太网中帧中获得的接口ID就可以组成标准的源IP地址。当该数据包中的IP头部被恢复成标准格式后,该数据包就可以传送到网络层,然后发送到目标主机。该设计使得IPv6的数据包的报头长度从40 byte减少到了20 byte,图7为LAN到WAN情况用IPv6报头。
图7 LAN到WAN情况用IPv6报头
从上面3种情况可以看到,新设计的3种IPv6头部使得压缩IPv6头部以及整个数据包的大小成为了可能。通过理论计算,可以得到图8,从图中可以直观地看到标准的IPv6头部和新设计的头部在LAN中传输的效率。对于128 byte和256 byte的数据包,使用新设计的IPv6头部的数据包的传输效率比使用标准的IPv6头部的数据包的传输效率最高可达71%((60-35)/35)和23%((80-65)/65)。因此,可以得出,对于小包,使用新设计的IPv6头部的数据包的传输效率要明显高于使用标准的IPv6头部的数据包。这对于在带宽受限的WLAN中传输IPv6小包有着重要的意义。
图8 在100 Mbit/s上帧长与吞吐量的对应关系
头部的长度对协议的性能在两个方面有着影响:第一,过大的头部将增加数据包交换和传输的延时;第二,过大的报头会占据过量的带宽,从而降低了链路的吞吐量。如果数据包中的数据部分占的比例很大,则该影响可以忽略不计;但是如果数据包中的数据部分在整个包中占的比例很小,则该影响会很大。
在本文中,介绍并且讨论了使用新设计的3种IPv6头部来减少在局域网数据流中IPv6报头大小。该方法减小了其头部乃至整个数据包的大小,从而使得传输IPv6数据包(特别是小包)的LAN中的传输效率有着显著的改善。
[1]林惠君,张思东,张宏科.基于IPv6的入侵检测系统的研究与实现[J].电视技术,2005,29(10):64-66.
[2]CACERES R,DANZIG P B,JAMIN S,et al.Characteristics of wide-area TCP/IP conversations[EB/OL].[2012-08-20].http://wenku.baidu.com/view/9c33b225a5e9856a5612600a.html.
[3]STEVENS.TCP/IP详解,卷 1:协议[M].北京:机械工业出版社,2000.
[4]周伯扬.IPv6技术初探[M].北京:国防工业出版社,2011.
[5]钟锐,陶智勇.基于Linux环境的IPv6的自动配置分析及实验[J].计算机应用,2012(A01):1-4.
[6]RFC1454 Comparison of Proposals for Next Version of IP[EB/OL].[2012-08-20].http://www.knowsky.com/381409.html.
[7]杨国良.IPv6技术、部署与业务应用[M].北京:人民邮电出版社,2011.
[8]HINDEN R,DEERING S.IP version 6 addressing architecture[EB/OL].[2012-08-20].http://wenku.baidu.com/view/1a91b0e8b8f 67c1cfad6b87e.html.
[9]李清.IPv6详解:卷1 核心协议实现[M].北京:人民邮电出版社,2009.
[10]王相林.IPv6核心技术[M].北京:科学出版社,2011.