假设我有两台计算机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