bind(2)如何选择网络设备?

bind(2)如何选择网络设备?

背景

我正在寻找编写非 IP 网络协议和相关网络设备驱动程序(非以太网硬件)的内核空间实现。我找到了一些有关开发协议和驱动程序的资源,尽管我很难理解如何将使用我的协议的套接字与我的驱动程序关联起来。

目的是让它工作,以便用户空间中的程序只需要调用bind(socket(AF_TERRIBLE_IDEA, ...), ...);即可运行。

目的是更熟悉同时进行内核空间的开发,因此迁移到用户空间并不理想。

问题

当一个绑定进行调用后,内核如何知道将套接字关联到哪个设备(以及设备驱动程序)?

答案1

看一下原始套接字数据包套接字,它们专门用于在用户空间中实现非标准网络协议。

其他应用程序如何连接到您的驱动程序完全取决于您,最佳选择取决于您尝试实现的详细信息。

bind命令在不同的上下文中执行不同的操作;通常是“让我们提供一些必要的默认数据”的一些变体。那表示特定的源地址和/或网络接口,特别是对于标准协议(您没有使用),但并非必须如此。所以它并不像你想象的那样工作。

相关内容