我正在 Linux 内核中编写一个通过网络发送数据的驱动程序。现在假设我要发送的数据(缓冲区)在内核空间中。我如何在不创建套接字的情况下发送数据(首先这是一个好主意吗?)。我正在寻找代码中的性能而不是简单的编码。我如何设计接收端?没有套接字连接,我可以在接收端获取和查看数据吗(如何)?如果缓冲区在用户空间中,所有这些都会改变(包括性能)(如果有的话,我会从用户那里复制:-))?
问问题
1546 次
2 回答
0
您可能应该使用netlink,如果您想真正与远程主机通信(例如通过 TCP/IPv6),请使用用户级代理应用程序。(所以内核模块使用 netlink 到您的应用程序代理,它可以使用 TCP,甚至通过ssh
或 HTTP,远程发送数据,或将其存储在磁盘上......)。
我不认为让内核模块直接与远程主机通信是没有意义的(例如安全问题、过滤、路由iptables
......)
真正的瓶颈几乎总是(物理)网络本身。1Gbit 以太网几乎总是比内核模块或应用程序可持续产生的速度慢得多(还有延迟问题)。
于 2012-07-06T21:09:27.933 回答
0
如果您希望在没有套接字的情况下在网络上发送数据,您需要连接到网络驱动程序并通过它们发送原始数据包,并为您想要劫持的那些过滤它们的传入数据包。我认为性能优势不会大到足以保证这一点。
我什至认为网络驱动程序中没有正常的钩子,我过去做了一些相关的事情来实现防火墙。您可以想象使用 netfilter 挂钩来执行类似的操作,以便从网络驱动程序附加到接收端。
于 2012-07-10T11:16:29.567 回答