假設我有兩臺計算機A和B連接到同一個調制解調器,或者他們從同一個ISP獲取Internet。當我搜索谷歌「我的IP地址是什麼?」它在計算機A和B 14.141.56.230上顯示相同的IP地址。我想知道,如果假設發送者想要發送數據到計算機A,那麼調制解調器或路由器將如何識別這個數據包屬於計算機A而不是計算機B,因爲它們都具有相同的根據谷歌的IP地址。數據包如何從發送方轉發到接收方
0
A
回答
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
相關問題
- 1. Java/Android:如何在接收數據包時發送數據包
- 2. 發送和接收數據包的簡單方法?
- 3. Raw Socket Linux發送/接收數據包
- 4. 清除發送/接收的數據包
- 5. 如何從Visual Basic發送和接收數組數據到PHP?
- 6. 發送的數據包是從接收到的分組
- 7. 如何發送/接收數據Byte Bytete
- 8. 在發送方和接收方捕獲不同的tcp數據包
- 9. Android:發送/接收數據
- 10. NSStream,發送/接收數據
- 11. 發送和接收數據
- 12. 從GameCenter發送和接收數據:Swift
- 13. 從智能卡發送/接收數據
- 14. 從Servlet發送和接收JSON數據
- 15. 從一個發送者/接收者併發地接收/發送
- 16. 如何計算udp數據包發送和接收的時間
- 17. TCP如何在Java中發送/接收實時大數據包?
- 18. 如何連續發送和接收數據包?
- 19. 如何在發送/接收數據包之前分析/製作數據包?
- 20. 發送數據包(PCAP,WLAN,C)到接收器,無需連接接收
- 21. 如何發送數據包到內核?
- 22. 以編程方式發送/接收數據短信iOS
- 23. 黑莓通過Post方式發送和接收數據
- 24. 如何使用java發送相關性id到消息中,從發送方發送並從接收方檢索到消息頭
- 25. 套接字 - 不發送/接收數據
- 26. 向客戶端發送UDP數據包時,服務器是否接收到它剛發送的數據包?
- 27. 如何從澤西島發送/接收avro格式的數據?
- 28. 如何從燒瓶發送和接收數據?
- 29. Beagleboard:我如何向/從DSP發送/接收數據?
- 30. 如何從發送意向接收數據?
我想你應該問服務器故障,堆棧溢出是編程。 – Jer
您沒有以任何形式或形式使用OSI。 [tag:osi]因此有njava與它做的事情。 – EJP