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

5
我试图理解为什么存在两种不同的协议族来通过套接字操作内核路由表。有人可以帮助我理解这两种套接字类型的区别吗?它们看起来都用于操作内核路由表,但是程序员基于什么标准来决定使用 AF_ROUTE 还是 AF_NETLINK (NETLINK_ROUTE) 套接字呢?
创建两种套接字类型: sockfd = socket(AF_ROUTE, SOCK_RAW, 0); sockfd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
2个回答

7
在BSD TCP/IP协议栈实现中,与BSD路由套接字相关的是一种特殊的套接字,称为路由套接字。它具有AF_ROUTE地址族、PF_ROUTE协议族和SOCK_RAW套接字类型。在BSD中,进程使用路由套接字向内核路由表添加或删除路由。在Linux中,路由套接字的等效功能由netlink套接字协议类型NETLINK_ROUTE提供。Netlink套接字提供了BSD路由套接字的功能超集。您可以在此文章article中阅读更多内容。

-2

用户空间和内核空间之间有两种通信方式。一种是套接字,另一种是 netlink。套接字使用 AF_ROUTE,netlink 套接字使用 AF_NETLINK。我认为这两种方式可能有所不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接