本文首發於個人公衆號 cloud_dev,專一於乾貨分享,號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,歡迎你們關注,二維碼文末能夠掃。
著名的「六度分隔定理」說到,世界上任何兩個互不相識的人,只須要最多六我的就可以創建起聯繫。這個定理成立的前提就是依託於龐大的網絡結構。編程
在虛擬化技術沒出現以前,構成網絡的元素都是實體的物理設備,好比交換機、路由器、網線等等,人們想要構建一個小型的局域網本身玩玩,都要買各類設備,成本高還不靈活。虛擬化技術普及以後,雲計算開始大行其道,咱們在本身的單機上就能夠建各類虛擬機,想怎麼玩就怎麼玩。服務器
隨之而來的就是網絡變得更復雜了,由之前看得見摸得着的物理網絡一下變成玄乎的虛擬網絡了,好不容易建了幾臺虛擬機,發現網絡不通,或者網絡通了,但並不知道是怎麼通的,這難言的苦水哽在喉嚨實在使人不適。網絡
這篇文章就來講說虛擬機世界裏的幾種網絡模型,咱們主要以 VirtualBox
和 VMware Workstation
這兩款目前最主流的桌面虛擬化軟件做爲例子。工具
總的來講,目前有四種常見的網絡模型:雲計算
這也是 VirtualBox
支持的四種模型,對於 VMware
,則只有前三種。spa
下圖顯示了 VirtualBox
支持的幾種網絡模型:.net
虛擬機橋接網絡模型就是使用虛擬交換機(Linux Bridge),將虛擬機和物理機鏈接起來,它們處於同一個網段,IP 地址是同樣的。以下圖所示:code
圖一視頻
在這種網絡模型下,虛擬機和物理機都處在一個二層網絡裏面,因此有:blog
橋接網絡的好處是簡單方便,但也有一個很明顯的問題,就是一旦虛擬機太多,廣播就會很嚴重。因此,橋接網絡通常也只適用於桌面虛擬機或者小規模網絡這種簡單的形式。
另外一種模型是 NAT,即網絡地址轉換(Network Address Translatation)。這種模型嚴格來說,又能夠分爲 NAT
和 NAT 網絡
兩種,咱們看上面的圖 1 也能夠看到。
根據 NAT 的原理,虛擬機所在的網絡和物理機所在的網絡不在同一個網段,虛擬機要訪問物理所在網絡必須通過一個地址轉換的過程,也就是說在虛擬機網絡內部須要內置一個虛擬的 NAT 設備來作這件事。
但其中 NAT
和 NAT 網絡
二者還有些許的不一樣:
NAT
:主機上的虛擬機之間是互相隔離的,彼此不能通訊(它們有獨立的網絡棧,獨立的虛擬 NAT 設備)NAT 網絡
:虛擬機之間共享虛擬 NAT 設備,彼此互通。以下圖,展現了二者細微的差異:
PS:NAT 網絡模式中通常還會內置一個虛擬的 DHCP 服務器來進行 IP 地址的管理。
下面咱們經過實驗來驗證一下兩種模式的區別,首先是 NAT
模式:
訪問外網沒問題:
訪問其餘虛擬機:
能夠看到,兩個虛擬機因爲有隔離的網絡棧,因此它們的 IP 地址並不在一個網段,因此 ping 不通。
再來看 NAT 網絡
,訪問外網一樣沒問題,咱們來看下 VM 之間的互通:
能夠看到,差異體現出來了,NAT 網絡
虛擬機之間共享網絡棧,它們的 IP 地址處於同一個網段,因此彼此是互通的。
總結一下,以上兩種 NAT 模式,若是不作其餘配置,那麼有:
NAT
,同主機上的虛擬機之間不能互通NAT 網絡
,虛擬機之間能夠互通PS:若是作了 端口映射 配置,那麼主機也能夠訪問虛擬機。
主機網絡顧名思義,就是隻限於主機內部訪問的網絡,虛擬機之間彼此互通,虛擬機與主機之間彼此互通。可是默認狀況下虛擬機不能訪問外網(注意:這裏說的是默認狀況下,若是稍做配置,也是能夠的)。
主機網絡看似簡單,其實它的網絡模型是相對比較複雜的,能夠說前面幾種模式實現的功能,在這種模式下,均可以經過虛擬機和網卡的配置來實現,這得益於它特殊的網絡模型。
主機網絡模型會在主機中模擬出一塊虛擬網卡供虛擬機使用,全部虛擬機都鏈接到這塊網卡上,這塊網卡默認會使用網段 192.168.56.x
(在主機的網絡配置界面能夠看到這塊網卡),以下是基本的拓撲圖示:
默認狀況下,虛擬機之間能夠互通,虛擬機只能和主機上的虛擬網卡互通,不能和不一樣網段的網卡互通,更不能訪問外網,若是想作到這樣,那麼須要如圖中 紅虛線 所示,將物理網卡和虛擬網卡橋接或共享。在主機上作以下設置便可:
經過以上配置,咱們來驗證一下,虛擬機能夠訪問主機物理網卡和外網了:
最後一種網絡模型是內部網絡,這種模型是相對最簡單的一種,虛擬機與外部環境徹底斷開,只容許虛擬機之間互相訪問,這種模型通常不怎麼用,因此在 VMware
虛擬機中是沒有這種網絡模式的。這裏咱們就很少說了。
虛擬機的四種網絡模型:橋接、NAT、主機和內網模型。
下面以一張表來描述它們之間的通訊行爲:
Model | VM -> host | host -> VM | VM <-> VM | VM -> Internet | Internet -> VM |
---|---|---|---|---|---|
Bridged | + | + | + | + | + |
NAT | + | Port Forwarding | - | + | Port Forwarding |
NAT Network | + | Port Forwarding | + | + | Port Forwarding |
Host-only | + | + | + | - | - |
Internal | - | - | + | - | - |
參考:
https://technology.amis.nl/20...
https://blog.csdn.net/niqinwe...
個人公衆號 cloud_dev,號內有大量書籍和視頻資源,後臺回覆 「1024」便可領取,分享的內容包括但不限於雲計算虛擬化、容器、OpenStack、K8S、霧計算、網絡、工具、SDN、OVS、DPDK、Linux、Go、Python、C/C++編程技術等內容,歡迎你們關注。