DHCP是用來分配IP地址的。
NAT是用來轉換IP地址的。
NAT的型別很多,但很多時候,NAT就是為了讓N臺手機/電腦/平板能共享同一個公網IP來上網,如果你用過Linux,可以試試iptables的MASQUERADE、SNAT,實現的就是這個效果。
你把電腦/手機/平板插上網線/連上WiFi,作業系統的DHCP客戶端就會開始工作,嘗試聯絡網路裡的DHCP伺服器,然後從那裡“租”一個IP地址。
DHCP伺服器維護了一個地址池,它只會從這個池子裡分配地址,一個MAC對應一個地址,如果不用了就放回池子,這樣就可以避免搞出重複的IP地址——當然,你也可以給電腦/手機/平板直接填一個IP,這樣就可能重複了,DHCP伺服器管不著你,但你這樣用也可能碰到衝突、動不動斷網。
然後,很多時候,我們手裡的裝置從DHCP伺服器那裡拿到的是私有IP,192.168.X.X這種。
(直接拿到公網IP的也有,有些地方的ChinaNet就有機會拿到)
但是,私有IP在網際網路上是不用的。如果你把IP包頭的“目標地址”欄位填入私有地址,再把這個資料包發到網際網路上,一般過不了幾跳就會被丟棄,因為沒人在用這種地址。
然後,家用路由器/NAT閘道器等裝置就開始發揮作用了。
比如你用手機開啟知乎首頁,資料包從手機發出去時,經過家裡的路由器,它就把資料包頭部的源IP改成自己在用的公網IP,這樣資料包就可以正常發到目的地了。
在網際網路上的路由器,和知乎的伺服器看來,就像是你的家用路由器在進行訪問知乎的動作。
等對方回覆時,家用路由器再把資料包頭的目標IP改成對應的私有IP,然後這個回覆包就可以正確發到你的手機上。
其實只改IP頭還不夠,很多時候TCP/UDP/ICMP的頭部也需要改——總之,路由器要建立一個對應關係(NAT表),就像A單位(路由器拿到的公網IP)的張三(手機拿到的私有IP)給某時尚雜誌(網站伺服器的公網IP)寫信,對方回信了,路由器可不能搞混,要把回信給張三才對,給了李四就搞笑了。維護“對應規則”的方法也有很多,具體來說有Cone NAT、Symmetry NAT等很多種。
PS:可想而知,這也造成網路不能主動訪問內網的裝置,所以P2P應用,比如迅雷/電驢/XX影音之類的,就要開始嚷嚷埠對映、UPnP之類的了。UPnP也很簡單,就是應用跟路由器商量一下,自動建立埠對映,不用你手動開啟瀏覽器192.168.1.1、輸入管理密碼、新增埠對映那麼麻煩。對於P2P應用來說,還有UDP打洞等技術來克服NAT帶來的阻礙。
PPS:這樣一來,內網就不會暴露在外了,獲得安全性加成,可以讓你躲過445埠的WannaCry勒索蠕蟲病毒(然而,內網有豬隊友的話,還是會團滅的,嘿嘿)……
NAT除了像上面的例子那樣,在“內網的裝置連出去”時修改源IP/源埠,還可以在“網路的主機連進來”的時候,修改目標IP/目標埠,比如路由器的埠對映功能,相當於iptables的DNAT,就可以把目標埠改掉(其實連進來/連出去的時候都能用,具體看你想幹啥……)。
網上的資料似乎也很多了,比如這個:
NAT的特殊處理 - 目錄 - 技術甜甜圈 - 華三通訊
推薦看一看。
DHCP是用來分配IP地址的。
NAT是用來轉換IP地址的。
NAT的型別很多,但很多時候,NAT就是為了讓N臺手機/電腦/平板能共享同一個公網IP來上網,如果你用過Linux,可以試試iptables的MASQUERADE、SNAT,實現的就是這個效果。
你把電腦/手機/平板插上網線/連上WiFi,作業系統的DHCP客戶端就會開始工作,嘗試聯絡網路裡的DHCP伺服器,然後從那裡“租”一個IP地址。
DHCP伺服器維護了一個地址池,它只會從這個池子裡分配地址,一個MAC對應一個地址,如果不用了就放回池子,這樣就可以避免搞出重複的IP地址——當然,你也可以給電腦/手機/平板直接填一個IP,這樣就可能重複了,DHCP伺服器管不著你,但你這樣用也可能碰到衝突、動不動斷網。
然後,很多時候,我們手裡的裝置從DHCP伺服器那裡拿到的是私有IP,192.168.X.X這種。
(直接拿到公網IP的也有,有些地方的ChinaNet就有機會拿到)
但是,私有IP在網際網路上是不用的。如果你把IP包頭的“目標地址”欄位填入私有地址,再把這個資料包發到網際網路上,一般過不了幾跳就會被丟棄,因為沒人在用這種地址。
然後,家用路由器/NAT閘道器等裝置就開始發揮作用了。
比如你用手機開啟知乎首頁,資料包從手機發出去時,經過家裡的路由器,它就把資料包頭部的源IP改成自己在用的公網IP,這樣資料包就可以正常發到目的地了。
在網際網路上的路由器,和知乎的伺服器看來,就像是你的家用路由器在進行訪問知乎的動作。
等對方回覆時,家用路由器再把資料包頭的目標IP改成對應的私有IP,然後這個回覆包就可以正確發到你的手機上。
其實只改IP頭還不夠,很多時候TCP/UDP/ICMP的頭部也需要改——總之,路由器要建立一個對應關係(NAT表),就像A單位(路由器拿到的公網IP)的張三(手機拿到的私有IP)給某時尚雜誌(網站伺服器的公網IP)寫信,對方回信了,路由器可不能搞混,要把回信給張三才對,給了李四就搞笑了。維護“對應規則”的方法也有很多,具體來說有Cone NAT、Symmetry NAT等很多種。
PS:可想而知,這也造成網路不能主動訪問內網的裝置,所以P2P應用,比如迅雷/電驢/XX影音之類的,就要開始嚷嚷埠對映、UPnP之類的了。UPnP也很簡單,就是應用跟路由器商量一下,自動建立埠對映,不用你手動開啟瀏覽器192.168.1.1、輸入管理密碼、新增埠對映那麼麻煩。對於P2P應用來說,還有UDP打洞等技術來克服NAT帶來的阻礙。
PPS:這樣一來,內網就不會暴露在外了,獲得安全性加成,可以讓你躲過445埠的WannaCry勒索蠕蟲病毒(然而,內網有豬隊友的話,還是會團滅的,嘿嘿)……
NAT除了像上面的例子那樣,在“內網的裝置連出去”時修改源IP/源埠,還可以在“網路的主機連進來”的時候,修改目標IP/目標埠,比如路由器的埠對映功能,相當於iptables的DNAT,就可以把目標埠改掉(其實連進來/連出去的時候都能用,具體看你想幹啥……)。
網上的資料似乎也很多了,比如這個:
NAT的特殊處理 - 目錄 - 技術甜甜圈 - 華三通訊
推薦看一看。