问题是在多路由协议守护进程正在运行的任何linux / unix设备中丢弃路由协议数据包stream。
从NIC卡(物理层)到任何路由(OSPF / RIP / BGP)守护进程,路由协议数据包如何到达(操作stream)?
你没有指定你在说什么内核。
从BSD的angular度来看,这一切都在“ TCP / IP图解”第2卷:“实施”中加以解释, 由Gary R. Wright,W. Richard Stevens
简短版本如下:
mbuf / mbuf_cluster或sk_buff )。 这里数据包也被复制到bpf设备。 ether_input取决于帧的协议和地址族,它被相应的protosw (协议交换)数组条目处理。 ip_input或者tcp_input / udp_input数据报到达socket层到对应的路由守护进程的so_rcvbuf (套接字接收缓冲区)。 (e)glibc / libc / libSystem就是这个地方。 路由守护进程和套件操纵内核中的路由表。 因此,数据包不会stream经路由守护进程,而是根据路由表进行路由。
当在路由表中存在两个具有相同特性的选项(最具体的路由总是胜出)时,哪个路由获得优先级,哪个是最好的(最低的) metric (见route )。 在思科土地被称为“ 行政距离” 。 不同的协议,如RIP和BGP,都有默认的度量标准。 我不确定是否有Linux特定的参考,但是如果您查看pipe理距离链接,我会冒险猜测路由守护程序使用相同的优先级。
就路由协议数据包本身而言,它依赖于路由协议,但它们通常使用标准的传输协议。 例如,BGP在端口179上使用TCP / IP会话。因此守护进程将相应地绑定一个套接字。