路由器如何详细路由 LAN 上的流量?

网络工程 路由器 局域网
2022-02-28 13:00:16

电气工程师在这里试图理解事物。所以我想这可能很简单或非常复杂,但是路由器究竟是如何在局域网上的两台 PC 之间路由流量的呢?

例如。PC-1 和 PC-2 是坐在我面前桌子上的两台笔记本电脑,它们连接到同一个路由器/调制解调器。PC-1 IP 是 192.168.10.1 PC-2 IP 是 192.168.10.2。在这里阅读这篇内容丰富的文章后:https ://www.think-like-a-computer.com/2011/07/18/how-routing-works/ 我知道当他们在德国交流时说 PC-3 IP 地址 200.200.100.3 路由器将 IP 地址抽象为子网掩码 200.200.100.x,将其发送到另一个路由器,该路由器将其发送到另一个路由器,最终将其路由到连接到 PC-3 路由器的子网掩码地址为 200.200.100.x,然后将数据包识别为前往 PC-3 并将其发送到那里。但是最后一步实际上是如何发生的呢?

路由器操作的代码是用什么语言编写的,C/C++/Assembler?如何手动从 PC-1 向 PC-2 发送数据包?在运行 Windows 10 的台式电脑中,这种低级通信是否可以通过命令行或程序进行?我可以阅读路由器用于在 LAN 上路由数据包的源代码,还是在某处公开可用?我做了很多搜索,但每个网站基本上都说“然后路由器将数据包识别为属于 PC-x 并在途中发送它”,而没有详细说明实际发生的情况,可能是因为谷歌的平均用户故障排除不需要这些知识。非常感谢你!

2个回答

路由器究竟如何在局域网上的两台 PC 之间路由流量?

如果您的“LAN”指的是共享的 L2 网段(通过交换机或集线器连接)——通常这也意味着相同的 IP 子网——那么根本不涉及路由器。数据包被封装在帧中,这些数据包根据帧中的目标 MAC 地址由中间的交换机直接从一个节点转发到另一个节点。

发往本地子网之外的 IP 目的地的数据包被封装在发往该目的地的网关/路由器的帧中。在最简单的情况下,所有出站内容都发送到默认网关

在做出相同转发决策的过程中,这对每个跃点/网关/路由器重复,直到最后一跃确定目标 IP 是本地 IP 并使用 L2 成帧直接发送数据包。

(稍微简化——并非所有内容都是 IP 和以太网,但它们是通用协议。)

路由器操作的代码是用什么语言编写的,C/C++/Assembler?

几乎任何适合系统编程的东西。现代路由器在大多数情况下在硬件中运行是相当标准的。此外,L3 交换机通常在硬件中路由。

Windows NT 风格,当然 Linux 可以在激活时进行本机路由。然而,这在这里是题外话。Linux 是开源的,所以你可以研究内核代码。

您(和销售人员)称为“路由器”的盒子可能不仅仅是路由器,它是以太网交换机、支持 NAT 的路由器、可能是无线接入点等的组合。

当 LAN 上的两台 PC 通信时,不涉及“路由器”的实际 IP 路由部分,PC 将生成直接寻址到彼此 MAC 地址的以太网帧,它们只会通过“路由器”的以太网交换部分。

要发送数据包,主机和路由器将首先查看它们的路由表。路由表将提供接口名称,对于非本地路由,将提供下一跳 IP 地址。对于本地连接的网络,路由表中没有下一跳 IP 地址,而是将目标地址用作下一跳 IP 地址。

通过以太网或类似以太网的接口发送数据包时,需要将下一跳 IP 地址转换为 MAC 地址。对于 IPv4,系统将首先在 arp 表中查找接口,如果找到匹配,则发送数据包,否则将在发出 ARP 请求时排队。当收到 arp 响应时,将在 ARP 表中添加一个条目,并释放排队的数据包。

IPv6的过程在概念上相似,但在细节上有所不同。


PS 在过去,互联网上的每台计算机都有一个全球可访问的 IP 地址,但现在情况已不再如此(至少对于 IPv4 而言)。您的家庭或企业路由器通常会配置为执行网络地址转换,基本上从 Internet 的角度来看,您 LAN 上的所有计算机看起来都像一台计算机。

另一方 ISP 的路由器通常不会执行地址转换。