Total Pageviews

Tuesday, 22 November 2011

用双网卡合并带宽提高网速

一,双接入线路带宽合并是不小的难题

       企业对外申请了两条线路,一条是网通ADSL线路,带宽是1M;另外一条是电信通的线路,带宽是2M。企业内部是通过代理服务器的方法将内部数据包转发出去。代理服务器上有双网卡;但是一直以来都没有找到完美的合并带宽的工具和手段,平时网通ADSL线路作为备份线路使用,一般情况只通过电信通线路访问外网。

       要实现的目的则是将代理服务器上的两块网卡分别连接两条外网出口线路,然后将他们合并到一起,从而提高网络通讯整体速度。要求测试后能够看到下载速度达到两条线路之和就非常完美了。前者网通ADSL线路,带宽是1M,对应的下载速度是130KB/s,后者电信通的线路,带宽是2M,对应的下载速度为260KB/s;合并后总带宽极限应该能够到达400KB/s。

二,从本地路由下手:实现双网卡带宽有效合并

        网上有一些工具是将多个网卡合并到一起使用,不过笔者之前也尝试过效果都不太好,因为任何的软件合并都不够智能,经常造成两个网卡传输冲突,从而适得其反影响实际传输速度。今天笔者要介绍的办法则是通过从本地路由下手来突破网络速度极限。

众所周知对于多网卡的计算机来说我们可以把他看成是一台路由器,代理服务器就是利用这种路由数据原理工作的。路由器中都存在着名为路由表的数据条目,通过路由表中的信息来转发数据。当计算机有多个网卡时我们是否可以通过设置路由表来转发数据呢?将一部分数据发送到网卡1而另外一部分数据转发到网络2传输出去呢?答案是肯定的,我们可以像设置路由那样针对计算机操作系统添加路由条目。

在Windows系统中我们通过route print命令来查看路由表,这个路由表是本地系统的;通过route add命令添加一条路由表条目,通过route delete删除路由条目。

       既然我们可以通过命令来添加路由表和条目信息,那么如何来填写路由条目呢?在route add命令中我们需要知道转发网络IP段以及对应的子网掩码,同时还需要知道路由下一跳地址。笔者以企业实际应用为例进行介绍。

当企业计算机上有多个网卡时我们可以通过ipconfig来查看各个网卡的地址信息,例如网卡1是192.168.1.120,网卡1的网关是192.168.1.1;网卡2是116.245.96.246,由于是PPPOE拨号所以网关也是116.245.96.246。(如图1)

 接下来我们就要确定数据缺省从哪个网卡走,这里假设缺省数据从网卡2走,那么当我们在命令提示窗口中输入route print时将能够在最下面看到default gateway的字样,这个就是缺省网关,从图中可以看到当前系统的缺省网关是网卡2的地址116.245.96.246,而不是网卡1的网关192.168.1.1。(如图2)

如果发现在route print里显示的default gateway默认网关地址不是我们所希望的缺省网卡该如何更改呢?例如上例中默认网关是网卡1的网关192.168.1.1。那么我们可以通过两个方法解决,首先禁用网卡1,然后重新启动计算机,再通过route print查看缺省网卡,由于系统只有网卡2处于启用状态,所以缺省网卡也自然变成了网卡2的网卡,最后再启用网卡1即可。如果这个方法不管用我们就需要编辑注册表中与本地连接有关的键值了,通过修改键值将网卡2的键值更改排列到网卡1的前面,从而解决了缺省网卡的问题。具体键值为[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Tcpip\Parameters\Interfaces\,由于篇幅关系这里就不详细说明了,一般来说大部分情况按照第一个办法可以解决。

确保默认网卡是自己认同的数据默认通讯地址后我们就要根据实际来添加路由表了,这里假设我们要访问58.129.0.0这个地址段,不过为了提高速度让他们不从默认网关(网卡2)通讯而是从网卡1走,那么我们就需要添加一条这样的指令)route add 58.129.0.0 mask 255.255.0.0 192.168.1.1。(如图3)

首先route add后面跟的是网段,包括网络号和子网掩码,另外最后还需要写上下一跳地址,一般就是网卡1的网关地址,例如本例中的192.168.1.1。

添加完路由表条目后我们通过route print命令可以看到58.129.0.0对应的路由信息出现在路由表中,下一跳地址是192.168.1.1。(如图4)

小提示:

下一跳地址是数据转发到的地址,必须填写网卡1的网关地址,不是网卡1的IP地址,否则路由条目将无法正常工作,网络访问58.129.0.0这个网段将出现死循环,通讯数据连接超时。

当然除了route add命令是添加路由条目外,如果我们书写错误的话还可以通过route delete命令删除条目,记得书写时要写全才能让删除命令生效,当然route命令还有很多额外参数,例如metric这类跳跃数设置等,在本例中用的不多,因为我们的路由都只是一跳而已,所以可以不填写,当然感兴趣的读者想知道具体命令可以通过/?来查询。

三,测试效果:双网卡的速度极限达400KB/s

       通过一条简单的路由条目添加命令我们实现了有数据要访问58.129.0.0 255.255.0.0网段时通过网卡1传输出去,而其他所有数据都从网卡2传输出去,从而有效的扩大了带宽,将两条线路的速度都极大的发挥出来。

设置完毕后笔者通过两个FTP服务器下载资源,一个FTP服务器位于58.129.0.0 255.255.0.0网段,另外一个FTP服务器在外网其他地址。正常情况下不设置路由条目的话,我们只能够通过一个网卡来完成下载任务,最多也就250KB/s,而通过设置路由转发条目后访问58.129.0.0 255.255.0.0网段的数据从网卡1传输出去,而访问另外一个FTP服务器的数据则依然走网卡2。从图中我们可以看到网卡2下载速度达到了250KB/s,而与此同时网卡1下载速度并没有受网卡2线路的最大带宽限制依然保持在157KB/s的极速。要知道这样的下载并不是峰值而是稳定传输,通过巧妙设置我们发挥了双网卡的速度极限,两者之和可以达到400KB/s并且这种传输是稳定的。(如图5)

                                                                                   

当然在实际使用过程中我们可以通过tracert 58.129.*.*(*号用实际IP替代)的命令来判断设置的路由条目是否生效,如果第一跳转发到192.168.1.1则表明设置正确,如果还是走网卡2的缺省网关116.245.96.246的话就要再次执行route print查询故障了。例如笔者查询58段第一跳被成功转发到了192.168.1.1,这表明设置完全正确没有任何问题。(如图6)

                                                                                   

小提示:

我们通过手工添加的路由条目在系统重新启动后会自动消失,因此如果想长期使用和管理维护的话我们可以通过建立一个批处理文件并加入到启动项中自动运行的办法来解决,这样每次重新启动系统后该路由条目依然会被自动添加。

四,如何实现数据分流?下载走网卡1,浏览走网卡2?

       之前我们介绍的是基于网段的分流,通过添加多个网段我们可以实现更加详细的地址分段,发往不同地址的数据包通过不同网卡传输出去。不过在实际使用中笔者也遇到了这样的问题,有没有办法让所有的下载走网卡1,浏览页面走网卡2通讯呢?笔者想来想去也没有找到能够高效解决的办法,希望有经验的读者可以和我们联系一起探讨。

       解决的办法是利用代理为软件分流,我们可以在网上找一个速度比较快有保障的代理服务器,知道了代理服务器地址后我们可以将这个代理服务器地址通过route add命令指定访问该代理服务器走哪块网卡。接下来指定某软件使用代理服务器通讯即可。例如我们指定了迅雷下载使用代理服务器1.1.1.1,然后再利用route add将访问1.1.1.1的数据转发给网卡1的网关,其他数据依然从网卡2传输,这样就解决了软件分流的问题。不过这个方法存在一个问题,那就是对代理服务器的稳定性和速度要求比较高,如果代理服务器隔三差五的无法使用,我们也不得不为频繁找代理频繁加路由条目而头疼。(如图7)

                                                                                   

小提示:

对于不具备代理设置功能的软件来说我们可以利用第三方代理工具winsocks来实现指定该软件使用代理的功能。

五,总结:

       通过本文介绍的围魏救赵曲线救国的方法,我们可以轻松将两块网卡合并到一起,发挥他们的速度极限,从而以最佳速度为企业应用服务,大大提高了企业应用的效率,让企业业务开展事半功倍.

No comments:

Post a Comment