2017-04-14 56 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

相关问题