最近测试服务器,上面配有5个网卡,测试中发现了一些异常,由于对多网卡工作模式缺乏了解,所以尝试翻译了一篇对多网卡网络连接比较有意思的文章,尽管是一个产品的说明介绍和问题解决方法,不过还是觉得对了解网络的传输有些作用的;
有些词汇翻译是按照自己的理解意译的,可能不大符合标准。这也是自己第二次比较完整的翻译一篇比较完整的英文技术文档。
原文地址:http://www.ni.com/white-paper/12558/en
CSDN下载地址:http://download.csdn.net/detail/julius_lee/5599489
首先介绍下:
NI LabVIEW Real-Time模块
NI LabVIEW Real-Time模块是一类通过图形化编程方法来创建可靠独立的嵌入式系统的完整解决方案。 作为LabVIEW开发环境的附加软件,LabVIEW Real-Time模块有助开发并调试图形化应用程序,这些程序可下载至嵌入式硬件设备(如:NI CompactRIO、NI Single-Board RIO、PXI、视觉系统,乃至第三方PC)并在该类设备上执行。
目前对于PC机或嵌入式设备配有超过一个以上的网卡已经非常常见,特别是在有线和无线网络同时存在的系统中用的更多。然而,整个网络布局中的单个网卡参数如果设置不恰当的话,便会导致多网卡(NIC)连接情况下的网络连接问题。这篇文档概述了网络的基础概念,解释了多网卡下不当的操作为什么会导致问题,提供了一些多网卡下配置网络的有效方法。另外,探寻了几种常用的使用场景,包括NI产品在实时监控系统(NI Real-Time Hypervisor)下的复杂网络配置功能。
如果你对这一部分概念已经非常熟悉,或者根本就不关心这样配置多网卡背后的原因,那么就可以跳过这一部分,直接阅读 目录2 中的配置多网卡的方法。
就如家庭或公司地址一样,必须要通过一个有序的编排,邮件才能被您接收到,万维网上的每个网络接口都被赋予了一个唯一的地址,即人为指定的介质访问控制器(MAC)地址。MAC地址由48比特位组成,通常由多个2个一组的16进制数组成,如:(e.g. 01:23:45:67:89:ab)。MAC地址或者其它指定的网卡地址,一般都会标识在该设备及标签上,也可以通过操作系统的软件去进行设置。
当两台计算机之间进行网络数据传输时,数据被分成了许多所谓的“包”进行传输,这些包包含了接收端接口的MAC地址,而每个端口都保持着监听发送给这个唯一地址的数据包。
图 1 :每个网卡都有一个唯一的MAC地址,如果一台机器有多个网卡,则每个网卡的地址必须是不同的。
如果世界上的每台电脑都连接在一起,而且知道所有其它电脑的MAC地址,那么就不再需要其它的什么地址协议了。然而,有几点理由可以证明这显然是不切实际的。
首先,如果组成这么一个庞大的公共连接,数据包的频繁冲突将是不可避免的,进而会导致通信不可靠。其次,保存世界上所有电脑设备的MAC地址,需要消耗很庞大的内存容量,并且这种方式在应对日益不断增加的设备接入上也不是一个上等的策略。
IP Address (IPV4)
显然,为了让所有的电脑都能通过因特网进行通信,有一个特别的地址分配方案是非常有必要的。实际中,用户可以给每个MAC地址指定一个或多个IP,从而在大多数网络堵塞通过“小池”时启用某些IP地址,而不是通过大批量机器传输来启动这些IP地址。实际上,IP地址是被32位值限定的,通常由4组3位数的十进制数表示,如:192.168.100.100。假设网络中有10台电脑进行了如下配置,它们的IP地址依次是192.168.100.0到192.168.100.9 。如果所有的机器通信规则为:IP地址必须是192.168.100.XXX才能授权接入交换网络内部,从而判断与一个指定的IP地址通信是否需要接入其它网络是比较容易的。
规则举例:所有IP地址为192.168.100.0到192.168.100.255的网卡都接入到了本地局域网中,用其它IP地址的网卡都不在本网络以内。
表一:由于IP地址可以被用户设置到任意网卡,所以就存在可能一组局域网内网卡被设置了一些近似的IP地址,对此也很容易区别这些IP地址是否在本地网络内或网络外。
用这个简单的道理来考虑问题有着明显的好处。鉴于MAC地址在一系列机器上不会是有规律可循分布的(它们一般由供应商随机分配),也由于IP地址是可以被用户自行进行配置的,因此IP可以按逻辑来分配,也可以用分层模式进行分配。通过这种方式,小型的局域网内计算机可以通过本地连接进行相互通信,从而减少在大型网络连接中才会出现的数据冲突。另外,虽然世界上连接以太网的网络接口一共超过了2 ^ 32个,但这些机器仍然可以接入到以太网,主要是通过了网络地址转换(NAT),通过小型网络实现了IP地址的复用。不过,关于NAT更多的讨论显然已经超出了本教程讨论的范围。
一般配置IP地址时,大家一般都会配置10.X.X.X,192.168.X.X 或者172.X.X.X 这些格式的ip进行使用。主要因为按这些形式变化的IP已经默认指定为在专用网络内使用,因此,如果你使用其中某一个IP的话,可以很确定不会有其他公共的服务器(比如,google.com)会使用和你相同IP地址。
需要注意的是这种情况下的信息交换通常都采用的是IPV4协议。下一版本的网络协议IPV6,将采用128比特位地址,但如今看起来还没有被广泛应用(尽管预计在接下来的几年中会逐步采用)。
子网掩码
当要向某一确定IP地址发送信息时,这台电脑如何确定它在本地网络连接中呢?或者依耐什么去访问外部网络呢?换句话说,如果我们要让电脑按照一定的规则完成前面内容中提到的那个例子的情况,那么这个规则该如何指定呢?
这其中一个关键的部分就是子网掩码,即一排类同IP地址一样通过4组数字组成的,32比特位来进行表示的数字串(比如:255.255.255.192)。当这32位中的某一位为1时,意味着发送与接收端的IP地址位在这一位不同,数据包必须路由到外部其它网络。相反的,如果这一位是0,则对于IP地址位是否不同没有多大影响,如果其它的所有位在接收和发送端的地址间且相同,则接收端会被认为是在同一个本地连接网络中。
图2:子网掩码提供了一种规则来区分哪些地址属于本地连接网络的,哪些连接的是外部网络
网关和默认网关
网络数据包在本地和外部网络之间是如何进行传输的呢?这个过程一般由所谓的路由去完成,也即常常暗指的网关(在这篇教程中,这两个术语经常作等价使用)。对于每一个连接在电脑上的网卡来说,用户通常会指定IP地址,子网掩码和默认网关。默认网关就是当数据必须要传送到本地网络以外时,需要使用到的路由的地址。
ARP请求
在这里,需要注意到的是在最底层,每一个数据包的传输都需要经过MAC地址。尽管IP地址提供了包括在子网连接方面的一些优势,但是必须注意的是,仅仅知道远程计算机网卡的IP地址信息对确保数据能完整到达该计算机是远远不够的。比如,两台电脑之间通过远程网络进行数据交换,而传输过程中很有可能会经过好几个路由。也就是说,一个数据包必须通过发送端的计算机到第一个路由,再由第一个路由传递到下一个路由,等等,一直到最后一个数据包到达目的计算机。因此,确定接收端路由的MAC地址和计算机接口的MAC地址,对于数据包在相互连接网络中的传输是非常重要的。
假设我们现在知道本地网络中一台目标计算机的IP地址:源计算机如何获取(目标计算机)正确的MAC地址来进行数据包的发送呢?这就需要ARP(Address Resolution Protocol)协议来支持了。继续上面的情况,发送端的计算机将会发送一个特殊的所谓ARP请求广播信息到本地网络中(以一个确定的IP地址来请求MAC地址)。网络中所有的设备会继续监听这一类特殊的请求,如果它们的IP地址相符,则会立即用MAC地址来进行回应。一旦发送端的计算机接收到了MAC地址信息,计算机通常就会将MAC地址和IP地址信息一起存放在缓存表中供后续使用。这种方式可以避免对相同的目标接口不停的发送ARP请求。
图3:计算机发送数据到远程网络接口,必须要知道该接口的MAC地址。假如不知道MAC地址,则计算机会通过ARP协议来请求指定的IP地址,然后目标机器返回它的MAC地址
信息
如果网络上的路由识别到IP请求来自于本地网络以外,它也可以用自己的MAC地址进行ARP回应,这就是所谓的“ARP代理”
总结:以太网数据包的传输解析
让我们再大致简略的回顾一下一个网络数据包是如何在源计算机和目标计算机间进行的数据传输。我们假定源计算机包含多个网卡接口。
1、网络数据包由源计算机进行准备发送(这个动作由应用程序或操作系统来完成)。数据包包含的信息有接收端的IP地址(可能已经通过DNS服务器获取);
2、如果缓存的ARP准入信息已经包含了与接收端一致的IP地址的MAC信息,则可以直接跳到步骤4进行;
3、发送端负责检测数据包的IP地址信息与它自己网卡设备的子网掩码是否匹配:
A、如果IP地址与对应网卡的子网不匹配,则ARP请求会被该网卡发送出去;
B、如果IP地址与任何网卡的子网都不匹配,则发送端将会负责检测每个网卡接口的默认网关;
i、如果所有的网口都只有一个默认网关,就会在ARP请求中加入它的MAC地址,或者重新发送ARP请求来获取网关的MAC地址;
ii、如果含有多个默认网关入口,则会选择一个满足最低标准的来使用(是由实际使用操作系统的几个因素来决定的)。从ARP表中获取MAC地址信息,或者通过重新发送ARP请求来获取网关的MAC地址。
iii、如果没有一个默认的网关入口,则会发送ARP请求到一个或多个网口上探测是否有用它自己的MAC(ARP代理)来响应的网关。
4、从ARP请求或ARP缓存中使用MAC地址发送以太网数据包。如果ARP请求没有产生结果,则数据包不会传送成功。如果接收端在远程子网连接中,则数据包会发给路由器,然后再由路由器将数据包发送给下一个连接,这样数据最终才会到达接收端。
当使用配置有多网卡功能的计算机时,用户必须更加小心网络的设置才能避免连接问题出现后的调试难题。按照以下这些步骤可以确保用户的多网卡系统运行正常。其中包括任何运行了桌面操作系统和LabVIEW 的PC或者嵌入式设备,也包含任何含有多网卡接口目标的NI LabVIEW Real-time 。
原则一:对IP自动获取保持小心(通过DHCP或连接本地地址)
大多数的操作系统通过DHCP服务自动获取默认的TCP/IP设置(ip地址,子网掩码,默认网关)。如果没有找到DHCP服务,经常性的做法是通过操作系统给它配置一个本地连接的地址,一般是169.154.X.X变化类型的。
确保你对自己网络中所使用的DHCP服务是很熟悉的,并且知道它使用是哪一段的IP地址及子网。同样的,你也有必要知道你网络中有哪些计算机的网卡使用了DHCP或没有使用DHCP配置了在169.254.X.X 段的IP地址。假如你对自己网络的自动获取IP情况不是很清楚,那你就很有可能会出现打破下面原则2或原则3的情况。
如果可能的话,尽量手动的为计算机中的每个网卡设置指定IP地址,固定你的网络配置。但是,如果你的网络上没有提供其它的DHCP客户端服务的话,DHCP可能就会不可用。
原则二:避免配置相同的子网到同一台电脑的多个网卡
在多网卡的系统配置中使用相同的子网会出现#1中的连接问题。尽管有些操作系统可以灵活的处理多网卡下使用相同子网的情况,但是其它的系统也有可能会尝试从不正确的接口非正常的发送数据包。用户也可以通过对一个网卡(需要其它的网络与该计算机的网卡是连接在一起的)配置192.168.X.X范围静态IP及子网掩码255.255.0.0,另一个网卡设置IP 10.0.X.X及子网掩码255.255.0.0来进行补救。但这仅仅是其中的一种配置方法,其它的两种或两种以上的不同子网配置方法也可以有效。但是强烈建议采用私有IP地址变化范围内的IP来进行网络配置,否则难以避免不会和公网上的网络发生IP冲突。
实际使用中,几乎找不到将多网卡同时配置在一个子网中的理由。一个与该设置方法相悖的更加高级配置是网卡适配组合,以此可以达到在多网卡下增加带宽的作用,不过这个配置的详细方法超出了本文的讨论范围。
图4 :当配置多网卡的控制器时,每个网卡都应是与不同的子网进行通信。配置两个或以上的网卡时若使用相同的子网,则有可能出现通信问题。
多网卡设置相同的子网,其中一个比较常见的情况就是来源于当有线和无线网络同时连接到一个相同的网络中时。尽管也有一些系统可以灵活处理这种情况,但确认有线和无线网络是否同时存在于不同的子网中,或使用其中一个网卡时禁用另一个网卡是最佳的实际选择。
原则三:避免为多个网卡设置不同的默认网关
当目标IP地址不属于任何一个网卡的子网时,默认网关会被启用来转接发包到外部网络。如果存在多个默认网关,数据包就很可能会被错误的路由到外部网络,导致网络不可达。
在大多数情况下,用户应当给所有以相同子网来连接网络的计算机网卡配置固定的地址,并将该接口的默认网关设置为空。典型的情况是,一般只有一个设置了网关的网卡可以连接到网络中或者企业网连接中应当有一个指定的默认网关。
表二:当选择使用TCP/IP协议来配置多网卡系统时,只为其中一个网卡配置默认的网关是最佳选择。让其中一个默认网关地址通过DHCP服务来自动获取也是可以的。
在其它情况下,比如网关和子网进行了绑定后连接到不同的网卡上时,用户可以手动指定网络路由(这是一个更高级配置方法),也可以直接让所有的网卡默认网关为空。
尽管在其中一个网口上给定默认网关时会更高效些(这种方法避免了ARP对外传输时在很多数据包上的需求),保持所有的默认网关为空可以避免多个网关存在于网络中的问题。但是,这种策略只能网关支持ARP代理的情况下才会起作用。
情况1:一个连接公网,一个网卡连接局域网
在这种情况下,一台PC主机的两个网卡接口分别连接着可以连接以太网的企业网(通过网卡1)和连接着几个相连了NI LabVIEW Real-Time的局域网(通过网口2)。企业网的中的网络设置为:网口1的DHCP地址变化在10.0.X.X范围内,子网掩码是255.255.0.0,默认网关路由地址是10.0.0.1。
图5:这种情况下,多网卡控制器(计算机)与连通了以太网的企业网和本地连接的局域网都进行了并行连接
从上面的步骤我们可以看出,网卡NIC 2 使用了一个子网在10.0.X.X范围以外的静态IP进行了本地局域网连接。尽管也许使用不在一个子网的10.1.X.X范围内的地址也可以连接,但是很有可能在10.X.X.X段的其它地址已经有一些使用在了额外的公共网络服务器等网络中,因此,对于局域网内使用192.168.X.X变化范围内的ip应该是比较可靠安全的。
由于我们工作在只有很少数量的NI LabVIEW Real-Time系统局域网环境中,所以我们可以使用子网掩码255.255.255.0,并使用在192.168.0.X范围的静态IP地址;这样的话最多可以连接255个网口到这个子网中。简单的说,计算机主机的网口(NIC 2)IP地址应该设置成192.168.0.1 。
将主机的网口NIC 2 的默认网关设置为空是非常重要的。这样的话,就正如我们所期望的主机只会启用网口NIC 1的默认网关来连接到以太网。此外,NI LabVIEW Real-Time上设备的默认网关也可以设置为空,因为它们只需要在本地子网间进行通信(因为根本没有网关)
表3:这个表格表示出了上文图5中系统的可能的一种IP配置方法。需要注意的是两个网口连接在不同的子网中,并且只有其中一个网卡的默认网关地址被指定。
情况2:使用虚拟网络(本地开发)配置NI产品的实时监控系统
NI 实时监控系统运行在windows或linux操作系统上并且与NI LabVIEW Real-Time一同运行。不管是操作系统还是NI LabVIEW Real-Time系统中的每个物理网卡都可以被分配,并且虚拟网卡(软件仿真实现的)也可以在各种操作系统上被分配出来达到简化系统内部信息交换的目的。
图 6:这种场景下,实时监控控制器同时独立的运行在windows XP和NI LabVIEW Real-Time系统中。另个系统之间通过一组虚拟网卡相互连接在一起,并且每个系统都有物理网卡通公共网和以太网连接在一起。
这种情况下,我们将可以在有两个物理网卡,并且内部虚拟网络连接可用的实时监控系统中进行相关操作。一个物理网卡赋给windows XP系统使用,另一个用到NI LabVIEW Real-Time系统中。进而,每个系统都可以有两个网卡可以使用(一个虚拟网络连接,一个物理连接)。这样,监控系统中的windows XP就可以被NI LabVIEW Real-Time的应用程序进行调用和开发。
假设另一种这样的情况,物理连接可以通过其中任一系统连接到公共网络中来进行以太网的通信,虚拟网卡仅仅用于NI LabVIEW Real-Time系统和windows XP系统之间进行通信,两个物理网卡控制器的IP地址都需要通过DHCP监听才能连接到公共网络中,这样IP地址的变化范围将是10.0.0.X,子网掩码为255.255.255.0,网关地址为10.0.0.1 。
从上面的情况可以看出,我们应该为每一个虚拟网卡设置不同子网内的静态IP地址,而不是使用每种系统下的物理网卡来进行。尽管10.X.X.X 变化范围内的某些地址可能已经被使用,但为了保险起见,我们可以单独设置windows XP或者NI LabVIEW Real-Time系统网卡的IP地址分别为192.168.0.1和192.168.0.2,子网掩码都设置为255.255.255.0 。
因为我们想让不管是windows XP 还是NI LabVIEW Real-Time系统都能通过物理网卡适配器连接到网络中,所以这其中只能有一个适配器能被设置默认网关,进而,两个虚拟网卡的默认网关入口也需要设置为空。注意,每个操作系统都最多只能有一个指定的默认网关。
表 4:这个表格展示了上图6系统的其中一种IP地址配置方法。因为在这种单监控控制器环境下运行了双系统,所以确保每个系统的每个网卡都连接在单独的子网中,并且只有一个默认网关很重要。
情况3:使用虚拟网络(远程开发)配置NI产品的实时监控系统
这种场景下,和上面情况2中一样,也应用了两个物理网卡在包含虚拟网络连接的实时监控系统中。但是,物理网卡将不会用于以太网的连接,而是连接NI LabVIEW Real-Time以后通过PC主机的连接来进行调用。
图 7:这种情况下,NI实时监控系统中的NI LabVIEW Real-Time通过与远程windows PC 机相连来为NI LabVIEW Real-Time开发应用程序提供研发支持。
windows 下的物理网卡适配器仍然会通过DHCP服务来设置10.0.0.X变化范围的IP地址及子网掩码255.255.255.0 。windows XP 和NI LabVIEW Real-Time系统中的虚拟网络连接将再一次独立的分别使用192.168.0.1和192.168.0.2两个静态IP地址,相应子网掩码为255.255.0.0且默认网关为空。
为了确保是物理网卡而不是虚拟网卡以不同的子网使用在NI LabVIEW Real-Time系统中,用户最好使用192.168.1.X 变化范围的IP地址和255.255.255.0的子网掩码来进行保证。因此,远程PC 网卡和NI LabVIEW Real-Time网卡可以独立的通过设置子网掩码为255.255.255.0 ,静态IP地址分别为192.168.1.1和192.168.1.2来进行连接通信。还是一样,因为没有和外网连接在一起(这个子网中目前仍没有网关),两个网卡都用不着设置默认网关。
表 5:这种情况下增加了一个远程NI LabVIEW Real-Time研发器,IP地址必须设置为远程PC机可以同监控系统中的NI LabVIEW Real-Time相连。
除了上面,还有更多的需要注意的配置信息,包括远程PC开发机和NI LabVIEW Real-Time目标机(可以连接到以太网)如何使用DHCP服务,或者NI LabVIEW Real-Time目标机及远程计算机的其它网卡如何连接到以太网中。
情况 4:连接到两个不通路径的网络(高级)
有时会有这样一个更加高级的应用场景,即需要配置一台双网卡并与不同本地连接进行通信的计算机(这次只有一种操作系统)。每个网卡都配有一个网关来实现将数据包转发到外部不同的网络。
图 8:这种复杂场景下,一个双网卡计算机连接到了两个不同路径的网络。特别是在外部网络不是本地网络子网的情况下,这种TCP/IP方面的配置将更加复杂。
假定本地连接A使用10.0.0.X 形式的IP地址,255.255.255.0的子网掩码,本地连接B使用10.0.1.X形式的IP地址,255.255.255.0的子网掩码。本地连接A通过网关与一个IP地址为192.168.0.X ,子网掩码255.255.255.0 的外部网络C相连,同样的,本地连接B通过网关与一个IP地址为192.168.1.X ,子网掩码255.255.255.0 的外部网络D相连.。
我们的目标是要让PC机的两个网卡都能连接到任何网络,因此,我们可以设置IP地址为10.0.0.5,子网掩码为255.255.255.0来连接一个网卡到本地连接A,设置第二个网卡IP地址为10.0.1.5,子网掩码为255.255.255.0来连接到本地连接B。如果默认网关不留为空,向外部发送的数据包就注定有可能从错误的网关传输出去,这是我们都不愿看到的结果。
为了解决这个问题,我们可以将两个网卡的默认网关入口设置为空,并且手动配置系统下数据包的传输路径。尽管不同系统间的配置有很大差异,但大多数都支持用户自己配置其它的指定传输路径,而且这些路径的配置需要在系统重启后才会生效。特别地,我们为了可以使用在网络连接A和C(如10.0.0.1)网关之间的IP地址,需要增加一个IP地址为192.168.0.X和子网掩码255.255.255.0的路径。网路连接B和D(如地址10.0.1.1)之间也需要同样的做法来增加一个IP地址为192.168.1.X,子网掩码255.255.255.0的网关。
表 6:虽然只有一个网卡控制器可以与网关连接通信(公共网或者以太网),但其它更加复杂的如图8中的配置方法则可能需要一个特殊的系统接入路径才能正常运行起来。
随着子网明显的增加,更多的路由需要增加到其中。实际中,大多数的网络连接设置是通过确保每台计算机都只有一个网关来进行网络连接来避免这种复杂配置的需要。
详细指导:双网卡实时控制器的初步认识
NI产品的软件配置和硬件防火墙
转载或引用请注明转载和引用地址:http://blog.csdn.net/julius_lee/article/details/9057563,谢谢!