具体实施方式
本发明提出的基于虚拟网络接口和反向地址转换的网络数据传输方法,结合附图及实施例详细说明如下:
为了解决现有多网络接口带宽聚合技术需要修改现存网络协议或者网络基础设施、难于大规模部署的问题,本发明提出了一种基于虚拟网络接口和反向地址转换器的方法来支持多个物理网络接口的同时使用。
本发明提出的方法,其特征在于,在网络终端中设置一个虚拟网络接口,一个虚拟反向网络地址转换器,该方法包括:
网络终端通过虚拟网络接口发送IP网络数据包,该IP网络数据包再被所述虚拟反向网络地址转换器截取,虚拟反向网络地址转换器将该IP网络数据包中的源IP网络地址修改成被选择的物理网络接口的IP网络地址,再通过该物理网络接口进行发送;当终端的任何一个物理网络接口接收到来自服务器返回的IP网络数据包时,虚拟反向网络地址转换器截取该IP网络数据包,然后将该IP网络数据包的目的IP网络地址修改成虚拟网络接口的IP网络地址,并通过虚拟网络接口递送给上层的操作系统或用户。
虚拟网络接口是用户和操作系统识别为实际网络接口的虚拟计算机部件。它通过通用的设备驱动接口与用户或者操作系统进行交互,具有和物理网络接口一样的媒体类型,最大、最小帧长度,硬件地址(如MAC地址),以及IP网络地址。
虚拟反向网络地址转换器是一个虚拟的计算机部件。它连接终端上的虚拟网络接口和物理网络接口,截获用户或操作系统需要发送到服务器上的任何IP网络数据包,以及任何物理网络接口接收到的IP网络数据包,同时根据需要进行IP网络数据包的地址转换和数据发送。
从上面可以看出,本发明的方法只需要修改网络终端一侧,无需修改现存的网络协议以及网络基础设施,也无需服务器的配合,因此不但能够有效支持多个异构网络接口的同时使用和访问,还能够非常方便的进行部署和应用。
本发明的方法,包括以下内容:
在现有具有多个物理网络接口的网络终端(包括在主板设置的CPU、内存、外存、多个物理网络接口(例如图中所示的三个物理网络接口1、2、3),及其外围部件)的基础上,增加一个虚拟网络接口4和一个虚拟反向网络地址转换器5,如图2所示;其中在虚拟反向网络地址转换器中维护一张动态的数据转发记录表(图中未示出);
将所述虚拟网络接口的IP网络地址设置为一个内部IP网络地址或者一个合法的外部IP网络地址;
为现有网络终端上的所有物理网络接口,均分配一个合法的IP网络地址,用于能够访问Internet上的主机或被Internet上的主机寻址;
将上述的虚拟反向网络地址转换器5连接在虚拟网络接口4和网络终端上的所有物理网络接口之间;将虚拟网络接口设置为用户或操作系统使用的默认网络接口(即该网络终端的所有Internet网络访问,都通过该虚拟网络接口来进行);将虚拟反向网络地址转换器设置为能够截获虚拟网络接口和全部物理网络接口所发送或接收的IP网络数据包的网络地址转换器,如图3所示。虚拟反向网络地址转换器在截获到用户或操作系统发送的IP网络数据包后,再选择一个物理网路接口(以太网、WiFi或者3G)将该IP网络数据包发送至因特网,最后送至服务器。当截获到任一物理网络接口接收到的IP网络数据包时,虚拟反向网络地址转换器将把该IP网络数据包通过虚拟网络接口传递给操作系统或用户。
所述的数据转发记录表记录虚拟反向网络地址转换器在IP网络数据包转发过程中所维护的TCP连接的各种相关信息的连接记录。该连接记录包括如下几个域:虚拟网络接口IP,客户端口号,服务器IP,服务器端口号,物理网络接口IP,活动时戳,标志。其中虚拟网络接口IP为虚拟网络接口的IP网络地址,客户端口号是指虚拟网络接口侧所对应的TCP端口号,服务器IP地址是指网络终端应用程序所要连接的服务器的IP网络地址,服务器端口号是指服务器侧所对应的TCP端口号。上述的虚拟网络接口IP,客户端口号,服务器IP,服务器端口号标识了一条建立在虚拟网络接口和服务器之间的TCP连接。物理网络接口IP是指分配给上述的TCP连接的物理网络接口的IP网络地址,表示凡是属于这条TCP连接的IP网络数据包都将通过该物理网络接口进行发送或者接收。实际上它是记录了该TCP连接的转发路径。活动时戳是指在该TCP连接上最近一次数据传输发生时的时间。活动时戳主要是为了记录TCP连接的活动情况。对于长期不活动的TCP连接,可以认为该TCP连接已经无效,因此可以回收该条记录所占用的空间,以节省系统资源。标志是指上述TCP连接所处的状态,它有两个取值:“E”,“T”。“E”表示TCP连接已经建立,可以通过该连接发送或接收TCP数据包。“T”表示TCP连接处于关闭状态。处于关闭状态的TCP连接,在网络终端或服务器发送TCP连接关闭应答并经历一段时间后,可以从数据转发记录表中删除其所对应的连接记录。
在上述设置基础上,本发明的网络数据传输方法包括数据接收和数据发送过程,包括以下步骤:
所述数据发送过程,具体步骤如下:
1.1)网络终端通过虚拟网络接口发送IP网络数据包,该IP网络数据包被所述虚拟反向网络地址转换器截取;
1.2)虚拟反向网络地址转换器查看该IP网络数据包的负载是否是面向连接的传输层协议(如TCP,Transport Control Protocol)的IP网络数据包,如果是则进行步骤1.3),否则进行步骤1.11);
1.3)虚拟反向网络地址转换器查看该IP网络数据包是否是TCP连接建立的IP网络数据包(即SYN=1的TCP数据包),如果是则进行1.4),否则进行1.7);
1.4)虚拟反向网络地址转换器选择一条物理链路(例如,选择带宽-迟延乘积与已分配TCP连接的总数据流差值最大的物理链路),并将该物理链路对应的物理网络接口分配给该IP网络数据包对应的TCP连接;
1.5)虚拟反向网络地址转换器在数据转发记录表中建立一条新的连接记录,记录该TCP连接的转发路径,并将其标志域置为“E”,同时更新该记录中的活动时戳域;
1.6)虚拟反向网络地址转换器将该数据包的源IP网络地址修改成已分配的物理网络接口的IP网络地址,并通过该物理网络接口进行数据发送;
1.7)虚拟反向网络地址转换器在数据转发记录表中查找该数据包对应的TCP连接的连接记录,如果存在,则执行1.8),否则丢弃该IP网络数据包;
1.8)虚拟反向网络地址转换器查看该数据包是否是传输层的TCP连接关闭的IP网络数据包(即FIN=1的TCP数据包),如果是则进行1.9),否则进行1.10);
1.9)虚拟反向网络地址转换器将数据转发记录表中该数据包对应的连接记录的标志改为“T”;
1.10)虚拟反向网络地址转换器将该数据包的源IP网络地址更改为所述连接记录中的物理网络接口的IP网络地址,并通过该物理网络接口进行发送,同时更新连接记录中的活动时戳域;
1.11)虚拟反向网络地址转换器选择一条物理链路,将该IP网络数据包的源IP网络地址更改为该物理链路所对应的物理网络接口的IP网络地址,并通过该物理网络接口发送到因特网;
1.12)虚拟反向网络地址转换器定时扫描数据转发记录表中连接记录的标志域和活动时戳域,如果发现某一连接的标志为“T”,且其活动时间与扫描发生的时间相差大于阈值T1(一般取值范围为30秒-2分钟),表明该记录已经被正常关闭,则删除该记录;如果发现某一连接的标志为“E”,且其活动时间与扫描发生的时间相差大于阈值T2(一般取值范围为2小时-24小时),T2>T1,则表明该连接记录对应的TCP连接由于其他意外原因被关闭,则也删除该连接记录。
所述数据接收过程,具体过程如下:
2.1)网络终端的任何一个物理网络接口接收到来自服务器返回的IP网络数据包,虚拟反向网络地址转换器截获到该IP网络数据包;
2.2)虚拟反向网络地址转换器查看该IP网络数据包的负载是否是面向连接的传输层协议的IP网络数据包(如TCP数据包),如果是则进行2.3),否则进行2.5);
2.3)虚拟反向网络地址转换器在数据转发记录表中查找所对应的连接记录,如果存在,则进行2.4),否则将该IP网络数据包丢弃;
2.4)虚拟反向网络地址转换器将该IP网络数据包的目的IP网络地址更改为虚拟网络接口的IP网络地址,并通过该虚拟网络接口递送给上层操作系统或用户,同时更新该连接记录的活动时戳域;
2.5)虚拟反向网络地址转换器将该IP网络数据包的目的IP网络地址修改为虚拟网络接口的IP网络地址,并通过虚拟网络接口转发给上层操作系统或用户。
2.6)虚拟反向网络地址转换器定时扫描数据转发记录表中连接记录的标志域和活动时戳域,如果发现某一连接的标志为“T”,且其活动时间与扫描发生的时间相差大于阈值T1(一般取值范围为30秒-2分钟),表明该记录已经被正常关闭,则删除该记录;如果发现某一连接的标志为“E”,且其活动时间与扫描发生的时间相差大于阈值T2(一般取值范围为2小时-24小时),则表明该连接记录对应的TCP连接由于其他意外原因被关闭,则也删除该连接记录。
本发明方法的实施例说明如下:
本实施例以一台ThinkPad X301 2774(HH1)笔记本为例,来说明本发明的具体的实施过程。本实施笔记本的配置情况如下:
硬件配置:CPU:Intel Core2 Duo U9400;内存:3GB;硬盘:128GB固态硬盘;共有两个物理网络接口:1个Intel 82567LM以太网络接口(1Gbps)和一个Intel 5300 AGN无线WiFi网络接口。
软件配置:Windows XP sp3。
本实施例的实施过程如下:
首先,在笔记本ThinkPad X301 2774(HH1)上,增加一个虚拟网络接口和一个虚拟反向网络地址转换器;其中虚拟反向网络地址转换器维护一张动态的数据转发记录表;
其中,虚拟网络接口的实施例为:
虚拟网络接口通过向Windows XP系统安装一个驱动程序的方式来实现。该驱动程序用WDK(Windows Driver Kit)实现为一个符合NDIS(Network Driver Interface Specification)的WDF小端口驱动(Miniport Driver)。在DriverEntry中,首先初始化一个包装句柄(Wrapper Handler),该句柄提供驱动对象的指针和这个驱动的注册表路径。然后填写相应小端口特征函数(即回调函数),最后将该驱动注册为一个小端口网络驱动。
在初始化过程中,该小端口驱动不从注册表中读取网络接口信息,而是直接在网络接口(即适配器)结构中,设置一个以太网络适配器。在MPinitialize函数(即InitializeHandler所指函数)中,将该适配器的媒体类型设置为“NdisMedium8023”,即设置为一块标准的以太网网络接口,最大帧长度为1500Byte。将虚拟网络接口的MAC地址设置为:A5-BA-DB-FE-A8-96,IP地址设置为:192.168.0.5。依据上述设置生成适配器结构和适配器上下文。最后激活该适配器实例,完成虚拟网络接口的设置。
虚拟反向网络地址转换器的实施例为:
在Windows XP系统中,虚拟反向网络地址转换器可以利用WDK实现为一个NDIS中间层驱动来实现其功能。该NDIS中间层驱动位于Windows本身的NDIS协议驱动和NDIS小端口驱动之间,截获操作系统或用户通过任何协议和任何网络接口发送的数据包,以及所有NDIS小端口(即网络接口)驱动所接收的数据包。在DriverEntry中,首先初始化包装句柄,然后再注册小端口特征函数(即回调函数)和协议特征函数。其次,在注册表中取得所有物理网络接口的设备名(DeviceName),调用驱动注册的PtBindAdapter函数实现协议驱动对小端口的绑定。该NDIS中间层驱动截获数据后的操作步骤将在后面结合数据的发送和接收过程进行说明。
为了得到所有物理网络接口的MAC地址,虚拟反向网络地址转换器可以利用Windows系统本身的Oid查询请求获得每一块物理网络接口的MAC地址。为了得到该MAC地址所对应的IP地址,虚拟反向网络地址转换器可以利用ARP协议来获得所需要的MAC到IP的对应关系。由于虚拟反向网络地址转换器能够截获到所有的数据包,因此也可以截获ARP请求的应答包,这样就可以知道该MAC地址所对应的IP地址。
在本实施例中,虚拟网络接口的IP地址设置为:192.168.0.5,有线网络接口的IP地址设置为166.111.139.211,无线网络接口的IP地址为166.111.139.212。
本实施例的数据发送过程实施的流程图如图4所示,包括以下步骤:
1)网络终端通过虚拟网卡(IP地址为192.168.0.5)发送IP网络数据包(例如向服务器166.111.4.100的端口80发送TCP连接请求IP网络数据包,为简单起见,将该TCP包记为:<192.168.0.5,80,166.111.4.100,80,SYN>。其中各个字段分别表示源IP网络地址,源端口,目标IP网络地址,目标端口,以及TCP包类型。或者向服务器166.111.4.100的端口80发送TCP数据包,将该TCP数据包记为:<192.168.0.5,80,166.111.4.100,80,DATA>。或者向服务器166.111.4.100的端口80发送TCP连接关闭数据包,将该TCP数据包记为:<192.168.0.5,80,166.111.4.100,80,FIN>。),虚拟反向网络地址转换器截获该IP网络数据包;
2)虚拟反向网络地址转换器查看该IP网络数据包的负载是否是面向连接的传输层协议(如TCP,Transport Control Protocol)的数据包,如果是则进行步骤3),否则进行步骤11);
3)虚拟反向网络地址转换器查看该IP网络数据包是否是TCP连接建立数据包(即SYN=1的TCP数据包)(例如<192.168.0.5,80,166.111.4.100,80,SYN>),如果是则进行4),否则进行7);
4)虚拟反向网络地址转换器根据当前两个物理网络接口上已经分配的数据流状况,以及每条物理链路的带宽-迟延乘积大小,选择两者差值最大的物理链路,并将对应的物理网络接口(有线网络接口166.111.139.211)分配给该TCP连接;
5)虚拟反向网络地址转换器在数据转发记录表中建立一条新的连接记录,并将活动时戳域置为当前时间,标志域置为“E”,例如如果该IP网络数据包为<192.168.0.5,80,166.111.4.100,80,SYN>,则所建立的连接记录如下:
6)虚拟反向网络地址转换器将该网络数据包的源IP网络地址修改成已分配的物理网络接口的IP网络地址,即将该TCP包更改为:<166.111.139.211,80,166.111.4.100,80,FIN>,并通过分配的有线物理网络接口发送到因特网;
7)虚拟反向网络地址转换器在数据转发记录表中查找对应该IP网络数据包(<192.168.0.5,80,166.111.4.100,80,DATA>或<192.168.0.5,80,166.111.4.100,80,FIN>)的TCP连接的连接记录,如果存在,则执行8),否则丢弃该IP网络数据包;
8)虚拟反向网络地址转换器查看该IP网络数据包是否是传输层的连接关闭数据包(即FIN=1的TCP数据包),如果是则进行9),否则进行10);
9)虚拟反向网络地址转换器将数据转发记录表中所对应连接记录的标志改为“T”;
10)虚拟反向网络地址转换器将该IP网络数据包的源IP网络地址更改为相应连接记录中的物理网络接口的IP网络地址,即将该IP网络数据包更改为:<166.111.139.211,80,166.111.4.100,80,DATA>或者<166.111.139.211,80,166.111.4.100,80,FIN>,并通过该物理网络接口进行发送,同时更新连接记录表中的活动时戳域;
11)虚拟反向网络地址转换器选择一条的物理链路,将该IP网络数据包的源IP网络地址更改为该物理链路所对应的物理网络接口的IP网络地址,并通过该物理网络接口发送到因特网;
12)虚拟反向网络地址转换器定时扫描数据转发记录表中连接记录的标志域和活动时戳域,如果发现某一连接的标志为“T”,且其活动时间与扫描发生的时间相差大于阈值T1(30分钟),表明该记录已经被正常关闭,则删除该记录;如果发现某一连接的标志为“E”,且其活动时间与扫描发生的时间相差大于阈值T2(2小时),T2>T1则表明该连接记录对应的TCP连接由于其他意外原因被关闭,则也删除该连接记录。本实施例的数据发送过程实施的流程图如图5所示,包括如下步骤:
1)网络终端的有线网络接口或无线网络接口接收到IP网络数据包(例如收到服务器166.111.4.100的端口80发送TCP数据包,将该TCP包记为:<166.111.4.100,80,166.111.139.211,80,DATA>),虚拟反向网络地址转换器截获到该IP网络数据包;
2)虚拟反向网络地址转换器查看该IP网络数据包的负载是否是面向连接的传输层协议的IP网络数据包(如TCP数据包),如果是则进行3),否则进行5);
3)虚拟反向网络地址转换器在数据转发记录表中查找该数据包所对应的连接记录,如果存在,则进行4),否则将该IP网络数据包丢弃;
4)虚拟反向网络地址转换器将该IP网络数据包的目的IP网络地址更改为虚拟网络接口的IP网络地址,即将该IP网络数据包更改为:<166.111.4.100,80,192.168.201.5,80,DATA>,并通过该虚拟网络接口递送给上层操作系统和应用程序,同时更新该记录的活动时戳域;
5)虚拟反向网络地址转换器将该IP网络数据包的目的IP网络地址修改为虚拟网络接口的IP网络地址(192.168.0.5),并通过虚拟网络接口转发给上层操作系统和应用程序;
6)虚拟反向网络地址转换器定时扫描数据转发记录表中连接记录的标志域和活动时戳域,如果发现某一连接的标志为“T”,且其活动时间与扫描发生的时间相差大于阈值T1(30分钟),表明该记录已经被正常关闭,则删除该记录;如果发现某一连接的标志为“E”,且其活动时间与扫描发生的时间相差大于阈值T2(2小时),T2>T1则表明该连接记录对应的TCP连接由于其他意外原因被关闭,则也删除该连接记录。