您的问题触及Internet的核心以及路由的定义。在您的示例中,路由器D基于两个前提将数据发送到计算机A:
- 被告知将数据发送到计算机A。
- 它已经从计算机A处理了数据。
您的方案似乎采用了第一个选项-路由器D想发送到计算机A。但是它如何到达那里呢?它是通过使用路由器之间共享的路由表来实现的。
路由器C会定期向所有知道的路由器(包括路由器D)发送更新,这些更新包括“知道”“ 192.168。*”网络(实际上-由于该网络未路由-不会发生-这不会发生-它被视为私有)。忽略它。)因此,路由器D已经知道路由器C知道该网络。
因此,当数据发往计算机A时,首先要通过网络对其进行寻址。因此,路由器D询问:“我需要找到192.168。*网络。我知道吗?不。我认识其他人吗?是的。路由器C知道。我如何通过2.2到达路由器C? 2.2接口。”
路由器D然后将数据发送到路由器C。路由器C收到数据后说:“哦,我有来自路由器D的数据,但是用于192.168网络。我知道该网络吗?是的,通过我的192.168.1.1网络”,然后转发它。
还需要完成其他一些工作来解决IP和MAC寻址问题,但实际上,我只涉及路由,而不是ARP和本地网络。
您会注意到您的第一个假设-远程路由器必须知道路由机制-在这里不起作用。路由器D不在乎路由器C是否使用EIGRP,RIP,RIPv2,OSPF或其他。它关心的只是它有更新。(当然,如何进行更新对于确保两者保持同步很重要。但这又是一个不同的问题。)
您的第二个假设-端口号是路由选择的一个因素-也不正确。路由器(通常)不需要端口信息即可做出路由决策。(由于某些新的网络技术,这种情况已经略有变化,并且主要适用于防火墙和代理,但是更广泛的假设仍然适用于“真”路由器。)
继续您的示例,路由器C将在端口1000(根据您的方案)上转发数据,因为计算机A上可能有服务期望该特定端口上的数据。但是它只知道这样做,因为路由器D在端口1000上发送了它。路由器D只在该端口上发送了它,因为数据的始发者在该端口上将它发送到了路由器D。
我不理解您包含bittorrent或P2P程序可以反映您提出的问题。相同的解释将适用。路由器还可以配置有端口触发功能,该功能可以将特定设备(或IP)与特定端口相关联。这样,当流量进入端口1234时,路由器便知道将数据发送到设备ABCD。这通常与传出TCP端口关联。即,如果我在端口7890上发送流量,则路由器知道传入流量将在端口1234上并将其发送给我。
但是端口触发与(远程)路由决策无关,而是与路由器用于LAN的内部MAC / IP表有关。
更新/编辑:在您发表评论后进一步回答和阐述。路由器D仅通过其IP地址(192.168.2.2)知道计算机A。但是路由器C通过IP地址和MAC地址知道计算机A。MAC(媒体访问控制)是国际标准定义的唯一(通常是...)48位标识符。连接到LAN(有线和无线)的每个设备都应该具有唯一的MAC地址。
路由器(路由器C)将IP地址和MAC地址关联到一个表(MAC地址表)中。因此,当流量进入路由器C,并且路由器意识到对它的“本地”时,它将进行MAC地址表查找。然后,路由器从字面上更改帧寻址信息。
它重建(重写)第2层目标信息以具有计算机A的目标MAC地址,但保持IP地址信息(第3层)相同。
如果路由不知道MAC地址。还是表中没有IP-MAC关系,它执行称为ARP(地址解析协议)的操作来询问“ HEY,该网络上的每个人。您有这个MAC地址吗?” 或有时-“每个人,您的MAC地址是什么?”)。适当的设备响应,路由器将建立其IP-MAC表。