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

mav*_*_2k 3 networking routing kernel bgp ospf

问题是在运行多个路由协议守护进程的任何 linux/unix 设备中重新生成路由协议数据包流。

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

Sav*_*btz 11

您没有指定您在说什么内核。
从 BSD 的角度来看,这一切都在TCP/IP Illustrated, Volume 2: The Implementation By 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_inputtcp_input/udp_input数据报到达套接字层后到相应的路由守护进程so_rcvbuf(套接字接收缓冲区)。
  5. 从这点路由守护程序通常被通知有关通过某种我等候套接字数据/ O通知工具(选择(2) /轮询(2) / epoll的(7) / kqueue的(2) ),并使用的recv(3)上该套接字提取数据包的有效载荷。这里(e)glibc/ libc/libSystem需要它的地方。
  6. 路由守护它的魔力并改变内核通过路由插座路由表(S)(PF_ROUTE在BSD衍生工具或PF_NETLINKNETLINK_ROUTE在Linux中)


Kyl*_*ndt 8

路由守护进程和套件操作内核中的路由表。所以数据包不会流经路由守护进程,而是根据路由表路由数据包。

当路由表中有两个相同特异性的选择(最具体的路由总是获胜)时,当谈到哪些路由获得优先权时,它是最好的(最低的)metric(参见 参考资料route)。在 Cisco 中,土地被称为“管理距离”。不同的协议(如 RIP 和 BGP)具有默认指标。我不确定是否有特定于 Linux 的参考,但是如果您查看管理距离链接,我会冒险猜测路由守护程序使用相同的优先级。

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