网络NAT、桥接与主机模式
前言
筆者很早以前寫了本機windows連接虛擬機Ubuntu的時候使用的NAT模式連接:SecureCRT無法連接VMWare Ubuntu虛擬機問題解決辦法_fenglllle的博客-CSDN博客_securecrt連接不到vmware
然后在MySQL安裝時虛擬機使用的卻是橋接模式?:ubuntu MySQL安裝使用教程_fenglllle的博客-CSDN博客_ubuntu安裝mysql
那么這些網絡模式的區別是什么?,筆者一直沒有研究過,知道最近檢查家庭網絡時,折騰光貓橋接,路由器撥號才想起,這些的關聯關系與網絡協議的關系。實際上以前也看過關于這些的區別,但是沒有實際體驗過,也沒用折騰過,很快就忘記了,這次以筆者的實際折騰經驗講講區別。而且這些網絡在交換機、虛擬機、docker、路由器方面廣泛的應用。
1. 網絡模式?
網絡模式實際上主要有3種常見模式NAT、橋接、主機,最常用的是NAT、橋接。以筆者的路由器為例:
筆者配置的就是NAT模式,還有Singtel、橋接可選。其中Singtel就是主機單機模式 (HOST-ONLY)
1.1 NAT
NAT:Network Address Translation,網絡地址轉換,將一個公網IP(Internet Protocol)地址與私網IP地址進行綁定通信,NAT屏蔽了內部網絡,此時外網是不能穿透內網的,這就是為什么很多博客在講內網穿透,這種技術解決了IPV4地址枯竭的問題,同時也延長了IPV6的普及。NAT類型:靜態NAT(Static NAT)、動態地址NAT(Pooled NAT)、網絡地址端口轉換NAPT(Port-Level NAT),常用的是NAPT,就是家用環境的網絡,服務器對外用的都是公網ip,是可以直接訪問的。NAT這種模式也是路由的一種。
靜態NAT是一個外網固定IP,對應綁定一個私網IP;
動態NAT是一個外網臨時IP對應綁定一個私網IP;
NAPT是一個外網IP+一個端口綁定一個私網IP,外網IP可以是固定的,也可以是臨時分配的,大部分是臨時分配,固定公網IP需要向運營商申請。
NAPT示意圖:
?實際上服務器內部也是使用NAT模式,因為服務器對外的IP是固定的,可以通過端口綁定的方式,實現對內訪問,家庭內網穿透也是同理。
1.1.1 路由模式
實際上NAT也是路由的一種,NAT是公網到私網的定義,實際上私網之間也是需要數據交換的,即路由。所以很多光貓或者路由器直接使用路由模式與橋接模式區分,從這個來區分,路由器也是一臺弱交換機。
根據TCP/IP協議,私網之間不是同一個網段是不能相互通信的,關鍵是子網掩碼,如果子網掩碼不一樣,網關就不一樣,是不能直接訪問的,這個時候就需要交換數據。一般就會接交換機路由器或者用臺電腦來交換數據(軟路由😅),就會出現多層NAT。
以太網交換機工作在第二層(數據鏈路層),用于在同一網絡內部轉發以太網幀。如果源和目標IP地址位于不同網絡時,以太網幀必須發送給路由器,路由器負責在不同網絡間傳輸報文,通過路由表來決定最佳轉發路徑。
實際上這個是理論上的劃分,實際硬件的劃分比較模糊,通常一個硬件賦予了多種用途,比如光貓,可以賦予撥號,DHCP,WIFI等能力。
1.1.2 DHCP
DHCP(Dynamic Host Configuration Protocol),動態主機配置協議,局域網協議,由服務器控制一段IP地址范圍,客戶機登錄服務器時可以自動獲得服務器分配的IP地址和子網掩碼。
為什么說這個,因為家庭網絡基本上使用的DHCP,遙想筆者上大學(2009年)的時候,還是在學校申請IP才能上網,后來就改為自動獲取了。這中間有什么區別呢?
我們知道根據TCP/IP協議,沒有IP地址是無法通信的,因為IP是唯一標識,無論廣域網還是局域網都是一樣。DHCP就是局域網來自動分配IP地址用的
IPV4地址專門保留了三個區間作為私有地址:
| 10.0.0.0/8 | 10.0.0.0~10.255.255.255 |
| 172.16.0.0/12 | 172.16.0.0~172.31.255.255 |
| 192.168.0.0/16 | 192.168.0.0~192.168.255.255 |
10.0.0.0/8的8表示8個1,表示地址范圍是A類
IPV6以fd00::/8的為保留地址
如果沒有DHCP,那么IP地址就只能手動分配,即上網需要配置IP地址,這個多不方便啊,DHCP也是可以固定IP分配的,實際上一般是交換機通過網口與mac地址綁定的,所以無論怎么重啟,只要mac地址不變,ip就不會改變,只需要告訴DHCP服務器,我需要xxx的IP地址,只要DHCP服務器沒有分配給別人就可以分配,根據DHCP策略,也可以把分配給別人的IP收回來給這臺機器使用,但是IP不能重復,否則DHCP服務器就會無法處理。
1.1.3 PPPoE
?撥號上網,一般常見于家庭網絡,專線不知道是否需要,沒接觸過。撥號的本質就是去運營商申請公網IP,一般由光貓或者路由器完成,只要路由器硬件不是太差,優先推薦路由器。
1.1.3 NAT優缺點
NAT的本質就是隔離內外網,建立可以跟外網通信的局域網,節約了IP地址,缺點也是很明顯,是獨立的局域網,外網訪問需要固定公網IP,需要綁定端口通信。這里同時講了DHCP和PPPoE,實際上NAT不需要DHCP和PPPoE,比如我手動設置IP上網,也沒問題,至于PPPoE則是運營商的鍋,根據筆者理解,完全可以綁定設備(比如光貓mac)的方式規劃寬帶大小和自動申請公網IP段,不知道為啥需要撥號??赡芄P者理解有限。
1.2 橋接
橋接bridge,實際上名字就是其本義,就是搭橋,使網絡延伸更廣的地方。實際上就是用于,比如交換機網口不夠了,需要WiFi等場景,延伸網絡的傳遞。
那個從字面意思,橋接使用上一級路由的DHCP或者手動IP方式通信,相當于上一級NAT的橋接延伸,也可以通過WiFi延伸,連接的設備就是上一級路由的IP網絡,可以相互通信。
1.3 HOST-NOLY
host-only就是單獨主機,本身并不能與外界通信,只能主機之間通信,純粹局域網。筆者的路由器支持這種模式,但是用處很有限,僅在特殊需要隔絕外網的情況有用,可能部分安全行業需要吧。
2. 虛擬機的應用
以VM和PD虛擬機為例,實際上標準是一樣的,其他虛擬機大同小異。實際上虛擬機使用的也是NAT 橋接 主機模式
VM虛擬機默認NAT。NAT模式可以通過端口轉發的方式訪問內部的服務
其中VM建了2張虛擬網卡,VMnet8就是NAT使用的,VMnet1是主機模式用的,橋接使用的上一級路由來獲取IP,相當于獨立的掛在NAT上的機器設備,不會創建虛擬網卡。
?PD虛擬機默認共享網絡,也是NAT,筆者這里改為橋接了。
實際上也創建了2張虛擬網卡來處理NAT與host-only
3. docker的應用
docker是一個特殊的NAT設計,因為docker本身是進程態,而不是虛擬機,也可以認為是進程虛擬模式
?docker網絡有:bridge(默認)、 none 、host
| bridge | 為每一個容器分配、設置IP等,并將容器連接到一個docker0虛擬網橋,通過docker0網橋以及Iptables nat表配置與宿主機通信。因為經過了NAT,所以必須端口轉發才能在宿主機訪問。并不是純粹意義的橋接 |
| host | 使用宿主機的IP和端口 |
| none | 關閉了容器的網絡 |
實際上還有容器網絡Container:和一個指定的容器共享IP、端口范圍
筆者macOS并沒發現docker0的虛擬網卡,但是Ubuntu可以發現docker0虛擬網卡,查資料說,只有Linux是原生docker,mac win都是虛擬機上創建的。
在docker run時,用 --net 指定容器網絡模式:
host:? ? ? ? ?使用 --net=host
none:? ? ? ? 使用 --net=none
bridge:? ? ? 使用 --net=bridge,默認就是
container: 使用 --net=container:NAME_or_ID?
docker也可以自定義網卡實現真正意義的橋接,每個docker容器實現獨立的網絡IP,實際上就是我們自己創建虛擬網卡,橋接模式,讓docker使用我們自己創建的虛擬網卡通信,外網就能訪問,也能通過DHCP分配IP,或者固定IP。比如overlay網絡驅動、pipework、macvlan等,推薦macvlan:原理是在宿主機的物理網卡上虛擬出多個虛擬網卡,通過不同的MAC地址在數據鏈路層(Data Link Layer)進行網絡數據轉發。
docker network create -d macvlan \ #使用macvlan方式--subnet=192.168.79.0/24 \ #子網掩碼,C類是24個1--gateway=192.168.79.1 \ #網關,筆者的路由器是79.1-o parent=en1 macvlannet #物理機網卡名稱 網絡模式命令筆者的路由器
docker run的時候可以加--net=macvlannet來橋接網絡了。😄?
4. 路由器與交換機
本質上交換機,路由器都是小型服務器設備,只是功能用于處理網絡的NAT與橋接。
交換機實際上實現的是NAT或者橋接的網絡設備,實際上可能會有其他功能,類似路由器,路由器也是一臺小型交換機,只是硬件能力較差。
交換機可以綁定端口與mac地址,有很強的IP和mac,網口管理能力,實際上路由器的家長控制也是綁定mac地址,理論上只是硬件和固件的差別,如果給交換機DHCP,那么也可以自動分配IP,WAN與LAN的區別是軟體(即固件)決定的,所謂的固件實際上是一個操作硬件的驅動,同時對外提供操作訪問,也是一臺小型服務器,筆者沒有交換機,以路由器為例,筆者的路由器暴露的服務是192.168.79.1:80,80是可以默認省略的,這就是一些路由器支持docker的時候,可以用來搭建小型服務器的原因。
路由器實際上也是一個NAT或者橋接的設備,WiFi本質就是無線橋接,路由器的AP模式,無線中繼,橋接,WiFi都是橋接模式,路由器支持NAT DHCP PPPoE等,可以支持端口轉發,這實際上就是內網穿透的原理,類似docker的bridge模式,通過端口映射轉發數據。以筆者路由器為例:
?很遺憾寬帶沒有IPV6,😅端口轉發
5. 網絡層TCP/IP協議
實際上,網絡協議是基于TCP/IP 4層協議,或者5層協議(5層就是把網絡接口層劃為2部分),理想模型是OSI 7層模型,但是實際上運用中合并了部分層級,日常接觸到的是應用層協議,比如HTTP,偶爾會接觸到傳輸層協議TCP/UDP,根據現有的設計,HTTP3.0基于UDP協議傳輸,技術變化好快😄,一般而言,路由器是應用層以下協議的實現,NAT和橋接
總結
搞清楚了網絡的NAT,橋接模式,那么很多應用場景就很清晰了,比如交換機、路由器、光貓等。而且在實際生產運用中,比如虛擬機,docker等,理解網絡模式就可以根據自己的需要定制網絡,建立一個符合需求的龐大生產網絡,而且家庭環境也可以定制化家庭網絡設計,NAS、軟路由等設備也可以自定義實現。
總結
以上是生活随笔為你收集整理的网络NAT、桥接与主机模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: T型电阻网络噪声分析
- 下一篇: Shell脚本:后台运行