2017-04-14 85 views
0

假設我有兩臺計算機A和B連接到同一個調制解調器,或者他們從同一個ISP獲取Internet。當我搜索谷歌「我的IP地址是什麼?」它在計算機A和B 14.141.56.230上顯示相同的IP地址。我想知道,如果假設發送者想要發送數據到計算機A,那麼調制解調器或路由器將如何識別這個數據包屬於計算機A而不是計算機B,因爲它們都具有相同的根據谷歌的IP地址。數據包如何從發送方轉發到接收方

+2

我想你應該問服務器故障,堆棧溢出是編程。 – Jer

+0

您沒有以任何形式或形式使用OSI。 [tag:osi]因此有njava與它做的事情。 – EJP

回答

0

這就是NAT的作用。外部服務器無法直接聯繫A或B:A或B必須先聯繫服務器,以便NAT知道如何處理外部服務器接收的數據包。

特別地,this應該是有趣:

當專用(內部)網絡上的計算機發送IPv4數據包到外部網絡,NAT設備中的源字段替換內部IP地址包頭(發件人的地址)與NAT設備的外部IP地址。然後,PAT可以從一個可用端口池中爲連接分配一個端口號,將該端口號插入源端口字段(很像郵局號碼箱),然後將數據包轉發到外部網絡。 NAT設備然後在包含內部IP地址,原始源端口和翻譯的源端口的翻譯表中創建條目。來自同一連接的後續數據包被轉換爲相同的端口號。

所以這個想法是,A設法外部服務器E.當從A消息到達A的路由器R,則R改變分組的源IP,它分配一個端口P,並且將其發送請求E.R記住它已將此端口P分配給A.當E在端口P上回答R時,路由器將其轉換回並將分組轉發給A.

這也意味着E不能直接聯繫A 。 A必須啓動連接。現在考慮A和E都在NAT後面的情況;他們兩個都需要發起連接,這是不可能的。要找到解決方案,您需要查看TCP hole punching

+0

我請你詳細解釋一下 – vivek

相關問題