有没有办法将框架直接移动到用户空间?

有没有办法将框架直接移动到用户空间?

当接收到以太网帧时,它首先进入内核协议栈(TCP / IP),然后进入用户空间....我想实现用户空间堆栈...我的操作系统是Linux(Ubuntu / Parrot sec)....有没有办法直接将以太网帧移动到用户空间而不使用内核协议栈?是否有使用TAP设备的可行解决方案......?

例如:使用 PF_PACKET、SOCK_RAW,如果发送了 dns 查询(原始)(不监听端口,仅绑定到接口),在收到 dns 响应(可以被嗅探)后,内核将向 dns 服务器发送端口不可达的 icmp 数据包...(因为端口 53 上没有应用程序列表)可以使用 iptables 来防止这种情况,但这不是一个好的解决方案...那么,有没有办法将帧直接发送到用户空间而不进入内核堆栈?

答案1

有多种方法可以绕过内核并在用户空间实现完整的网络堆栈。本文提到了其中五个:PACKET_MMAP、PF_RING、Snabbswitch、DPDK、Netmap。

这些通常由需要真正快速的网络处理的大公司使用,速度比内核所能提供的要快。编写自己的网络堆栈的投资是巨大的,对于一个人来说可能太多了。

如果您使用 Tap 设备,则基本上就是在编写模拟网卡,您可以看到这些帧,就好像它们在经过内核网络堆栈后会到达这个虚拟网卡一样。反之亦然,您可以向内核提供它们在线路上接收时的样子,这样内核就可以将它们传递到网络堆栈。

一个人很容易做到这一点,这取决于你的实际目标是什么(你没有说,所以这可能是一个XY 问题),这可能会满足您的要求。

相关内容