在運用最佳實務來設定使用多種網路介面卡的控制器之前,請務必先行理解乙太網路的部分基本概念。本節會說明如何處理各種網路介面卡、如何在乙太網路中路由封包,以及典型的乙太網路封包傳輸情況。
如果您已相當熟悉上述概念,或對本文件各項建議背後的「原由」不感興趣,請直接跳到「多網路介面卡系統的設定指南」一節。
如同我們必須指定住家與辦公室地址,才能傳送實體郵件,製造商也需要為乙太網路轉接器上的每個連接埠指定唯一位址,也就是所謂的媒體存取控制 (MAC) 位址。MAC 位址會包含 48 個位元,並結合多組兩兩成對的十六進位數字 (例如 01:23:45:67:89:ab),而每個網路介面卡都擁有獨特的 MAC 地址。乙太網路轉接器的 MAC 位址,通常會顯示在裝置隨附的標籤上,也可透過作業系統的網路設定來存取。
在兩部電腦之間傳送乙太網路資料時,資料將透過名為「封包」的小型資訊片段來傳送,而這些封包則會包含接收介面的 MAC 位址。每個介面都會持續收聽傳送給自身唯一位址的封包。
圖 1: 電腦中的每個網路介面卡 (NIC),都具備唯一的媒體存取控制 (MAC) 位址。如果同一部電腦中安裝了多個網路介面卡,則每個網路介面卡都會有其專屬的 MAC 位址。
假設世界上的每部電腦都會連接至一個大型網路,且都能掌握其他每部電腦的 MAC 位址,那麼,我們可能就不需要進一步的定址機制。只是,基於諸多因素,這項做法顯得不切實際。首先,如果經常發生如此大量的共用連線封包碰撞,通訊穩定性將會大打折扣。再者,若要將其他所有裝置的位址儲存在每台機器中,必定需要耗用大量的記憶體;鑑於新的裝置會不斷推出,此一策略絕非明智之舉。
顯而易見的是,電腦需要採用不同的定址機制,才能透過乙太網路彼此通訊。實際上,使用者可以為每個 MAC 位址指派一個或多個網際網路通訊協定 (IP) 位址,並進行設定,好讓多數網路流量會發生在小型「集區」中,而非包含眾多機器的大型群組內。在實務上,IP 位址通常為 32 位元的值,並由四組 3 位數的小數點數值組成 (例如 192.168.100.100)。假設某個包含 10 部電腦的網路採用此一設定,那麼電腦就會有從 192.168.100.0 到 192.168.100.9 的 IP 位址。如果所有機器都遵守「使用 192.168.100.xxx 格式的位址皆位於內部網路」的規則,即可輕鬆分辨與特定 IP 位址之間的通訊作業,是否有存取其他網路的需要。
範例規則: IP 位址介於 192.168.100.0 到 192.168.100.255 範圍的所有網路介面卡,都位於本機網路內部;其他所有網路介面卡則位於本機網路外部。
IP 位址 | 位於本機網路內部或外部? (根據範例規則) |
192.168.100.6 | 內部 |
192.168.100.104 | 內部 |
192.169.100.100 | 外部 |
192.169.101.255 | 外部 |
表 1:由於各個網路介面卡的 IP 定址可由使用者指派,因此,我們可將相似的 IP 位址指派給一組網路介面卡,然後輕鬆判斷特定 IP 位址位於本機網路內部還是外部。
此一簡單概念有著不容小覷的優點。儘管一組機器中的 MAC 位址,通常沒有任何模式可循 (它們會由廠商隨機指派),但 IP 位址既然可由使用者自行設定,就表示其也能透過符合邏輯與階層的模式來設定。使用此一模式後,小型的電腦群組只需憑藉本機流量就能彼此通訊,如此一來,即可減少大型網路中的資料碰撞情況。此外,由於全球的連網乙太網路裝置數量已超過 2^32 部,這項做法不僅能讓 IP 位址在多個小型網路中重複使用,同時也能透過名為「網路位址轉譯」(NAT) 的程序,持續存取這些連網裝置。不過,本文將不會探討 NAT 的詳細運作方式。
當設定 IP 位址時,您可能會使用 10.x.x.x、192.168.x.x 或 172.x.x.x 等形式的位址。上述每個位址範圍,都具備特定的私人網路用途,因此,您無須擔心其他任何公有伺服器 (例如 google.com) 會使用相同的 IP 位址。
請注意,本章節所提供的資訊,適用於目前最常用的網際網路通訊協定,也就是「IPv4」。下一版的網際網路通訊協定為「IPv6」,當中會使用 128 位元的位址;儘管目前尚未普及,但採用率可望在未來幾年內持續成長。
那麼,在檢視資料傳送目的地所屬的 IP 位址時,電腦要如何判斷該位址是否位於本機網路內部,或者是否需要存取外部網路?也就是說,如果要讓電腦遵循前一節所描述的規則,我們究竟要如何指定?
對此,子網路遮罩將扮演一大關鍵;它是一組 32 位元的值,當中會包含 4 組數字,就像 IP 位址一樣 (例如 255.255.255.192)。其中一個 32 位元位置的二進位 1 值是表示,如果傳送端與接收端之間的 IP 位址位元,在這個位置上有所不同的話,乙太網路封包就必須路由至外部網路。相較之下,指定位置的二進位 0 值則表示,如果 IP 位址位元不同也沒有關係;若傳送端與接收端 IP 位址之間的其他所有位元都相同,就會假設接收端位於相同的本機網路中。
圖 2: 子網路遮罩可用來指定規則,以判斷哪些 IP 位址會包含在本機網路內,哪些又位於本機網路外部。
本機與外部網路之間的乙太網路封包,會以何種方式傳遞?一般而言,這項工作會由名為「路由器」的裝置代勞,通常也會稱為「網路閘道」(在本文中,這兩個詞彙可彼此互通)。針對電腦所連接的每個乙太網路轉接器,使用者通常會為其指定一個 IP 位址、子網路遮罩,以及預設閘道。預設閘道為路由器的位址,當封包必須傳送至本機網路外部時,就應使用這個位址。
此時請注意,在最低階傳送的每個乙太網路封包,都必須傳送至一個 MAC 位址。雖然 IP 位址具備多項優勢 (包括使用子網路),不過,僅僅掌握遠端電腦的網路介面卡 IP 位址,並不足以確保封包可安全抵達該電腦。舉例來說,若要在遠端網路中的兩部電腦之間進行通訊,極有可能要透過多部路由器來傳遞封包。在低階時,封包必須由傳送端電腦傳送至第一部路由器,然後由第一部路由器將另一個封包傳送至下一部路由器,並以此類推,直到最後一個封包抵達目的地電腦為止。若要在每個連結之間傳送封包,勢必要掌握接收端路由器或電腦網路介面卡的 MAC 位址。
請想像一下,如果一開始只有本機網路中的目的地電腦 IP 位址,原始電腦究竟要如何取得正確的 MAC 位址,以傳送封包?這個時候,位址解析協定 (ARP) 將可發揮作用。讓我們沿用相同範例,傳送端電腦將傳送名為「ARP 要求」的特殊廣播訊息類型 (要求特定 IP 位址的 MAC 位址)。網路中的所有乙太網路裝置都會持續收聽這些要求,並在符合所指定的 IP 位址時,使用自身的 MAC 位址回應傳送端。當傳送端電腦收到 MAC 位址後,往往會將 MAC 位址/IP 位址配對儲存在快取資料表中,以供後續使用。如此一來,就不必持續對相同的目的地網路介面卡傳送 ARP 要求。
圖 3: 電腦必須知道遠端乙太網路介面卡的 MAC 位址,才能將資料傳送給對方。在不知道 MAC 位址的情況下,電腦可以傳送位址解析協定 (ARP) 要求給特定 IP 位址,然後目的地機器將回應自身的 MAC 位址。
如果網路中的路由器知道所要求的 IP 位於本機網路外部,也能以自身的專屬 MAC 位址回應 ARP 要求。而這就是所謂的「代理 ARP」。
現在,讓我們來仔細檢視,從來源電腦將單一乙太網路封包傳送至目的地電腦的 (簡化) 程序。我們將假設來源電腦包含了多個乙太網路介面卡。
如果使用的電腦配備多個網路介面卡,請務必謹慎設定網路,以避免發生棘手的連線問題。請遵循本指南的指示,以確保您的多網路介面卡系統能充分運作。本指南的適用對象,包含執行桌上型作業系統與 LabVIEW 的任何電腦或嵌入式控制器,以及配備多個乙太網路介面卡的任何 LabVIEW Real-Time 系統。
根據預設,多數作業系統都會使用動態主機設定通訊協定 (DHCP) 伺服器,來取得 TCP/IP 設定 (IP 位址、子網路遮罩與預設閘道)。如果找不到 DHCP 伺服器,作業系統通常會指派位於 169.254.x.x 範圍中的 IP 位址 (又稱為「連結本機 IP 位址」)。
請務必熟悉自身網路的 DHCP 伺服器,並掌握所應使用的 IP 位址範圍與子網路。同樣地,如果電腦上有任何轉接器使用 DHCP,而且網路中沒有 DHCP 伺服器,就會使用 169.254.x.x 位址,請務必了解是否有發生此類情況。如果您不熟悉自身網路的自動 IP 指派細節,極有可能會違反下述的規則 2 或規則 3。
在網路設定允許的情況下,建議您最好透過手動方式,為多網路介面卡電腦中的每個網路介面卡指定 IP 設定。不過,如果您的網路中包含其他 DHCP 用戶端,可能無法避免使用 DHCP。
在相同的子網路中使用多網路介面卡,是造成多網路介面卡系統發生連線問題的首要原因。雖然有些作業系統能謹慎處理在相同子網路中存在多網路介面卡的情況,有些作業系統則會嘗試錯誤的介面卡傳送封包。若要解決此一問題,請將其中一個網路介面卡 (以及連接至該網路介面卡的其他連網電腦) 靜態指派至 192.168.x.x 範圍,並將子網路遮罩設為 255.255.0.0,然後將另一個網路介面卡指派至 10.0.x.x 範圍,並使用子網路遮罩 255.255.0.0。請注意,這僅是其中一個可行的設定,只要結合任何兩種或多種不同子網路,就能發揮作用。建議您使用其中一個指定的私人 IP 位址範圍,以避免與網際網路中的公用伺服器發生衝突。
在實務上,鮮少發生必須在相同的子網路中使用多網路介面卡的情況。符合此一條件的其中一個進階設定,就是使用多個轉接器來增加頻寬 (也就是所謂的「轉接器組」);不過,這項設定已超出本文的探討範圍。
圖 4: 設定配備多網路介面卡的控制器時,每個網路介面卡都應使用不同的子網路進行通訊。若在相同的子網路中設定兩個或多個網路介面卡,就有可能造成通訊問題。
有許多情況會導致多網路介面卡指派給相同子網路,而同時使用有線與無線網路介面卡連接相同網路,則是最常見的情況之一。再次強調,雖然有些作業系統可妥善處理這類情況,但最適當的做法,還是將有線與無線網路個別設定至不同子網路;或在使用任一網路介面卡期間,停用另一網路介面卡。
如果目的地 IP 位址沒有位於任何網路介面卡的子網路中,就會使用預設閘道將封包轉接至外部網路。如果網路介面卡存在多個預設閘道,封包可能會被路由至錯誤的外部網路,進而發生無法傳遞的情況。
在多數情況下,請務必適當設定連接至網路介面卡的所有電腦 (皆位於相同私人子網路),並將該網路介面卡的預設閘道保持空白。一般而言,預設閘道位址只能指定給一個具備網際網路或企業網路閘道的網路介面卡。
NIC 1 連接至企業網路與網際網路 | NIC 2 連接至本機網路 |
IP 位址: 192.168.50.8 | IP 位址: 10.0.3.7 |
子網路遮罩: 255.255.0.0 | 子網路遮罩:255.255.255.0 |
預設閘道:192.168.1.1 | 預設閘道:0.0.0.0 (或空白) |
表 2:為多網路介面卡系統選擇 TCP/IP 設定時,最好只將預設閘道指定給一個轉接器。如果其中一個預設閘道會透過 DHCP 取得,也請採用此一做法。
如果閘道已連接至連接不同網路介面卡的子網路,您可以手動指定網路路由 (此為進階做法),或將所有介面卡的預設閘道保留空白。
雖然為單一介面卡指定預設閘道更具效率 (這可避免透過 ARP 將多個封包傳輸至網路外部),但將所有預設閘道項目保留空白,也可避免含有多個閘道的網路發生問題。然而,此一策略僅適用於網路閘道支援代理 ARP 的情況。
在此案例中,主機電腦已連接企業網路 (透過 NIC #1) 以進行網際網路存取,並連接包含多個 LabVIEW Real-Time 系統的私人網路 (透過 NIC #2)。企業網路會為 NIC #1 指派 10.0.x.x 範圍的 DHCP 位址,並使用子網路遮罩 255.255.0.0。預設閘道 (路由器) 位址則為 10.0.0.1。
圖 5: 在此案例中,多網路介面卡控制器已連接企業網路 (透過網際網路存取),以及私人網路。
根據指南的前述建議,我們可以使用 10.0.x.x 子網路範圍以外的靜態 IP,設定連接至私人網路的 NIC #2。雖然我們也可以使用 10.1.x.x 範圍的位址 (因為它位於不同的子網路中),鑑於 10.x.x.x IP 位址可能會用於不同的企業伺服器,最好還是將 192.168.x.x 範圍運用在私人網路上。
由於我們會在私人網路中使用少量的 LabVIEW Real-Time 系統,因此可以使用子網路遮罩 255.255.255.0,並為每個系統指派位於 192.168.0.x 範圍的靜態 IP 位址;這樣一來,子網路就能容納多達 255 個連線介面卡。為求簡便,主機電腦 (NIC #2) 的 IP 位址將設為 192.168.0.1。
請務必將主機 NIC #2 設定的預設閘道保留空白。這樣一來,就只會使用 NIC #1 預設閘道,以達到透過主機存取網際網路的目的。此外,LabVIEW Real-Time 裝置的預設閘道也可保留空白,畢竟,它們只應在本機子網路中進行通訊 (沒有連接任何閘道)。
NIC 1 連接至企業網路與網際網路 | NIC 2 連接至私人網路 |
IP 位址: (DHCP) 10.0.x.x | IP 位址: 192.168.0.1 |
子網路遮罩: (DHCP) 255.255.0.0 | 子網路遮罩: 255.255.255.0 |
預設閘道:(DHCP) 10.0.0.1 | 預設閘道:0.0.0.0 (未指定) |
表 3: 本表顯示的是,可供上方圖 5 系統使用的 IP 位址設定之一。請注意,兩個網路介面卡會連接至不同的子網路,而且當中僅指定一個預設閘道位址。
NI Real-Time Hypervisor 系統,可同時執行主機作業系統 (Windows 或 Linux) 以及 LabVIEW Real-Time。這些系統中的每個實體網路介面卡,都可指派給主機作業系統或 LabVIEW Real-Time;而每個作業系統也可使用虛擬網路介面卡 (在軟體中模擬而成),以簡化作業系統之間的通訊作業。
圖 6: 在此案例中,Real-Time Hypervisor 控制器會同步執行 Windows XP 與 LabVIEW Real-Time。兩個作業系統都會透過一組虛擬網路介面卡相互連線,而且每個作業系統都配備一個網路介面卡,可用來連接企業網路與網際網路。
在此案例中,我們將使用配備兩個實體網路介面卡的 Real-Time Hypervisor 系統,內部虛擬乙太網路連線也已啟用。其中一個實體網路介面卡將指派給 Windows XP,另一個則會指派給 LabVIEW Real-Time。因此,每個作業系統都可存取兩個網路介面卡 (虛擬乙太網路連線與一個實體連線)。Windows XP 端的 Hypervisor,將用來進行 LabVIEW Real-Time 應用開發與佈署。
假設實體連線可讓任一作業系統透過企業網路,進行網際網路通訊。虛擬網路介面卡只會用來進行 LabVIEW Real-Time 與 Windows XP 之間的通訊。連接至企業網路的兩個實體轉接器,其所用的 IP 位址將透過 DHCP 指定;位址會位於 10.0.0.x 範圍中,並使用子網路遮罩 255.255.255.0。閘道位址會設為 10.0.0.1。
根據指南的前述建議,我們應該使用不同於每個作業系統實體轉接器所用的子網路,為每個虛擬乙太網路轉接器設定靜態 IP。雖然 10.x.x.x 範圍的其他位址也可供使用,為了保險起見,我們會將 Windows XP 與 LabVIEW Real-Time 轉接器的 IP 位址,分別設為 192.168.0.1 與 192.168.0.2。兩者的子網路遮罩,則會設為 255.255.255.0。
由於我們想要讓 Windows XP 與 LabVIEW Real-Time 透過實體網路介面卡存取網際網路,因此,只有這些轉接器會設定預設閘道。這樣一來,兩個虛擬乙太網路網路介面卡的預設閘道項目,就能保留空白。請注意,每個作業系統都只會指定一個預設閘道。
LV RT 實體網路介面卡 | LV RT 虛擬網路介面卡 | Win XP 虛擬網路介面卡 | Win XP 實體網路介面卡 |
IP 位址: (DHCP) 10.0.0.x | IP 位址: 192.168.0.2 | IP 位址: 192.168.0.1 | IP 位址:(DHCP) 10.0.0.x |
子網路遮罩: (DHCP) 255.255.255.0 | 子網路遮罩: 255.255.255.0 | 子網路遮罩: 255.255.255.0 | 子網路遮罩:(DHCP) 255.255.255.0 |
預設閘道:(DHCP) 10.0.0.1 | 預設閘道:0.0.0.0 (未指定) | 預設閘道:0.0.0.0 (未指定) | 預設閘道:(DHCP) 10.0.0.1 |
表 4: 本表顯示的是,可供上方圖 6 系統使用的 IP 位址設定之一。鑑於在此案例中,我們會在單一 Hypervisor 控制器上執行兩個作業系統,因此請務必使用個別網路介面卡,將每個作業系統連接至不同的子網路;且每個作業系統最多只能設定一個預設閘道。
在此案例中,我們會在 Real-Time Hypervisor 系統中也使用兩個實體網路介面卡,並啟用內部虛擬乙太網路連線 (如前述的案例 2)。不過,指派給 LabVIEW Real-Time 的實體網路介面卡,將用來從連網主機電腦進行佈署,而非用於網際網路存取。
圖 7: 在此案例中,NI Real-Time Hypervisor 系統的 LabVIEW Real-Time 端,會連接至遠端 Windows 電腦,以進行 LabVIEW Real-Time 應用開發。
Windows 實體轉接器仍會指派 DHCP 位址,該位址會位於 10.0.0.x 範圍中,並使用子網路遮罩 255.255.255.0。同樣地,Windows XP 與 LabVIEW Real-Time 的虛擬乙太網路轉接器,會分別使用靜態 IP 位址 192.168.0.1 與 192.168.0.2,並搭配子網路遮罩 255.255.255.0,而且沒有任何預設閘道。
為了確保 LabVIEW Real-Time 使用的實體網路介面卡,會位於與虛擬乙太網路網路介面卡不同的子網路中,我們可以使用 192.168.1.x 形式的 IP 位址,來搭配子網路遮罩 255.255.255.0。這樣一來,相互連接的遠端電腦轉接器與 LabVIEW Real-Time 轉接器,就能分別使用靜態 IP 位址 192.168.1.1 與 192.168.1.2,並搭配子網路遮罩 255.255.255.0。同樣地,由於兩個轉接器都不需要存取外部網路 (這個子網路中沒有任何閘道),因此不需要設定預設閘道。
Win 主機 網路介面卡 | LV RT 實體網路介面卡 | LV RT 虛擬網路介面卡 | Win XP 虛擬網路介面卡 | Win XP 實體網路介面卡 |
IP 位址: 192.168.1.1 | IP 位址: 192.168.1.2 | IP 位址: 192.168.0.2 | IP 位址: 192.168.0.1 | IP 位址:(DHCP) 10.0.0.x |
子網路遮罩: 255.255.255.0 | 子網路遮罩: 255.255.255.0 | 子網路遮罩: 255.255.255.0 | 子網路遮罩: 255.255.255.0 | 子網路遮罩:(DHCP) 255.255.255.0 |
預設閘道:0.0.0.0 (未指定) | 預設閘道:0.0.0.0 (未指定) | 預設閘道:0.0.0.0 (未指定) | 預設閘道:0.0.0.0 (未指定) | 預設閘道:(DHCP) 10.0.0.1 |
表 5: 鑑於此案例加入了遠端的 LabVIEW Real-Time 開發機器,我們必須妥善挑選 IP 位址設定,好讓遠端電腦能與 Hypervisor 系統的 LabVIEW Real-Time 端相互連接。
另外還有其他多種設定可供使用,包括使用 DHCP 搭配遠端開發電腦與 LabVIEW Real-Time 系統 (以允許網際網路連線),或在 LabVIEW Real-Time 系統或遠端主機電腦中,使用額外的網路介面卡來連接網際網路。
在此進階案例中,我們會設定配備兩個網路介面卡的電腦 (只執行一個作業系統),以便與兩個本機網路通訊。每個網路都具備閘道,可用來將封包轉接至其他外部網路。
圖 8: 在此進階範例中,我們會以一部多網路介面卡電腦連接至兩個路由網路。這項 TCP/IP 設定的難度更高,如果外部網路並非本機網路子網路的超集合,情況將更加棘手。
假設本機網路 A 會使用 10.0.0.x 形式的 IP 位址,並搭配子網路遮罩 255.255.255.0,而本機網路 B 則會使用 10.0.1.x 形式的 IP 位址,並搭配子網路遮罩 255.255.255.0。本機網路 A 會透過閘道連接至外部網路 C,而該網路使用 192.168.0.x 形式的 IP 位址,並搭配子網路遮罩 255.255.255.0。同樣地,本機網路 B 會透過閘道連接至外部網路 D,而該網路使用 192.168.1.x 形式的 IP 位址,並搭配子網路遮罩 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 之間的閘道 IP 位址 (例如 10.0.0.1)。同樣地,我們也需要新增使用 IP 位址 192.168.1.x 搭配子網路遮罩 255.255.255.0 的路由,以使用網路 B 與 D 之間的閘道 IP 位址 (例如位址 10.0.1.1)。
NIC 1 | NIC 2 |
IP 位址: 10.0.0.5 | IP 位址: 10.0.1.5 |
子網路遮罩: 255.255.255.0 | 子網路遮罩:255.255.255.0 |
預設閘道:0.0.0.0 (未指定) | 預設閘道:0.0.0.0 (未指定) |
特殊路由:使用 NIC 1 與閘道 10.0.0.1 來路由至 192.168.0.x | 特殊路由:使用 NIC 2 與閘道 10.0.1.1 來路由至 192.168.1.x |
表 6: 通常,控制器中只會有一個網路介面卡連接閘道 (進而連往企業網路或網際網路);而上圖 8 顯示的進階設定,則需要透過特殊的作業系統路由項目,才能正常運作。
隨著子網路數量增加,我們也需新增額外的路由。在實務上,多數網路會確保每部電腦只會連接一個閘道,以避免使用這類型的複雜設定。