Linux 中的 AF_NETLINK(NETLINK_ROUTE) 和 AF_ROUTE 套接字有什么区别?

Abh*_*gar 4 sockets linux kernel

我试图理解为什么存在两种不同的协议系列来通过套接字操作内核路由表。任何人都可以帮助理解我两种类型的套接字之间有什么区别吗?看起来两者都有相同的目的 - 操作内核路由表,但是程序员决定是否使用AF_ROUTEAF_NETLINK (NETLINK_ROUTE)套接字的标准是什么?

创建两个套接字类型:

sockfd = 套接字(AF_ROUTE,SOCK_RAW,0);

sockfd = 套接字(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE);

小智 5

关于 BSD 路由套接字 在 BSD TCP/IP 栈实现中,有一个特殊的套接字称为路由套接字。它的地址族为AF_ROUTE,协议族为PF_ROUTE,套接字类型为SOCK_RAW。BSD 中的路由套接字被进程用来在内核路由表中添加或删除路由。

在 Linux 中,路由套接字的等效功能由 netlink 套接字协议类型 NETLINK_ROUTE 提供。Netlink 套接字提供了 BSD 路由套接字的功能超集。

您可以在本文中阅读更多内容