吕 峰,杨海波,贾正锋
1(中国科学院大学,北京 100049)
2(中国科学院 沈阳计算技术研究所,沈阳 110168)
有线网络的传输速度从10 Mbps、100 Mbps 发展到1 Gbps、10 Gbps.但是无线网络的发展速度远远达不到有线网络的发展速度水平.目前小型有线局域网络大都可以实现1 Gbps 的传输速度,而无线网络的理论速度只有100 Mbps、300 Mbps,实际情况下会因为距离和干扰等原因使得传输速度远远达不到300 Mbps的理论速度.移动网络的速度虽然在高速发展,但传输速度也大都在100 Mbps 以下[1-6].
无线网络的传输速度瓶颈问题,极大限制了需要通过无线网络传输大量数据设备的发展.特别是目前摄像设备,许多移动高清摄像设备所录制的视频并不能通过单个移动无线网络终端将数据传输到中心服务器.特别对于汽车、轨道列车等移动场景,需要一套使用并行传输技术提高网络速度的系统来解决该问题[7-10].
本论文针对单个无线网络传输瓶颈的问题,设计并实现了并行传输网关系统.在不需要改变网络层与应用层协议的情况下,通过在无线传输两端添加专用的并行网关,将数据链路层以太网数据包进行重新封装后通过多个无线网络并行传输数据,提高无线网络的传输速度.网关之间的数据传输是基于UDT 数据传输协议,网关只要与无线设备之间网络连通即可,数据会通过系统原来的方式进行路由.
以太网帧格式,即在以太网帧头、帧尾中用于实现以太网功能的域.以太网帧格式多达5 种,但今天大多数TCP/IP 应用都是用Ethernet V2 帧格式(IEEE 802.3-1997 改回了对这一格式的兼容),而交换机之间BPDU(桥协议数据单元)数据包则是IEEE 802.3/LLC 的帧,VLAN Trunk 协议如802.1Q 和Cisco 的CDP(思科发现协议)等则是采用IEEE 802.3SNAP 的帧[11,12].
以太网的帧由:前导码、帧起始定界符、目的MAC 地址、源MAC 地址、类型/长度、数据、帧校验序列这些字节组成.具体帧结构和字段意义如表1.
表1 以太网帧格式表
基于UDP 的数据传输协议(UDP-based Data Transfer protocol,UDT)是一种互联网数据传输协议,是建于UDP 之上的可靠传输协议.UDT 是面向连接的双向的应用层协议.它支持可靠的数据流传输和部分可靠的数据报传输,同时传输效率要远远高于TCP[13-15].
实现并行传输需要有三个独立系统和设备,一是移动端的网关;二是服务器端;三是目标网络的网关.
其中,移动网络网关与外部目标网络网关是同一种配置不同的设备即并行网关,用来并行收发数据.服务器端配对两端网关设备.结构设计如图1所示.
并行网关与服务器之间网络联通,服务器协调多个并行网关之间的网络联通,使之成对进行传输.并行网关将收发数据进行并行收发处理,进入网关的数据会被分成多路传输到对端,网关会将接收到的多路数据组合成一路数据输出.其中多路的传输速度由各路网络速度决定,多路组合的速度不能也不会超过各路传输速度的总和[16-19].
图1 并行网络传输结构图
系统的设计思想是将以太网层的数据通过传输层进行传输,由传输层完成并行传输控制.每路UDT 通过物理上的一路传输网络进行连接,保证从每路UDT 收发的数据是从不同的无线网络进行传输的.可以将UDT 的客户端与服务器设置成不同网段的地址,物理连接时不同网段地址连接会被不同的物理网络分开.最后数据汇聚到并行网关.
从网卡接收数据后由上层处理数据时前导码与帧开始符是使用不到的,实际帧从目的MAC 地址开始.如果将以太网的数据帧并行传输到指定目标,需要以下两个功能:
1)对以太网的帧进行编号,确保在传输到指定目标前进行排序,防止以太网帧乱序.
2)更改目的MAC 地址为实际的目标MAC 地址.
并行传输处理的过程:
1)将网关从内部网络接收的以太网数据,去除目标MAC 地址,添加加消息头部(消息编号,时间戳),组成新的帧数据.消息头部(编号、时间戳)定义:
数据的帧格式会进转换,原以太网帧格式如表2所示,新帧格式如表3所示.
表2 原以太网帧格式表
表3 新帧格式表
2)由不同的物理连接网络将新的帧数据作为数据通过UDT(n路)可靠传输到对端并行网关.
对于接收到的UDT 数据进行解头,将消息头部提取,将头部后面的信息重新添加目标MAC 地址后组成新的的以太网帧数据.通过头部信息进行排序后,由单路有线网络发送到指定目标.具体的逻辑结构设计如图2所示.
解决并行控制与并行数据处理的问题方法:
1)每路UDT 的传输速度不一致,要保证数据包会按照每路UDT 传输的速度分配相应的数据量,就要实现每路UDT 进行抢占式的发送方式.每路UDT 强占到资源后会立即进行发送,发送完毕后再次进入就绪状态.
2)数据包的顺序问题,丢包处理.对传输过来的数据包根据包头中的msgindex 进行排序(序号可以设置为0-n的循环数字,n可以设置为80 000 以上的大数),确认数据包的顺序.设置超时机制,保证不会因为个别数据包的超时,影响后续数据包.
3)不同并行网关之间的联通问题.解决这个问题需要在网络可达的地方放置并行数据处理服务器.每台并行网关首先连接服务器,由服务器进行并行网关之间的匹配与建立连接.
图2 并行网络传输逻辑结构图
使用Linux 系统的x86 多网口工控机来实现并行传输网关设备.实际应用场景中网络连接的简图如图3所示.
图3 网络拓扑简图
并行传输网关设备的一路网口A 连接内部网络,其它多路网口Bi 连接无线或其它外部传输网络.内部网络发往外部网络和外部网络发往内部网络的数据,经过并行网关进行转发.
数据经过以下步骤进行并行转发:
1)内部网络数据发往外部网络数据.内部网络发往外部网络的以太网数据帧,会发送到并行传输网关的A 网口.
在并行传输网关中,通过Linux内核中的Netfilter 架构[20,21].首先在内核中添加特殊的网络桥接模块read_kernel.ko.即在数据进入到L2(数据链路)层时,截获数据,通过目标MAC 判断是否是内部网络数据,如果是则不处理,数据走正常流程.如果不是,去除数据中的源MAC 地址,将剩下的数据写入到虚拟设备write 中[22,23].内核程序通过虚拟设备与用户程序进行数据交换.内核程序流程图如图4(a)所示.
然后UDT 处理转发程序通过读取write 虚拟设备获得L2 层的以太网数据帧(已经去除源MAC 地址).在以太网数据帧上添加消息头部(编号、时间戳),然后将数据写入到阻塞队列,由多路的UDT 连接线程抢占式的读取阻塞队列,最后将数据发送到UDT 对端程序.数据即被发送到连接目标设备的并行传输网关中.
2)外部网络数据发往内部网络数据.外部网络发往内部网络的数据,会由添加头部的UTD 数据携带,发送到并行传输网关的UDT 接收程序.
UDT 处理转发程序接收到对端UDT 发送的数据,首先解析头部,得到数据包的编号与时间戳.通数据包的编号判断是否是顺序的数据包,如果是则将数据包去除消息头部后写入到read 虚拟设备中,如果不是,进行小范围排序后写入到read 虚拟设备中.用户程序通过read 虚拟设备将数据发送到linux 内核程序中,完成数据交换.
在内核中添加write_kernel.ko 模块,模块程序首先读取read 虚拟设备中的数据.获取以太网数据帧,添加源mac 地址后,开辟skb_buff 空间,将数据赋值给skb_buff,最后通过dev_queue_xmit 发送数据.程序流程图如图4(b)所示.
UDT 在程序中起到了上层转发的过程,将数据包的路由交给了默认的系统路由.上层并行处理的程序流程如图4(c)所示.
图4 程序流程图
新的数据帧会添加上UDT 的包头,所以数据在传输时会有速度的损耗.速度的损耗与数据载荷大小n有关,原以太网的数据包大小为n+20,使用UDT 进行数据传输的数据包大小为62+n,损耗率计算公式为:
数据载荷大小n的取值范围[0,1438],所以速度的损耗率sr的取值范围[0.028,0.687].
n越大速度的损耗越小,当数据高速传输时,n值较大,所以损耗率相当小.在实际使用并行网关的场景中速度的损耗几乎可以忽略.
不同网络实验的情况下,网络传输的速度情况如表4所示.
表4 并行传输实验对照表
并行传输网关是否能发挥最大效果,与实际的网络情况有一定关系,在大延时,丢包比较严重的情况下不适合使用并行传输网关系统进行并行传输来提高网络速度,可以使用并行传输网关系统进行冗余传输以改善网络丢包严重的情况.而在网络相对良好的情况下,并行传输网关系统可以有效提高网络的传输速度.多路并行传输的利用效率在80%-90%之间.
并行网关传输系统,适用于无线多路传输的场景,与有线多路传输的应用场景中.在移动端的网关添加不同运营商的网络模块,可以提供多运营商的并行传输网络,通过各运营商之间的信号覆盖互补,可以提高更加有效的网络.进行配置可以提供速度叠加高速网络或冗余可靠网络.但是该系统在某种程度上增加网络的延时,所以不太适合需要超低延时的场景.