任何路由协议数据包如何从 NIC 卡(物理层)到达任何路由(OSPF/RIP/BGP)守护进程(操作流)?

任何路由协议数据包如何从 NIC 卡(物理层)到达任何路由(OSPF/RIP/BGP)守护进程(操作流)?

问题在于在运行多个路由协议守护进程的任何 Linux/Unix 设备中重新设置路由协议数据包流。

任何路由协议数据包如何从 NIC 卡(物理层)到达任何路由(OSPF/RIP/BGP)守护进程(操作流)?

答案1

你没有指定你谈论的是什么内核。
从 BSD 的角度来看,这一切都在TCP/IP 图解,第 2 卷:实施,作者:Gary R. Wright、W. Richard Stevens

简短版本如下:

  1. 帧到达 NIC 的 rx 描述符环。通过 DMA,它被传输到 RAM 中的 RX 环。
  2. 驱动程序将 RX 环中的设备特定描述符转换为某种通用网络内核结构(例如mbuf/mbuf_clustersk_buff)。此外,此处数据包被复制到bpf设备。
  3. 根据ether_input帧的协议和地址系列,它由相应的protosw(协议交换机)数组条目进行处理。
  4. ip_input然后,或tcp_input/udp_input数据报到达套接字层后,到达相应的路由守护进程so_rcvbuf(套接字接收缓冲区)。
  5. 从此时起,路由守护进程通常会通过某种 I/O 通知工具获得有关套接字上待处理数据的通知(选择(2)/民意调查(2)/epoll(7)/kqueue(2)) 及其用途接收(3)在该套接字上提取数据包的有效负载。这里(e)glibc/ libc/libSystem代替了它。
  6. 路由守护进程发挥它的魔力,通过路由套接字改变内核的路由表(PF_路线在 BSD 衍生品中或PF_NETLINKNETLINK_ROUTE在 Linux 中)

答案2

路由守护进程和套件操纵内核中的路由表。因此数据包不会流经路由守护进程,而是根据路由表进行路由。

当路由表中有两个同等特定性(最特定的路由总是获胜)的选择时,哪条路由具有优先级,则选择最佳(最低)的路由metric(请参阅route)。在 Cisco 领域中,这称为“管理距离。不同的协议(例如 RIP 和 BGP)都有默认指标。我不确定是否有 Linux 特定的参考资料,但如果您查看管理距离链接,我会猜测路由守护进程使用相同的优先级。

至于路由协议数据包本身,这取决于路由协议,但它们通常使用标准传输协议。例如,BGP 在端口 179 上使用 TCP/IP 会话。因此守护进程只需相应地绑定套接字即可。

相关内容