如果我有兩個內部計算機通過NAT路由器連接到相同的外部IP地址,怎麼是路由器能夠獲得流量到正確的內部計算機?我的理解是,NAT將傳入數據包轉發給最近將傳出數據包發送到[傳入數據包]發送者的IP地址的計算機。由於兩臺計算機都發送到相同的地址,路由器是否將數據包轉發給兩者?如果是這樣的話,客戶端軟件有責任確定哪些數據包是相關的?兩臺電腦如何通過NAT連接到相同的外部地址?
是否有可能,如果兩臺計算機嘗試連接到同一個端口?
如果我有兩個內部計算機通過NAT路由器連接到相同的外部IP地址,怎麼是路由器能夠獲得流量到正確的內部計算機?我的理解是,NAT將傳入數據包轉發給最近將傳出數據包發送到[傳入數據包]發送者的IP地址的計算機。由於兩臺計算機都發送到相同的地址,路由器是否將數據包轉發給兩者?如果是這樣的話,客戶端軟件有責任確定哪些數據包是相關的?兩臺電腦如何通過NAT連接到相同的外部地址?
是否有可能,如果兩臺計算機嘗試連接到同一個端口?
當您打開套接字時,您需要對目標系統的端口進行尋址,並在您自己的系統上打開一個共軛偵聽端口以接收任何響應。您必須將目標系統發送給您的監聽端口。
使用相同的調制解調器
當您啓動網頁瀏覽器,並轉到www.google.com:80有多個系統,您的瀏覽器獲得/搜索免費的非系統共軛端口從聆聽系統。讓我們說,共軛端口是10000.監聽端口用於接收來自谷歌的http流。
然後你的孩子坐在你旁邊順便還可以瀏覽www.google.com:80並且還捎帶分配軛端口10000
你們兩個播放臺站或任何的Xbox-的他/她的谷歌會坐在電纜調制解調器後面,電纜調制解調器後面是無線路由器。而且你的兩個系統都在無線路由器後面 - 所有這些都按照網絡拓撲結構的順序排列。
爲了防止對路由器/調制解調器端口地址衝突
讓我們說,有線電視公司DHCP分配調制解調器IP4 ADRESS 72.72.72.72。但是您的無線路由器DHCP將192.168.0.10分配給您的系統,將192.168.0.11分配給您的孩子的系統。
當攜帶偵聽端口信息的幀通過NAT路由器時,它會轉換一個或兩個偵聽端口。讓我們說你的頁面的端口15000和你的孩子的頁面的端口16000。
您的無線路由器然後將您的請求發送到谷歌服務器來自72.72.72.72:15000和72.72.72.72:16000。
然後,google服務器會分別響應72.72.72.72:15000和72.72.72.72:16000,當您的無線路由器遇到響應時,它會到達它存儲的映射並將72.72.72.72:15000轉換爲192.168。 0.10:10000到達您的系統,但將72.72.72.72:16000轉換爲192.168.0.11:10000,以達到您孩子的系統。
運行網絡/遊戲/ FTP /等服務器
但是,如果你有一個Web服務器或您的系統上運行的FTP服務器是什麼。如果你有兩個系統,並且都有一個web服務器,並且這兩個web服務器都在監聽端口80,會怎麼樣?
讓我們假設您的第一個Web服務器系統的無線路由器註冊/分配的本地IP地址是192.168.0.30,第二個Web服務器系統是192.168.0.40。
無線路由器會有一個配置網頁,通常默認192.168.0.1:80,除非你改變它。在頁面上會出現一個選項卡,您可以在其中定義/保留應用程序端口映射。
你可以與你的無線路由器註冊預留映射
192.168.0.30:80 => outgoing port 8080
192.168.0.40:80 => outgoing port 8088
,讓你有打電話你的朋友你的網絡/遊戲服務器尋址通過 72.72.72.72:8080和72.72.72.72:8088分別爲 ,其中無線路由器將阻止其8080和8088端口使用其自身的動態NAT。
當然,72.72.72.72只有在您的ISP DHCP決定更新您的調制解調器的ip4地址72.72.90.200之前。之後,你將不得不給你的朋友打電話/發電子郵件,並說 嘿,服務器的地址已分別更改爲72.72.90.200:8080和72.72.90.200:8088。或者您可以訂閱動態DNS(DDNS)服務以使用命名域,其中ddns服務將需要您在系統上安裝一個簡單的心跳工具,以幫助他們監控地址變化。 DDNS翻譯是一個單獨的問題/策略。
NAT調制解調器
較新的ISP合同爲您提供與具有NAT的調制解調器。如果是這樣,您必須關閉調制解調器上的或無線路由器上的調制解調器。你不應該同時使用 - 翻譯兩次有什麼意義,因爲NAT只是爲了防止地址衝突。當您從無線路由器關閉NAT時,它可以作爲集線器交換機運行,而不再是路由器,因此您可以使用它的一個LAN插座而不是WAN插座將其連接到調制解調器。
+1多麼真棒的解釋!我一直對以下事實感到沮喪:對NAT的大多數解釋都沒有真正解決傳出連接上的回覆如何使其回到發件人。 – AaronLS 2010-02-01 09:49:37
它用於傳入外部流量不同的端口,並且NAT然後路由一個端口上的分組發送給一個內部IP地址,並從另一個端口到另一個內部IP地址的報文...從每個iniital請求內部計算機,當它通過NAT出口時,建立哪個端口將用於來自外部IP地址的傳入流量,並且它告訴外部服務器將該流量重新發送到該外部服務器的端口。
路由器管理的「源」端口是單獨的每個計算機。雖然您可能正在連接到「目標」上的端口80,但路由器可能會將源端口分配給某個高端端口。
Wikipedia概括起來爲
網絡地址轉換涉及 重新編寫源和/或 目的IP地址,通常 也是TCP/UDP端口的IP 數據包的數量,因爲他們通過NAT。 校驗和(IP和TCP/UDP)必須 也被重寫,以考慮 的變化。提供
糾正我,如果我錯了:兩臺計算機最初請求連接到1.1.1.1端口1000.路由器組成新的端口,40000和40001.路由器發送數據包,仍然連接到端口1000.當服務器發送它回來,它發回到端口40000或40001.這是有道理的,除了我想當打開連接,發送和接收發生在同一端口。 – user241146 2009-12-30 20:49:09
一個「套接字」由四部分數據組成:起始IP地址,起始端口,目的地IP和目的地端口。在你的例子中,端口40000和40001是源端口,1000是目的端口。 – kdgregory 2009-12-30 21:04:57
已經很好的答案,但這裏是另一個例子:
HOST A addr HOST B addr
10.1.0.2:4040 10.1.0.3:4040
-----------------------------------------
NAT 200.50.50.28:4040 200.50.50.28:4041 (what external host sees)
200.50.50.28是路由器的全局(互聯網)IP。
每個端口號是在NAT表中是唯一的。當然,路由器完成所有髒透明地修改源地址和目標地址的工作。
因此,如果兩臺計算機使用相同的源端口,路由器會自動爲任何主機重新分配一個新的src端口?然後Host A和Host B連接的服務器會看到不同的src端口?如果Host A和Host B的端口沒有衝突,則路由器不會更改src端口?只是想確認我是否正確理解它。謝謝 – kuchi 2017-12-01 10:46:36
@kuchi,是的服務器爲每個主機看到不同的端口。通常,路由器會解決地址衝突問題,即如果兩臺主機連接到兩臺不同的服務器,則可以使用相同的端口。元組'((src_ip,src_port,dest_ip,dest_port)'必須是不同的。 – 2017-12-01 11:29:41
RFC3022提供了關於如何工作
如果你問如果您的基於IP的程序需要知道NAT的很多信息,答案是否定的 - 這就是爲什麼它是如此的成功。 – 2009-12-30 20:30:41
有一個被接受的答案,所以我沒有看到賞金中的重點。 – 2017-08-18 21:11:34
@RonMaupin他想爲現有的答案提供一些他的聲譽賞金,因爲他喜歡它或者對他有很大的幫助。查看賞金的描述*一個或多個答案是堪稱典範,值得額外獎勵。獎勵現有的接受答案*。這裏的人們經常這樣做,即使在很多年以後,也要獎勵額外的好處。 – 2017-08-19 08:48:00