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

我试着理解为什么存在两个不同的协议族来通过套接字操作内核路由表。 任何人都可以帮助理解我什么是两种types的套接字之间的区别? 看起来两者的作用相同 – 操作内核路由表,然而程序员决定使用AF_ROUTE还是AF_NETLINK (NETLINK_ROUTE)套接字的标准是什么?

创build两个套接字types:

sockfd = socket(AF_ROUTE,SOCK_RAW,0);

sockfd = socket(AF_NETLINK,SOCK_RAW,NETLINK_ROUTE);

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

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

你可以阅读更多的这篇文章 。