在NI产品上使用多个网络接口

在NI产品上使用多个网络接口

概览

在计算机或嵌入式控制器上有多个以太网适配器,尤其是有线和无线适配器共存,正在变得越来越普遍。 如某个网络接口配置不当,或配置时未考虑到整个网络布局,多个以太网网络接口的系统可能会导致网络连接问题。 本教程列出了基本的以太网概念,解释了多网络接口系统可能发生故障的原因,以及提出了使用多网络接口系统的最佳规范。 另外,本教程还介绍了几种常用的使用场景,包括使用复杂网络配置的NI Real-Time Hypervisor系统。

目录

  1. 背景知识:以太网网络概念
  2. 配置多网络接口系统的规范
  3. 情境范例
  4. 其他资源

1. 背景知识:以太网网络概念

解释配置多网络接口配置器之前,需要先了解以太网工作的基本原理。 该部分解释了单个网络接口如何寻址,数据包如何在以太网上选择传输路径,一个典型的以太网数据包传递是怎样的。

如果你已熟悉这些概念,对背后的原因不感兴趣,可直接跳至配置多网络接口系统指南

数据链路层:MAC地址

需要指定家庭或公司地址,才能发送邮件。制造商必须给以太网适配器的每个端口分配一个独一无二的地址,这个地址被称为MAC地址。 MAC地址由48位组成,通常表现为一串十六进制的数字,两个数字为一组。例如,01:23:45:67:89:ab。 以太网适配器的MAC地址通常印在设备标签上,也可通过操作系统的网络设置获取。

当两台计算机之间在传递以太网数据,数据分成一个个较小的数据包,每个数据包都包含接收方的MAC地址。 每个接收方都在连续侦听要发送至唯一地址的数据包。

图1:计算机的每个网络接口都有一个唯一的MAC地址。 如一台计算机上有多个网络接口,那每个网络接口都有其唯一的MAC地址。

图1:计算机的每个网络接口都有一个唯一的MAC地址。 如一台计算机上有多个
网络接口,那每个网络接口都有其唯一的MAC地址。

因特网层寻址

如果世界上的所有计算机都通过一根网线连接,计算机之间互相知道MAC地址,那就不需要其他寻址方案了。 但是,这只是一种设想,并不可行。 首先,在巨大的一个共享连接中,数据包冲突会时常发生。这样数据通信就变得不可靠。 其次,将世界上所有计算机的地址存在本地计算机上对存储器的需求也很大。考虑到会有大量新设备加入,要更新设备地址也不是一个可行的方案。

IP地址(IPv4)

显而易见,需要一个新的寻址技术使计算机能通过以太网与其他计算机或设备互联。 在实际操作中,用户可以为一个MAC地址分配一个或多个IP地址,使得网络数据交换尽量在一个小的“池子”里进行,而不是在所有机器间穿梭。IP地址是一个32位的值,由一组4个三位数组成。 假设有一个网络,网络中10台计算机,它们的IP地址是192.168.100.0~192.168.100.9。 如果所有设备都遵循规则:IP地址为192.168.100.xxx的设备都在内部网络中,那么就容易分辨与特定IP地址的通信是否在内部网络之外了。

规则范例:所有位于192.168.100.0至192.168.100.255之间的IP地址都在本地网络以内,其他IP地址都在本地网络以外。

表1. 用户可为网络接口分配IP地址,可以为一组网络接口设置类似的IP地址,然后分辨一个特定的IP是否位于本地网络以内。

表1. 用户可为网络接口分配IP地址,可以为一组网络接口设置类似的IP地址,
然后分辨一个特定的IP是否位于本地网络以内。

这个简单的思路带来的好处是显而易见的。 在一些设备中,MAC地址的格式可能不尽相同。IP地址由用户设置,可按照一定的逻辑层级关系来设置IP地址。 使用格式统一的IP地址,同组的计算机就能通过本地数据交换实现通信,避免更大范围的数据冲突。 另外,世界上的以太网设备超过2^32台。不同的局部网络中可使用重复的IP地址,但是可通过NAT访问局部网络中的计算机。 NAT的详细内容不在本教程的讨论范围。

配置IP地址时,可能会看到10.x.x.x、192.168.x.x、172.x.x.x等格式的IP地址。这些范围内的IP地址用于局部网络,从而保证较大的公共服务器(例如,google.com)使用的IP地址与局部网络中的IP地址不会产生冲突。

本文档的内容适用于最常见的因特网协议IPv4。 下一代版本的因特网协议,IPv6使用128位地址,但是用得较少(使用率在未来几年内见长)。

子网掩码

当查看要发送数据的IP地址,计算机如何知道这是本地网络的计算机,还是本地网络以外的计算机? 如果要计算机按照IP地址的命名规范来判断,那么如何制定这个规则?

实现的关键是子网掩码。子网掩码是一组32位数字,由4个数字组成,形式与IP地址相同。例如,255.255.255.192。 32位数字中,如出现二进制1,表示如果该位上发送方和接收方IP地址不一致,那么以太网数据包将被发送到本地网络以外。 与此相反,如某位出现数字0,表示IP地址位不同时没有关系;发送方和接收方的所有其他位如果一样,那么接收方就和发送方在同一个本地网络。

图2: 子网掩码指定了一个规则,识别哪些地址在本地网络以内,哪些地址在本地网络以外。

图2: 子网掩码指定了一个规则,识别哪些地址在本地网络以内,哪些地址在本地网络以外。

网关和默认网关

以太网数据包如何在本地和外部网络之间传递? 该任务通常由路由器完成。路由器有时也被称为网关(本教程使用这两个名字)。 对于每台连接至计算机的以太网适配器,用户通常指定一个IP地址、子网掩码和默认网站。 默认网关就是路由器的地址。要发送数据包至本地网络以外时,就会用到路由器地址。

ART请求

最基本的概念是每个发送的以太网数据包都必须发送到一个MAC地址。 IP地址与MAC地址相比有诸多优势(例如,子网掩码)。仅仅知道一台远程计算机的IP地址无法保证数据包被发送到这台远程计算机。 例如,在两台远程计算机之间交换数据,可能要经过若干台路由器。 在底层,一个数据包必须通过发送计算机发送到第一个路由器,然后再发送一个数据包从第一个路由器到下一个路由器,直到这个数据包达到目标计算机。 在每个链路间发送的数据包必须知道发送方计算机和接收方路由器的MAC地址。

假设发送方和接收方计算机IP地址的首位相同,发送方计算机如何获取数据包发送目标的MAC地址? ARP协议可用于这种情况。 发送方计算机将会在本地网络上发送一个特殊的广播消息,被称为ARP请求(请求指定IP地址的MAC地址)。 网络上的所有以太网设备连续侦听这些特别请求,如果符合指定的IP地址,当发送方发送MAC地址作为回应。 一旦MAC地址被接收方计算机接收,计算机将把MAC地址/IP地址保存在缓存中。 避免对同一个目标连续发送多个ARP请求。

图3:要发送数据至远程以太网设备,发送方计算机必须知道远程以太网设备的MAC地址。 如果不知道MAC地址,计算机可将ARP请求发送至指定的IP地址,目标机器将返回MAC地址。

图3:要发送数据至远程以太网设备,发送方计算机必须知道远程以太网设备的MAC地址。 如果不知道
MAC地址,计算机可将ARP请求发送至指定的IP地址,目标机器将返回MAC地址。

如果网络上的路由器知道请求的IP地址在本地网络以外,也可返回对ARP请求返回路由器的MAC地址。 这种形式叫做“代理ARP”。

总结:以太网数据包传送

下面将简单复习以太网数据包从源发送至目标的过程。 假设源PC包含多个以太网接口。

  1. 以太网数据包将由源计算机发送(与特定应用程序或操作系统进程相关)。 数据包包含接收方的IP地址(从DNS服务器获取)。
  2. 如有一个缓存在ARP项,包含对应于接收方IP地址的MAC地址,进入第4步。
  3. 发送方查看数据包的IP地址,以及以太网接口的子网掩码。
    1. 如IP地址是某个接口的本地子网,则ARP请求就发自该接口。
    2. 如IP地址在接口子网之外,发送方将查看每个接口的默认网关。
      1. 如果所有接口只有一个默认网关,那么使用ARP表中包含的MAC地址,或发送一个新的ARP请求查找网关的MAC地址。
      2. 如有多个默认网关项,使用最低配置的网关(由多种因素决定,因OS而异)。 在ARP表中找到MAC地址,或发送一个新的ARP请求查找网关的MAC地址。
      3. 如果没有默认网关项,在一个或多个接口上发送一个ARP请求,查看网关是否响应自己的MAC地址(代理ARP)。
  4. 使用ARP缓存或ARP请求中的MAC地址发送以太网数据包。 如ARP请求不产生结果,那么数据包就无法发送。 如接收方在远程子网上,数据包会被发送至路由器。路由器会将数据包发送至下一个链路,然后一直发送到接收方。

2. 配置多网络接口系统的规范

如计算机有多个网络接口,配置网络设置时要小心谨慎,避免连接问题以及为调试增加难度。 按照下列规范确保多网络接口系统运转正常。 包括运行操作系统和LabVIEW的计算机或嵌入式控制器,以及有多个以太网接口的LabVIEW实时终端。

规则1:谨慎操作自动分配IP地址(DHCP或link-local寻址)

大多数操作系统默认设置为通过DHCP服务器自动获取TCP/IP设置(IP地址、子网掩码、默认网关)。 如果没有找到DHCP服务器,常见的做法是分配一个169.254.x.x范围的IP地址,这类IP地址叫做link-local IP地址。

必须确保你熟悉DHCP服务器,以及它使用的IP地址范围和子网。类似的,确保了解计算机的适配器是否使用DHCP或者网络上是否有DHCP在使用169.254.x.x IP段。 如果不了解网络中自动IP分配机制,那么你就有可能违反下列规则2和规则3。

如有可能,最好手动为多网络接口的计算机指定IP设置。 但是,如果网络中有其他使用DHCP的计算机,那么使用DHCP就无法避免。

规则2:避免将同一台计算机上的某个网络接口分配给同一个子网

在同一个子网中使用多个网络接口是多网络接口系统网络连接问题的首要原因。有的操作系统可游刃有余地处理子网上的多个网络接口,但是有的操作系统可能会尝试从错误的接口发送数据包。 可将某个网络接口(以及该接口连接的计算机)的IP地址静态设置为192.168.x.x,子网掩码为255.255.0.0;其他网络接口的IP地址为10.0.x.x,子网掩码为255.255.0.0。 这是一种可行的配置方案,两种或两种以上子网配置都是可行的方案。 建议使用指定的私有IP地址之一,避免与网络上的公共服务器冲突。

在实际操作中,很少有足够的理由在同一个子网上使用多个网络接口。 一种高级的配置方法可实现一个子网上使用多个网络接口,这种方法通过多个适配器来增加带宽,叫做适配器协同。这种配置在本教程的讨论范围之外。

图4:配置多个网络接口的控制器时,每个网络接口必须在不同的子网上。 在一个子网上配置两个或多个网络接口可能会导致通信问题。

图4:配置多个网络接口的控制器时,每个网络接口必须在不同的子网上。 在一个
子网上配置两个或多个网络接口可能会导致通信问题。

最常见的错误情况是,有线网络接口和无线网络接口连接至一个子网。 有些操作系统可自行处理这种错误。最好的方法是将有线网络接口和无线网络接口分别置于不同的子网,或在使用某个网络接口时屏蔽另一个接口。

规则3:不要为多个网络接口指定同样的默认网关

当目标IP地址不在网络接口的子网内,默认网关将作为中继站将数据包发送至外网。 如有多个默认网关,数据包向外网发送的过程中可能会出错。

在多数情况下,可以找到同一个子网下的所有计算机,然后留出默认网关。 只有一个网络接口需要指定默认网关。

表2.选择多网络接口系统的TCP/IP设置时,请只为一个网络适配器指定默认网关。 默认网关地址通过DHCP获得时,也是一样。

表2.选择多网络接口系统的TCP/IP设置时,请只为一个网络适配器指定默认网关。 默认网关地址通过DHCP获得时,也是一样。

在其他情况下,网关附属于不同网络接口的子网,可手动指定网络路由(高级方法),或者为所有接口的默认网关指定空地址。

在多网络接口系统中,将所有默认网关项设置为空,比逐条手动设置默认网关更为有效。 该策略只有在网关支持代理ARP时可行。

3. 情境范例

案例1:连接至一个公共网络和一个私有网络

在有的情况下,主机与公司网络连接(通过NIC #1,连接至外网)和私有网络(通过NIC #2,LabVIEW实时终端)连接。 设置公司网络为NIC #1网络接口分配10.0.x.x范围内的DHCP地址,子网掩码为255.255.0.0。默认网关(路由器)地址为10.0.0.1。

图5: 在该情况下,多网络接口控制器连接至公司网络(有因特网连接)和本地子网。

图5: 在该情况下,多网络接口控制器连接至公司网络(有因特网连接)和本地子网。

按照上述方法配置在私有网络上的NIC #2网络接口,为其分配10.0.x.x以外的静态IP。 也可使用10.1.x.x范围内的IP地址,因为它在不同子网上。但是,公司服务器有可能使用10.x.x.x范围内的IP地址。所以,对于私有网络,使用192.168.x.x范围的IP地址更为安全。

在子网上只有少数LabVIEW实时终端,可使用子网掩码255.255.255.0,并为每个终端分配一个192.168.0.x范围内的静态IP地址。子网内最多可有255台联网设备。 主机(NIC #2)的IP地址为192.168.0.1。

主机(NIC #2)的默认网关设置必须为空。 通过这种方法,只会使用NIC #1默认网关,是从主机访问因特网的理想方法。 在LabVIEW实时终端上,默认网关也可留空。因为实时终端只需在本地子网上通信(没有网关连接)。

表3.该表显示了图5所示系统的一种IP地址配置。 两个网络接口连接至不同子网,仅指定一个默认网关地址。

表3.该表显示了图5所示系统的一种IP地址配置。 两个网络接口连接至不同子网,仅指定一个默认网关地址。

案例2:配置带虚拟以太网连接的NI Real-Time Hypervisor系统(本地开发)

NI Real-Time Hypervisor系统同时运行主机OS (Windows, Liux)和LabVIEW Real-Time。 系统中的每个网络接口都可被分配至主机OS或LabVIEW Real-Time,每个操作系统中还有软件模拟出的虚拟网络接口,用于简化操作系统之间的通信。

图6:在这种情况下,Real-Time Hypervisor控制器同时运行Windows XP和LabVIEW Real-Time。 两个操作系统通过一组虚拟网络接口连接,每个操作系统还有一个实体的网络接口连接至公司网络。

图6:在这种情况下,Real-Time Hypervisor控制器同时运行Windows XP和LabVIEW Real-Time。两个操作系统
通过一组虚拟网络接口连接,每个操作系统还有一个实体的网络接口连接至公司网络。

在该案例中,要使用一个有两个网络接口的Real-Time Hypervisor,启用内部虚拟以太网连接。 一个实体网络接口分配给Windows XP,另一个分配至LabVIEW Real-Time。 每个操作系统都能访问两个网络接口,一个虚拟的接口,一个实体的接口。 Real-Time Hypervisor的Windows XP部分用于LabVIEW Real-Time应用程序的部署和开发。

假定实体连接是为了实现操作系统通过公司网络与因特网通信。 虚拟网络接口仅仅用于实时操作系统和Windows XP之间的通信。 连接至公司网络的实体适配器通过DHCP获得IP地址,IP地址在10.0.0.x范围内,子网掩码为255.255.255.0。 网关地址为10.0.0.1。

按照上述原则,为虚拟以太网是配置分配一个静态IP地址,子网与实体适配器所处子网不同。 保险起见,将Windows XP和实时操作系统的适配器IP地址分别设为192.168.0.1、192.168.0.2。 子网掩码为255.255.255.0。

因为希望Windows XP和实时操作系统都通过实体网络接口访问因特网,所以要设置唯一的默认网关。 虚拟以太网网络接口的默认网关设置为0。 每个操作系统只能指定一个默认网关。

表4.该表显示了图6所示系统的一种IP地址配置。 在该例中一个Hypervisor控制器上有两个操作系统,每个操作系统通过一个网络接口连接至不同的子网,默认网关最多只能有一个。

表4.该表显示了图6所示系统的一种IP地址配置。 在该例中一个Hypervisor控制器上有两个操作系统,
每个操作系统通过一个网络接口连接至不同的子网,默认网关最多只能有一个。

案例3:配置带虚拟以太网连接的NI Real-Time Hypervisor系统(远程开发)

在该案例中,两个实体网络接口和虚拟以太网连接同时在Real-Time Hypervisor使用,如案例2类似。 但是,分配给实时操作系统的实体网络接口用于从联网主机上部署,而不是用于网络连接。

图7: 在该案例中,NI Real-Time Hypervisor系统的实时操作系统部分连接至远程Windows主机,主机上可进行LabVIEW Real-Time应用开发。

图7: 在该案例中,NI Real-Time Hypervisor系统的实时操作系统部分连接至远程Windows主机,主机上可进行LabVIEW Real-Time应用开发。

Windows的实体适配器的IP地址以DHCP方式分配,在10.0.0.x范围内,子网掩码为255.255.255.0。 Windows XP和实时操作系统的虚拟以太网是配置使用静态IP,地址分别为192.168.0.1、192.168.0.2,子网掩码为255.255.255.0,没有默认网关。

要保证实时操作系统的实体网络接口与虚拟网络接口在不同的子网上,可使用IP地址192.168.1.x,子网掩码255.255.255.0。 因此,远程计算机适配器和实时操作系统适配器使用静态IP地址192.168.1.1、192.168.1.2,子网掩码255.255.255.0。 不需要默认网关,适配器不需要访问外部网络(该子网上不存在网关)。

表5. 该案例中加入了LabVIEW Real-Time开发计算机,必须指定IP地址。这样远程PC才能连接至Hypervisor系统的LabVIEW Real-Time部分。

表5. 该案例中加入了LabVIEW Real-Time开发计算机,必须指定IP地址。这样远程PC才能连接至Hypervisor系统的LabVIEW Real-Time部分。

也可使用其他配置,包括在开发计算机和实时终端上使用DHCP分配IP地址,在实时终端或主机上使用额外的网络接口以连接至因特网。

案例4:连接至两个有路由器的网络(高级)

更高级的案例是配置一台有两个网络接口的计算机(只有一个操作系统),两个网络接口在两个本地网络上通信。 每个网络有一个网关,将数据包中继至外网。

图8:在该高级案例中,多个网络接口的计算机连接至两个带路由器的网络。 该TCP/IP设置较难,尤其是外网不是内部子网的上级网络时。

图8:在该高级案例中,多个网络接口的计算机连接至两个带路由器的网络。 该TCP/IP设置较难,尤其是外网不是内部子网的上级网络时。

假设本地网络A使用IP地址10.0.0.x,子网掩码255.255.255.0;本地网络B使用IP地址10.0.1.x,子网掩码255.255.255.0。 本地网络A通过网关连接至外网C,IP地址为192.168.0.x,子网掩码为255.255.255.0。 本地网络A通过网关连接至外网C,IP地址为192.168.0.x,子网掩码为255.255.255.0。

目的是让多网络接口的计算机可以访问多个网络。 可连接一个网络接口至本地网络A,分配IP地址10.0.0.5,子网掩码255.255.255.0;将另一个网络接口连接至本地网络B,分配IP地址10.0.1.5,子网掩码255.255.255.0。 如分配了默认网关,数据包可能会通过错误的网关发送,这不是期望的情况。

要解决该问题,可将两个网络接口的默认网关留空,手动配置数据包中继路由。 不同的操作系统配置方法各不相同,基本方法是启用手动添加路由器选项,这些路由器选项可在系统几次启动后仍然生效。 需要添加IP地址为192.168.0.x,子网掩码为255.255.255.0的路由器,以使用A、C之间的网关地址(例如,10.0.0.1)。 同样,也需添加IP地址192.168.1.x,子网掩码255.255.255.0,以使用B、D之间的网关地址(例如,10.0.1.1)。

表6. 一般情况下,控制器的一个网络接口只连接至一个网关(公司网络或因特网),更高级的配置(如图8所示)需要在操作系统中进行额外的配置。

表6. 一般情况下,控制器的一个网络接口只连接至一个网关(公司网络或因特网),更高级的配置(如图8所示)需要在操作系统中进行额外的配置。

当子网的数量增加时,就需要增加更多的路由路径。 在实际操作中,多数网络架构的搭建会避免发生这类情况,保证一台计算机只连接至一个网关。

4. 其他资源

分步知道:双以太网端口实时控制器入门指南

配置硬件软件防火墙支持NI产品