路由器如何路由连接?

路由器如何路由连接?

路由器如何跟踪连接?当您发送 http 请求时,它会转到路由器,然后通过互联网发送到另一个路由器等;但是它如何知道要转到服务器,它是通过端口转发到负载平衡器吗?最后,当数据包返回时,它如何知道要返回 PC,因为数据包被发送回路由器而不是 PC?是否可以从路由器外部建立与由路由器控制的 PC 的连接,即您可以将数据包定向到未直接连接到互联网的 PC 吗?

答案1

我试图回答这个老问题,希望能帮助那些正在寻找类似问题的人。此外,如果我犯了任何错误,请告诉我。

为了使信息从您的计算机流到互联网上的网络服务器,需要很多不同的组件、设备和算法来发挥作用,但我们将重点关注实现这一点的网络算法。

我认为,在实现计算机和互联网网络服务器之间的信息流动方面,主要有两种互联网技术发挥着最大的作用。路由协议和 NAT。

我们将重点关注 IP 数据包,因为它是路由协议和 NAT 工作的数据单位。

  1. 当从浏览器发送到互联网服务器的 IP 数据包到达家庭路由器时,它会被检查,并且其源 IP 会从原始发送者的本地 LAN IP 更改为家庭路由器的公共 IP,然后路由到目标 IP。此转换记录在连接表这是 NAT 的工作
  2. 如果目的地是路由器公共 IP 网络的一部分,则数据包将被发送到该 IP,否则将根据路由表进行匹配评估。如果路由器找不到匹配项,它会将数据包转发到自己的默认网关。此过程持续进行,直到路由器最终找到匹配项。这就是路由协议发挥作用的地方
  3. 如果未找到路由,则会向源主机发送“ICMP 目标不可达-主机不可达”消息。
  4. 一旦找到最终主机,它就会接受解封装的 IP 数据包,处理其中包含的请求,然后发回响应。响应的目标 IP 中将包含源路由器的 IP。
  5. 响应将遵循与请求相同的流程,直到到达发起者。请注意,当数据包通过特定路线到达目的地时,它们不一定必须通过相同的路线返回。
  6. 一旦到达目标 Internet IP,路由器就会将传入流量与其连接表进行匹配,执行反向转换,然后将数据包转发到适当的机器。

这就是 IP 数据包从浏览器流向目标 Web 服务器的方式。

路由器连接跟踪流程图

  • 有 4 个连接是因为我认为我打开的页面使用了 4 个不同的请求来构建页面。
  • 发起连接的客户端可以使用任何可用的源端口。此端口将被保留为临时使用,直到两台机器同意关闭连接。IANA 建议对这些所谓的“临时端口”使用 49152 到 65535 的范围。Web 服务器通常在端口 80 上运行,这是 HTTP 流量的默认端口,因此客户端会将查看网页的请求发送到该端口。
  • 在家庭路由器中泳道是作为路由器连接表的快照。
  • 在超级用户服务器中,泳道是与服务器建立的连接的快照。

连接表主要使用源 IP、源端口、目标 IP 和目标端口的组合来确保唯一性。显然,确定唯一性的最重要因素是源端口,因此,如果其他内部主机尝试使用现有的源端口,则路由器会更改该端口并在连接表中记录该更改

这应该可以回答你所有的问题,除了这个,是否有可能从路由器外部与路由器控制的 PC 建立连接,即您是否可以将数据包发送到未直接连接到互联网的 PC?

如果您知道路由器上用于特定 Internet IP 的 NAT 端口,并且能够在路由器打开其 NAT 端口时欺骗 IP 数据包并将其发送到路由器,那么理论上这应该是可能的,但我确信大多数路由器使用更多参数来识别 IP 数据包的唯一性和真实性。

我参考了以下参考资料来构建我的答案:

答案2

路由器通过网关或接口连接网络,简单地说:

Do I know where this packet should go?
  yes - is it one of mine?
    yes - send to appropriate interface.
    no  - send on to next gateway
  no  - return a packet saying unreachable

您的家用路由器将运行连接跟踪软件 - 它将保存网络上的机器在互联网上进行通信的连接列表。因此它将知道返回响应的地址和端口。

TCP 数据包有一个特殊字段,可以包含原始机器的地址。路由器使用一种称为伪装的技术来插入其返回地址,目标机器也包含该地址。这可以节省连接跟踪器的一些工作,但也会向远程服务器透露内部 IP 地址。

另一方面,返回 UDP 数据包则依赖路由器的连接跟踪器模块将响应返回给原始机器。直到几年前,这还是一个难以解决的问题。

新的传入连接不会在连接跟踪器中有任何条目,因此路由器将不知道将其发送到哪里,除非给出针对该类型数据包的特定转发指令,并且您会发现所有路由器都能够指定网络上的哪台机器将接收端口 80 的新请求。

TCP 是一种复杂而神奇的状态驱动协议,数据包不必采用相同的路由,可以分解成更小的部分,无序到达,纠错要求重新发送单个数据包,并且可以重新组装数据流,两端的应用程序都不会意识到任何困难,除非它们太大而影响性能。许多人通过它获得了博士学位!

答案3

要理解路由,首先你应该了解OSI 模型你也应该了解跨域路由

这将是相当基础的:

当数据包离开标准家庭网络上的计算机时,计算机知道这是一个私有网络,并且由于 CIDR 的原因,知道最终目的地在网络之外,因此将数据包发送到默认网关。默认网关查看 IP 并将其发送到路由器链,直到到达目标网络(基于数据包头中的 IP 信息),然后该网关将其转发到网络上的正确 IP(有时这基于数据包详细信息中的端口,有时仅基于 IP,具体取决于远端服务器/网络)。当请求的信息被发回时,您的路由器会根据选择用于标记会话的端口知道它将转到哪台计算机,并且它知道该会话属于哪个私有 IP。还有很多内容,但这是一个相当高级的解释,可以了解路由的概念。我相信其他人会纠正我或补充这一点。

您的问题的答案归结为,是的,这是可能的,您只需要知道端点的公共 IP 和需要建立连接的端口。路由器将负责知道将该端口转发到哪台计算机以到达专用网络上的服务器(基于 NAT 规则)。

答案4

我不确定我是否理解正确,但我会尽力猜测。您问“是否可以与路由器控制的 PC 建立连接?”我假设您指的是远程访问。您可以使用 vnc 或远程桌面之类的东西。如果您指的是通过互联网连接的两台 PC,请查看 VPN。如果您指的是一台 PC 从另一台 PC 分配 IP,那么这将是服务器/客户端连接,而通过 WAN,它必须是类似 VPN 的东西。

TCP 数据包中包含了数据包内部到 LAN 目的地的信息。

相关内容