Ip 如何将数据包从发送方转发到接收方

Ip 如何将数据包从发送方转发到接收方,ip,Ip,假设我有两台计算机A和B,它们连接到同一个调制解调器,或者它们从同一个ISP获取internet。当我在谷歌上搜索“我的ip地址是什么?”时,它会在计算机A和B上显示相同的ip地址14.141.56.230。我想知道,如果一个发送者想要向计算机a发送数据,那么调制解调器或路由器将如何识别这个数据包属于计算机a而不是计算机B,因为根据谷歌的说法,它们都有相同的ip地址。这是调制解调器或路由器的角色。外部服务器不能直接联系A或B:A或B必须先联系服务器,以便NAT知道如何处理外部服务器接收的数据包

假设我有两台计算机A和B,它们连接到同一个调制解调器,或者它们从同一个ISP获取internet。当我在谷歌上搜索“我的ip地址是什么?”时,它会在计算机A和B上显示相同的ip地址14.141.56.230。我想知道,如果一个发送者想要向计算机a发送数据,那么调制解调器或路由器将如何识别这个数据包属于计算机a而不是计算机B,因为根据谷歌的说法,它们都有相同的ip地址。

这是调制解调器或路由器的角色。外部服务器不能直接联系A或B:A或B必须先联系服务器,以便NAT知道如何处理外部服务器接收的数据包

特别值得注意的是:

当专用(内部)网络上的计算机向外部网络发送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后面的情况;它们都需要启动连接,这是不可能直接实现的。要找到解决方案,您需要仔细研究。

我想您应该问一下服务器故障,堆栈溢出是用于编程的。您没有以任何方式或形式使用OSI。所以这和njava有关系,我请你详细解释一下