我希望我能正确表述这一点,不会让大家感到困惑。(如果这样,我很抱歉!)
在过去的几天里,我一直在努力学习路由器内部的工作原理。我知道一些基础知识,但我很好奇路由器如何处理它的信息。从我目前所读到的内容来看,IP 地址是否首先进入路由器,然后在路由器的 CPU 处理链接时,它是否也进入 RAM 并检查“IP 表”以获取它已经拥有的链接列表,然后再次检查 RAM 中的“ARP 缓存”,看看它是否已经有它向其发送数据包的 IP 地址的 MAC 地址,或者我是否完全搞错了。如果您能帮忙,请随时回答!
答案1
我认为你有点搞错了。另外,具体情况可能有点不同,但
路由器将路由表加载到内存中(在处理 IP 流量之前)
数据包(其中包含源 IP、目标 IP、源端口和目标端口以及协议等)从网卡中取出。然后将其与路由表进行匹配,并通过适当的接口发送到适当的下一跳。
ARP 缓存仅用于以太网类型的数据包(包括“Wifi”),用于发现/记住 LAN 上可访问的设备。只有当“下一跳”在 LAN 端且未知时才会调用它。
路由过程通常在固件中完成,这会移除/部分移除 CPU 处理位,这也是并非所有设备都支持 IPV6 的原因之一。此外,路由通常与过滤和/或数据包检查一起完成。互联网上有许多图表显示了如何通过 IPTables 处理数据包 - 当然 IPTables/Linux 并不是唯一的选择,但它非常常见,并可以让人了解如何处理内容。请参阅这里以获得简单的指南。
答案2
首先,您混淆了路由和交换的一些概念。交换是一个第 2 层过程(与第 1 层媒体紧密协作),而路由是一个第 3 层过程,因此它关注的是 IP 数据包和路由,很大程度上忽略了第 2 层帧信息。
在第 1 层和第 2 层,接收并缓冲携带帧数据的电信号,直到端口有足够的帧来判断其去向,然后要么完全缓冲,要么将数据流定向到芯片(专用集成电路 (ASIC)) 使用已知 MAC 表或广播解析来处理 MAC 地址。
然而,路由是一个更抽象的过程(因为它发生在更抽象的层面上)。不必太具体(关于这些概念的书籍很多),路由器知道网络,而不是主机,并使用以下协议共享它们所知道的网络的信息:RIP,开放源协议 (OSPF),(E)IGRP,边界网关协议, ETC。
路由器不需要知道到达指定主机的路径。它只需要知道应该使用哪个出口接口将数据包发送到另一个更明确地知道如何处理数据包的路由器。这就是路由器完成工作真正需要知道的全部信息;事实上,大多数家用路由器只知道两条路由,即到 LAN 的路由和到世界上其他所有地址的路由。
因此,如果我想从美国向日本北海道的服务器发送数据包,则数据包路径的路由可能是:
- 我家到 ISP
- 我的 ISP 位于美国西海岸
- 西海岸至日本(东京)
- 东京至北海岸
- 北海岸至北海道
- Hokiado 到主机 ISP
- 主机 ISP 到主机邻里
- 托管邻里到主机站点
- 将网站托管到确切的服务器
在现实世界中,这远没有那么简单,但关键原则是,数据包每经过一次跳跃,就会到达一个路由器,而路由器会越来越明确地知道如何到达主机。这样,我的路由器、我的 ISP 路由器或美国西海岸就不需要知道日本北海岸可用的网络了。
这可能没有您希望的那么技术性,但在深入了解细节之前了解一般情况是很重要的(就像上面描述的路由聚合一样),坦率地说,这个站点并不是真正适合描述第 3 层设备的每个选项或流程的地方。