当收到数据包并最终触发 ARP 之类的过程时,路由器的硬件级别会发生什么?

网络工程 路由器 思科-ios arp 硬件 记忆
2021-07-10 17:11:20

请让我知道我的理解上的差距在哪里。有很多空白,所以请不要犹豫,填写或纠正它们。

据我所知,在接收数据包并触发 ARP、IP 或其他进程时,硬件级别会发生以下情况:

  1. 信号被发送到路由器并被 UART 或 DUART 检测到。
  2. DUART 向 CPU 发送中断,以便它可以将位流更改为可读字节。
  3. UART 从信号转换的字节(以 11 位的形式:1 个起始位、8 个数据位和 2 个停止位)然后发送到串行接口适配器驱动程序。
  4. 然后从 HD 触发串行接口适配器的设备驱动程序并将其带入 RAM 存储器。
  5. 设备驱动程序使串行接口“虚拟化”。串行接口适配器的这种虚拟化获取接收到的字节,并将它们放入“帧”格式中,以便像 ARP 这样的进程能够理解。例如,它可能会将它放在以太网框架中。
  6. 串行接口的虚拟化位于缓冲区(队列)中。当虚拟化位于队列的前面时,设备驱动程序会根据数据包的“协议类型”调用正确的进程(同样是 ARP、IP 等)。
  7. 然后 CPU 将该程序从 HD 调用到 RAM 中,并将该程序写入分配给该进程的“堆”,以便它可以理解数据包并对该数据包执行所需的操作。

我知道的很模糊的地方是串行接口适配器的设备驱动程序的作用和队列的作用。另外,我知道所有操作都是由 CPU 驱动的,我只是认为在每个步骤中重复它有点多余。

现在请告诉我在描述接收数据包时路由器硬件级别发生的情况时我的理解有什么问题或我遗漏的任何步骤。

1个回答

我不确定你为什么坚持使用 ARP(地址解析协议)。它不用于接收线路上的位。它将第 3 层地址解析为第 2 层地址以构建第 2 层帧,但是在接收时,您正在剥离第 2 层帧。有些东西,比如串行接口,可能不像以太网那样使用 ARP 或帧。

路由器或其他设备内部的过程会有很大差异,具体取决于供应商、型号和操作系统。例如,许多现代路由器使用 ASIC(专用集成电路)完成您在硬件中描述的大部分工作。

首先,阅读 OSI 模型并了解层。这是理论上的,但它可以让您了解事物在独立层中的工作方式。了解独立层如何相互配合,然后专注于每一层内部的特定机制。

  1. 第 1 层是线路上的位以及对它们进行编码/解码的硬件。
  2. 第 2 层是帧和 MAC 地址所在的位置。
  3. 第 3 层是数据包和 IP 地址所在的位置。
  4. 第 4 层是段和端口(第 4 层地址)所在的位置。
  5. 更高层在这里是题外话。

当应用程序想要向另一台主机中的应用程序发送数据时,它会请求使用第 4 层协议(例如 TCP 或 UDP)建立连接(使用特定端口)。

第 4 层协议将数据划分为称为分段的数据报,并将分段标头(包括第 4 层源地址和目标地址,例如 TCP 或 UDP 端口)应用于分段。

第 4 层段被发送到第 3 层,在那里应用数据包头,包括第 3 层源地址和目标地址,例如 IP 地址。

第 3 层数据包被发送到第 2 层,其中应用了帧头,包括第 2 层源地址和目标地址,例如 MAC 地址。为了得到目的二层地址,二层必须将三层目的地址解析为二层地址。这就是 ARP(地址解析协议)可能发挥作用的地方。第 2 层首先检查其 ARP 缓存以进行解析。如果在那里找不到它,它将发送一个 ARP 请求,让目标主机用它的第 2 层地址进行回复。如果第 3 层地址在不同的第 3 层网络上,它将使用第 3 层网关的第 2 层地址。

然后,第 2 层会将帧传递到第 1 层硬件进行序列化,并将结果位放在线路上。

当接收主机(或网关)获得这些位时,它会反序列化它们,并解封装帧、数据包和段,将结果数据传递给接收应用程序。注意:ARP 只需要发送,不需要接收,因为所有的寻址都已经包含在接收到的数据中。

如果接收方是网关(路由器),它将解封装帧,因为它们仅对本地 LAN 有用。然后路由器将检查目标第 3 层地址的第 3 层标头,并查看其路由表以查看它是否具有数据包的下一跳。如果路由器没有下一跳的数据包,它将丢弃该数据包,否则它将将该数据包切换到下一个接口,并重复将数据包封装成帧的过程,以便新的 LAN 到下一跳。然后,新帧将被序列化为下一个链接的位。有些路由器只有硬件队列,有些路由器有用户可定义的队列,可以根据流量类型调整大小。可能有优先队列首先得到服务。数据包可能会随机丢弃,以防止队列填满,

超出我所描述的讨论可能是特定于设备的,或者对于本网站来说过于广泛。