我正在設定 QEMU/KVM 虛擬機,並希望為其使用橋接網路。在我讀過的每本手冊/教程中,都提到在實體網卡上停用 DHCP 並在網橋上啟用它。我不明白的是,如果網橋的作用就像實體網橋/交換器一樣,為什麼它必須分配 IP 位址,而實際的實體網路卡卻沒有 IP 位址?這個問題已經被問過幾次了,但我仍然沒有找到答案,例如這裡答案說這樣虛擬機器就可以與網橋進行通訊。但他們為什麼需要這樣做呢?對於實際的實體機器,網橋透明地工作並且僅轉送流量。所以,我的問題是:
- 為什麼虛擬橋接器需要 IP 位址,而實體網橋不需要 IP 位址?
- 當 NIC 沒有 IP 位址時,實體 NIC 如何知道使用虛擬橋接器的 IP 位址?
- 為什麼虛擬機器需要與網橋通信,而實體機實際上並沒有直接與實體網橋通訊?
以下是一些插圖,可以更好地說明我的意思:
- 我想像有網路交換器的實體網路是如何運作的:
- 我想像虛擬橋應該如何運作
- 我如何理解它實際上有效
答案1
- 為什麼虛擬橋接器需要 IP 位址,而實體網橋不需要 IP 位址?
認為虛擬網橋需要 IP 位址是一種誤解。它不需要它。
你其實能有一個沒有 IP 位址的虛擬網橋。但是,主機本身根本無法透過該實體介面上的 IP 存取:只有虛擬機器可以。
在企業虛擬化主機中,這可能很有用:您可能有一個需要連接到客戶虛擬機器的客戶網路。您可能不想將此類網路的存取權限授予虛擬化主機本身,但是僅有的到各自的虛擬機器。然後,您將擁有另一個實體上獨立的管理網絡,用於管理虛擬化主機。該網路將透過一個單獨的 NIC 連接到主機不是成為任何虛擬網橋的成員。
- 當 NIC 沒有虛擬網橋的 IP 位址時,實體 NIC 如何知道使用虛擬橋接器的 IP 位址?
除非實體 NIC 具有特定的 IPv4 加速功能,否則 IP 位址只是 NIC 的有效負載資料。基本實體網路卡僅適用於第 2 層,即 MAC 位址。 IP 協定是第 3 層協議,通常留給作業系統的網路驅動程式堆疊。當您使用ifconfig
或來「為 NIC 配置 IP 位址」時ip addr
,您不必對實際的實體硬體配置進行任何更改,而是對一個抽象構造進行更改,該抽象構造包括實體NIC 和與NIC 相關的作業系統級IP協議支援網卡。
當實體 NIC 配置為充當橋接器的成員時,任何第 3 層加速功能可能都需要關閉:當充當橋接器的一部分時,NIC 需要接收所有傳入資料包,無論其狀態如何。 ,網橋代碼將決定是否轉送封包以及轉送到網橋的哪個成員。基本網橋絕不能完全不關心 IP 位址。網橋中的任何第 3 層功能都高於基本網橋功能,並且在虛擬網橋中是/應該是可選的。
如果實體 NIC 在配置為網橋的一部分時配置了 IP 位址,它將啟動該 NIC(及其驅動程式)上的 ARP 功能。但是,從該實體NIC 發出的ARP 訊息將無法到達虛擬機器:要透過其ARP 到達整個網段(根據正確的第2 層功能的要求),NIC 驅動程式必須將ARP 訊息產生為同時發出的ARP 訊息。 & 同時傳入訊息,且 NIC 驅動程式將沒有代碼來執行此操作。
擁有具有 VM 的虛擬橋接器意味著網橋 IP 段的某些部分將在實體上位於主機外部,而其他部分則包含在位於主機內部的 VM 內。如果主機像往常一樣使用 NIC 來嘗試與其中一台虛擬機進行通信,則資料包將不必要地從主機發送到主機所連接的實體交換器或路由器,並且從那裡它們必須返回主機,並通過網橋到達目標虛擬機器。
這肯定是低效的,而且實際上可能根本不起作用:具有虛擬網橋的主機所連接的實體交換器通常沒有理由將源自該主機的任何資料包發送回主機本身。
相反,從主機到橋接網段的傳出資料包必須透過橋接代碼發送,橋接代碼首先查找橋接的哪個介面(虛擬或實體)與目的地「最接近」。如果網橋知道目的地,則傳出資料包將直接傳送到該目的地。對於主機與其虛擬機器之間的通信,這意味著通信完全發生在實體主機內,根本不使用主機外部的實體網路頻寬。
如果網橋不知道目標 MAC 位址,則傳出封包最初會從所有網橋成員介面發出:一旦收到應答,網橋就會獲知初始封包的目的地位置,並可傳回高效率的操作方法(如上所述)。
從包含網橋的主機發出 ARP 請求時,必須將請求廣播到虛擬機和出實體網卡,因此請求實際上會發送到所有的網段:橋接代碼可以做到這一點,而單一實體網卡則不能。
我認為沒有要求 Linux 橋應該完全是物理或虛擬的:我不明白為什麼 Linux 橋不能有多個物理接口和與其關聯的任意數量的虛擬機器。但在企業環境中,您通常不會希望建立這樣的「萬能主機」。它很容易成為一個棘手的關鍵基礎設施,永遠不會出現任何停機;換句話說,令系統管理員頭痛的是。
- 為什麼虛擬機器需要與網橋通信,而實體機實際上並沒有直接與實體網橋通訊?
又是一個誤解:虛擬機器確實不是需要網橋上的 IP 位址「與網橋進行通訊」。
但如果你想為了使主機和虛擬機器能夠在同一IP網段內相互通信,需要為橋接設備分配IP位址。
橋接設備上的 IP 位址主要是為了滿足通訊需求主持人,不屬於虛擬機- 但它可以允許主機透過 IP 與虛擬機器高效通信,而無需循環通過外部設備(如果您需要的話)。