论文部分内容阅读
1.引言
VLAN(802.1Q协议)是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。它的实现方式是在原有以太网帧的头部添加4字节的VLAN标签,用其中的12位TCI数据段来标记VLAN号,使得VLAN号相同的计算机被划为一个虚拟子网。
但是,VLAN技术在传统的以太网帧格式中只定义了4096个VLAN号,限制了其在更大规模的网络中的应用。解决以太网大规模应用如何突破VLAN划分瓶颈的一种方案是STACKING VLAN,又名QinQ或Double VLAN。它在 原有VLAN标签的基础上,再添加4字节的VLAN标签。这样将VLAN号数量扩充至4096*4096=16000000以上,可以满足大规模的城域网的要求(为了描述方便,下面称VLAN为称单VLAN,STACKING VLAN为双VLAN)。
目前实现单双VLAN技术的主要方法是为现有网络增加各种支持单双VLAN功能的交换机。对于一个典型的支持VLAN的交换机而言,它可以在不同端口上指定不同的VLAN号,在收发用户数据包时,自动将VLAN号加入或剥离出用户数据包。
但单双VLAN在广域网和局域网中的广泛应用,也会带来一些不同网络的兼容性问题。两种典型的问题如图1所示。
在图1左侧可以看到,当运营商想把一台原来在普通广域网中部署的服务器接入到应用双VLAN的广域网中时,如果想保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持双VLAN功能的交换机,来实现从普通网络到双VLAN网络的转换。
在图1右侧可以看到,当运营商自己的服务器同时部署在双VLAN的广域网中和单VLAN的公司局域网中时,如果保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持单双VLAN功能的交换机,来实现单双VLAN网络到普通网络的转换。
如果通过增加交换机硬件解决单双VLAN问题,其优点是所有添加和去除VLAN标志的工作由交换机完成,服务器端无需任何改变;缺点是硬件价格昂贵,项目成本增加。
如果运营商的网络服务器为Linux操作系统,可以使用内核自带的一个由Ben Greear开发的8021q网络接口驱动包。通过正确配置网络接口后,可以实现对包含有单VLAN的数据包的支持。但是现有的接口驱动模块只能完成对某一单VLAN号的过滤功能,并不支持带有双VLAN的数据包,也不支持任意带有VALN号的数据包通过同一接口进行过滤。同时它也没有解决当增加VLAN标志后导致MTU大于1500学节所引发的问题。
2.解决单双VLAN问题的软件方法
本文提出一种Linux环境下解决单双VLAN网络问题的软件方法,它是基于原有的8021q模块实现的。
在接收网络数据时,通过增加VLAN协议层来接收和处理VLAN类型的网络数据包,并提交给更上的协议层处理。在发送数据时,通过增加VLAN网络设备接口,把路由选择该接口来发送数据的上层应用程序传递而来的数据包,添加上相应的单双VLAN头,并交给网卡设备驱动发送数据。正确删除、添加单双VLAN头的工作,通过维护一定长度的HASH表完成。
在实现该软件方法的过程中,遇到两个重要问题:MTU问题和ARP请求问题,将在下面详细描述。
3.超长MTU带来的问题与解决方法
当使用以太网作为链路层时,其最大传输单元MTU为1500字节,如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据分成若干片,这样每一片长度都小于或等于MTU。
而在使用Linux上8021q模块的单VLAN以太网链路层中,由于会在以太网数据包头添加4字节的VLAN标志,导致了在接收和发送大数据包时出现一些问题。
我们提出的解决该问题的方法是,将链路层以太网卡驱动中的MTU值增大到1508字节,同时将VLAN网络接口层中的MTU参数仍设置为1500字节。这样发送端IP层分片时,采用VLAN接口层传递过来的MTU1500,传到VLAN接口层的数据包长度不会超过1500字节。当在VLAN接口层添加4字节或8字节的VLAN头后,传至链路层的整个数据包长度不会超过1508字节,满足链路层MTU1508字节的要求,可以正常发送。而接收端链路层MTU为1508,可以接收各种带4字节或8字节VLAN头的数据,因为接收的数据包长度最大为1508。
4.ARP缓存更新
所谓ARP,Address Resolution Protocol,就是地址解析协议,它为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址。
为了高效运行ARP,在每个主机端都有一个ARP高速缓存,其中存放了最近访问的IP地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,当超时后将重新进行ARP过程。
我们设计的单双VLAN混合模块添加VLAN头的过程,是以发送数据包的以太网目的地址为关键字,Hash查找其对应VID标志。当作ARP请求时,由于目的地址为0xFFFFFFFFFFFF,无法通过一般的Hash方法进行查找。为了保证ARP的正常工作,软件通过顺序查找IP关键字的方法,获得对应的VID标志,与Hash查找相比较,效率会低一些。用户可以通过增加主机端的ARP高速缓存超时设置,来减少ARP进行的次数。
5.效率测试及性能评价
测试环境描述:
服务器配置:Linux操作系统,内核版本2.6.11
交换机配置:港湾网络BigHammer 6802系列千兆交换机
客户机配置:Windows2000操作系统
测试内容与方法:服务器端在添加8021q模块、添加单双VLAN模块和不添加任何模块三种情况下,使用UDP TEST测试程序,持续通过VLAN网络接口向客户机发送长度为10,000字节的数据包,每正确发送10,000个数据包记录后,记录时间一次。
观察平均耗时可以看到,在添加单双VLAN模块后,网络传输效率比没有添加任何模块时略微有所下降(<1.4%),其主要原因是单双VLAN模块在处理VLAN包头时需耗费少许时间。但是与Linux内核自带的8021q模块相比较,提高效率约1.4%。
6.结论
本文提出并实现了一种Linux环境下VLAN和STACKING VLAN混合过滤软件解决方案。与常见的硬件解决方案相比较,它不需要增加额外的支持VLAN和STACKING VLAN的交换机,只需要在Linux服务器上配置一个模块接口即可,可以大大节省项目成本。而与以前的VLAN8021q软件解决方案相比,本解决方案增加了对VLAN和STACKING VLAN混合过滤功能,圆满解决了MTU问题和ARP问题,在效率上也超过原有的VLAN8021q解决方案,为用户解决VLAN和STACKING VLAN不同网路兼容性提供了一种新的解决方法。
(作者单位:廊坊师范学院)
VLAN(802.1Q协议)是一种通过将局域网内的设备逻辑地而不是物理地划分成一个个网段从而实现虚拟工作组的技术。它的实现方式是在原有以太网帧的头部添加4字节的VLAN标签,用其中的12位TCI数据段来标记VLAN号,使得VLAN号相同的计算机被划为一个虚拟子网。
但是,VLAN技术在传统的以太网帧格式中只定义了4096个VLAN号,限制了其在更大规模的网络中的应用。解决以太网大规模应用如何突破VLAN划分瓶颈的一种方案是STACKING VLAN,又名QinQ或Double VLAN。它在 原有VLAN标签的基础上,再添加4字节的VLAN标签。这样将VLAN号数量扩充至4096*4096=16000000以上,可以满足大规模的城域网的要求(为了描述方便,下面称VLAN为称单VLAN,STACKING VLAN为双VLAN)。
目前实现单双VLAN技术的主要方法是为现有网络增加各种支持单双VLAN功能的交换机。对于一个典型的支持VLAN的交换机而言,它可以在不同端口上指定不同的VLAN号,在收发用户数据包时,自动将VLAN号加入或剥离出用户数据包。
但单双VLAN在广域网和局域网中的广泛应用,也会带来一些不同网络的兼容性问题。两种典型的问题如图1所示。
在图1左侧可以看到,当运营商想把一台原来在普通广域网中部署的服务器接入到应用双VLAN的广域网中时,如果想保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持双VLAN功能的交换机,来实现从普通网络到双VLAN网络的转换。
在图1右侧可以看到,当运营商自己的服务器同时部署在双VLAN的广域网中和单VLAN的公司局域网中时,如果保持服务器上的原有配置不变,并且不再重新开发已有的网络应用程序,则必须增加一台或多台支持单双VLAN功能的交换机,来实现单双VLAN网络到普通网络的转换。
如果通过增加交换机硬件解决单双VLAN问题,其优点是所有添加和去除VLAN标志的工作由交换机完成,服务器端无需任何改变;缺点是硬件价格昂贵,项目成本增加。
如果运营商的网络服务器为Linux操作系统,可以使用内核自带的一个由Ben Greear开发的8021q网络接口驱动包。通过正确配置网络接口后,可以实现对包含有单VLAN的数据包的支持。但是现有的接口驱动模块只能完成对某一单VLAN号的过滤功能,并不支持带有双VLAN的数据包,也不支持任意带有VALN号的数据包通过同一接口进行过滤。同时它也没有解决当增加VLAN标志后导致MTU大于1500学节所引发的问题。
2.解决单双VLAN问题的软件方法
本文提出一种Linux环境下解决单双VLAN网络问题的软件方法,它是基于原有的8021q模块实现的。
在接收网络数据时,通过增加VLAN协议层来接收和处理VLAN类型的网络数据包,并提交给更上的协议层处理。在发送数据时,通过增加VLAN网络设备接口,把路由选择该接口来发送数据的上层应用程序传递而来的数据包,添加上相应的单双VLAN头,并交给网卡设备驱动发送数据。正确删除、添加单双VLAN头的工作,通过维护一定长度的HASH表完成。
在实现该软件方法的过程中,遇到两个重要问题:MTU问题和ARP请求问题,将在下面详细描述。
3.超长MTU带来的问题与解决方法
当使用以太网作为链路层时,其最大传输单元MTU为1500字节,如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据分成若干片,这样每一片长度都小于或等于MTU。
而在使用Linux上8021q模块的单VLAN以太网链路层中,由于会在以太网数据包头添加4字节的VLAN标志,导致了在接收和发送大数据包时出现一些问题。
我们提出的解决该问题的方法是,将链路层以太网卡驱动中的MTU值增大到1508字节,同时将VLAN网络接口层中的MTU参数仍设置为1500字节。这样发送端IP层分片时,采用VLAN接口层传递过来的MTU1500,传到VLAN接口层的数据包长度不会超过1500字节。当在VLAN接口层添加4字节或8字节的VLAN头后,传至链路层的整个数据包长度不会超过1508字节,满足链路层MTU1508字节的要求,可以正常发送。而接收端链路层MTU为1508,可以接收各种带4字节或8字节VLAN头的数据,因为接收的数据包长度最大为1508。
4.ARP缓存更新
所谓ARP,Address Resolution Protocol,就是地址解析协议,它为这两种不同的地址形式提供映射:32bit的IP地址和数据链路层使用的任何类型的地址。
为了高效运行ARP,在每个主机端都有一个ARP高速缓存,其中存放了最近访问的IP地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,当超时后将重新进行ARP过程。
我们设计的单双VLAN混合模块添加VLAN头的过程,是以发送数据包的以太网目的地址为关键字,Hash查找其对应VID标志。当作ARP请求时,由于目的地址为0xFFFFFFFFFFFF,无法通过一般的Hash方法进行查找。为了保证ARP的正常工作,软件通过顺序查找IP关键字的方法,获得对应的VID标志,与Hash查找相比较,效率会低一些。用户可以通过增加主机端的ARP高速缓存超时设置,来减少ARP进行的次数。
5.效率测试及性能评价
测试环境描述:
服务器配置:Linux操作系统,内核版本2.6.11
交换机配置:港湾网络BigHammer 6802系列千兆交换机
客户机配置:Windows2000操作系统
测试内容与方法:服务器端在添加8021q模块、添加单双VLAN模块和不添加任何模块三种情况下,使用UDP TEST测试程序,持续通过VLAN网络接口向客户机发送长度为10,000字节的数据包,每正确发送10,000个数据包记录后,记录时间一次。
观察平均耗时可以看到,在添加单双VLAN模块后,网络传输效率比没有添加任何模块时略微有所下降(<1.4%),其主要原因是单双VLAN模块在处理VLAN包头时需耗费少许时间。但是与Linux内核自带的8021q模块相比较,提高效率约1.4%。
6.结论
本文提出并实现了一种Linux环境下VLAN和STACKING VLAN混合过滤软件解决方案。与常见的硬件解决方案相比较,它不需要增加额外的支持VLAN和STACKING VLAN的交换机,只需要在Linux服务器上配置一个模块接口即可,可以大大节省项目成本。而与以前的VLAN8021q软件解决方案相比,本解决方案增加了对VLAN和STACKING VLAN混合过滤功能,圆满解决了MTU问题和ARP问题,在效率上也超过原有的VLAN8021q解决方案,为用户解决VLAN和STACKING VLAN不同网路兼容性提供了一种新的解决方法。
(作者单位:廊坊师范学院)