Nat,橋接,DHCP,路由器,VMWARE的一些理解
阿新 • • 發佈:2019-02-18
背景:準備用vmware配置一個hadoop開發環境,host是win8 pro,guest是三個centOS 6.
遇到的問題:如果選擇在vmware中配置NAT的方式,三個guests之間就可以互相ping,但是無法ping通host機的ip(但是host機的可以ping通guest機,原因暫時未知)
提示的是unreachable。
此時,路由器的ip地址是192.168.1.1
host機的ip地址為:192.168.1.100,subnet mask是:255.255.255.0(windows用ipconfig命令檢視,linux用ifconfig檢視)
guest機1的ip地址為:192.168.49.128,subnet mask是:255.255.255.0
guest機2的ip地址為:192.168.49.129,subnet mask是:255.255.255.0
guest機3的ip地址為:192.168.49.130,subnet mask是:255.255.255.0
猜想:由於子網掩碼佔用了24位,因此host和guest被判斷(此時還不理解如何判斷,由誰判斷)為不在同一個子網,因此無法互通。於是開始想如何修改一下配置檔案,
輸入: vi /etc/sysconfig/network-scripts/ifcfg-eth0
圖1 將檔案修改成如圖1所示,對於其他2個guest機也做同樣的修改,只是把ip地址改的不一樣就行了。重啟服務 輸入:service network restart,隨後把host機的subnet mask也改成255.255.0.0,這樣至少看起來是在同一個網段了(實際上應該不是,目前對這個概念還是不怎麼理解) 再次測試是否能ping通,依然不行,於是開始想NAT模式和bridge模式到底有什麼區別,NAT到底是什麼,用vmware建立多個虛擬機器之後每個虛擬機器都有被分配一個內網ip,應該也用上了DHCP,這裡的DHCP和路由器的DHCP到底有什麼區別,和NAT又有什麼區別? 1. NAT
首先來研究一下NAT(Network Address Translation),基本介紹就省略了,百度詞條上都有。我們現在一般說的NAT都是指的NAPT(Network Address Port Translation),可將多個內部地址對映為一個合法公網地址,但以不同的協議埠號與不同的內部地址相對應,它可以將中小型的網路隱藏在一個合法的IP地址後面。這樣,在用vmware選擇NAT模式的時候,就相當於給虛擬機器的ip地址是內部ip地址,外面是無法直接通過訪問的。
2. DHCP(Dynamic Host Configuration Protocol)
再來看下這個,家用的路由器裡面也有這種模式,如果選擇了這種模式,接入到這個路由器提供的熱點的wifi的裝置,比如說電腦和手機,就會被自動分配IP,從概念上講,也說的過去,但是總是感覺有什麼不對勁,檢視DHCP的介紹,說的也是給使用者動態分配ip地址的一種協議,各大ISP,比如中國電信的寬頻就是這樣給使用者分配IP地址的。到了這裡,注意觀察和對比一個現象 ,就是我在vmware中用NAT模式,它給guest機自動分配192.168.x.x這種格式的內網IP,路由器在DHCP模式下也是給電腦和手機分配這種樣子的IP,這一下就有點概念混淆了,這完全跟大學本科教材上說的概念有點偏差,實際應用起來到底是個啥玩意,我甚至都開始懷疑路由器這種產品在計算機網路的理論中,到底算一個什麼東西?
3. 路由器 = 路由器?
按照計算機網路的課本上面說的,路由器應該是在工作在網路層,負責轉發包的一種東西,好像也沒聽說能自動分配IP地址之類的,查閱百度之後發現,現在的商用的路由器,說通俗點,就是功能非常強大,可以在各個場合使用,內建了非常多的功能,不是課本概念上那種只工作在網路層的裝置,而是就像一臺小型的計算機一樣,可以執行NAT,DHCP一類的協議,由DHCP分配內網ip地址,然後由NAT做埠對映,大致上就是這樣一個意思,具體細節還不是很清楚。像NAT協議就有許多爭議,其中影響此處對路由器這個概念的理解的爭議是“NAT違反了基本的網路分層結構模型的設計原則,因為在傳統的網路分層結構模型中,第N層是不能修改第N+1層的報頭內容的。NAT破壞了這種各層獨立的原則”,這樣對現在的路由器工作在哪一層就可以理解了,其實根本沒有嚴格的什麼網路層的劃分,很多東西就是實用,需要什麼功能,就提供了什麼功能,不然NAT這種具體算哪一層都不明確的協議就沒辦法工作了。
4. 回顧2中提出的問題
看完路由器之後就可以理解第2段提出的問題了,說明NAT和DHCP在概念上的區分還是很明確的,只是相關的產品把他們融合在一起使用,並且自己的網路方面的知識基礎不夠紮實,才導致的理解錯誤,vmware中的NAT模式的意思就是將host機的ip與guest機的ip隔開,guest機的ip的動態分配也使用的DHCP協議,這個是vmware自己提供的,只是在設定裡面沒說明罷了,因為centos中的配置檔案(如圖1)中有一行是BOOTPROTO=dhcp,就是這個地方設定的,至於為什麼ip是192.168.x.x和host的192.168.x.x非常像?純粹是巧合,跟NAT沒有任何關係,此時的host的192.168的地址對於guest來說依然是外網地址,只是碰巧一樣罷了,因為host的192.168的地址是路由器用dhcp來分配的,所以也長得一個樣,就相當於guest的內網其實是內網中的內網,這就是為什麼guest機的192.168.3.4,就運算元網掩碼設定成了255.255.0.0,也依然無法和host的192.168.1.100互通的原因了(修改,此處對原因的理解有誤,guest無法ping通host是因為host機中的防火牆開了,將host的防火牆關閉之後就可以ping通了,這也許是vmware的功能或者是NAT協議造成的,具體原因不知,但是應該不在一個子網,以後理解了再補上),因為他們是通過NAT協議關聯起來的,就像一下格式:
host的192.168.1.100(由路由器分配的,要是有穩定的外網ip地址可以隨時更換成外網的):10000---(NAT)---guest的192.168.3.4(由vmware的DHCP分配)
host的192.168.1.100(由路由器分配的,要是有穩定的外網ip地址可以隨時更換成外網的):10001---(NAT)---guest的192.168.3.5(由vmware的DHCP分配)
host的192.168.1.100(由路由器分配的,要是有穩定的外網ip地址可以隨時更換成外網的):10002---(NAT)---guest的192.168.3.6(由vmware的DHCP分配)
壓根就不是一個相關聯的東西!
5.vmware的橋接模式
現在再來看橋接,就有點眉目了,之前看橋接的概念,總是搞不明白啥意思,百度的介紹是“(Bridge)像一個聰明的中繼器。中繼器從一個網路電纜裡接收訊號, 放大它們,將其送入下一個電纜。相比較而言,網橋對從關卡上傳下來的資訊更敏銳一些。網橋是一種對幀進行轉發的技術,根據MAC分割槽塊,可隔離碰撞。網橋將網路的多個網段在資料鏈路層連線起來。網橋也叫橋接器,是連線兩個區域網的一種儲存/轉發裝置,它能將一個大的LAN分割為多個網段,或將兩個以上的LAN互聯為一個邏輯LAN,使LAN上的所有使用者都可訪問伺服器。”
而通過理解vmware的橋接模式,就明白橋接到底是啥玩意了:
http://blog.csdn.net/youxin2012/article/details/17231149 中說:“橋接網路是指本地物理網絡卡和虛擬網絡卡通過VMnet0虛擬交換機進行橋接,物理網絡卡和虛擬網絡卡在拓撲圖上處於同等地位,那麼物理網絡卡和虛擬網絡卡就相當於處於同一個網段,虛擬交換機就相當於一臺現實網路中的交換機,所以兩個網絡卡的IP地址也要設定為同一網段。”這樣就明白了,在之前NAT裡面,由於NAT的網路在vmware提供的一個虛擬網路裡,所以區域網其他主機是無法訪問虛擬機器的,而宿主機可以訪問虛擬機器,虛擬機器可以訪問區域網的所有主機,因為真實的區域網相對於NAT的虛擬網路,就是NAT的虛擬網路的外網,相當於有層次的隸屬關係,而橋接之後就平等了,就在同一網段了,就可以互相訪問了。
圖1 將檔案修改成如圖1所示,對於其他2個guest機也做同樣的修改,只是把ip地址改的不一樣就行了。重啟服務 輸入:service network restart,隨後把host機的subnet mask也改成255.255.0.0,這樣至少看起來是在同一個網段了(實際上應該不是,目前對這個概念還是不怎麼理解) 再次測試是否能ping通,依然不行,於是開始想NAT模式和bridge模式到底有什麼區別,NAT到底是什麼,用vmware建立多個虛擬機器之後每個虛擬機器都有被分配一個內網ip,應該也用上了DHCP,這裡的DHCP和路由器的DHCP到底有什麼區別,和NAT又有什麼區別? 1. NAT