【发布时间】:2015-02-23 08:27:56
【问题描述】:
我刚刚在这里问了一个问题:previous question
Tun/tap 设备会避免安装 netmap/pf_ring/dpdk 吗? 如果 tun/tap 允许绕过内核,难道不是一回事吗?
或者那些代码带来了太多的优化,以至于它们超过了 tun os 绕过策略?
这里我不太明白。
谢谢
【问题讨论】:
我刚刚在这里问了一个问题:previous question
Tun/tap 设备会避免安装 netmap/pf_ring/dpdk 吗? 如果 tun/tap 允许绕过内核,难道不是一回事吗?
或者那些代码带来了太多的优化,以至于它们超过了 tun os 绕过策略?
这里我不太明白。
谢谢
【问题讨论】:
TUN/TAP 接口是虚拟网络接口,其中不是从物理媒体发送和接收数据包,而是从用户空间程序发送和接收它们。它们不绕过内核,但通常将 TAP 接口设置为默认接口,以便让用户空间程序拦截应用程序流量。
考虑下图一个用户空间程序与网络接口和网络堆栈的典型交互。
+--------------------------+
| Network Interface Driver |
+------------+-------------+
|
+------------+-------------+
| Network Stack |
+--------+---+---+---------+
| | | Kernel Space
+----------------------------------------+
| | | User Space
|Sockets|
| | |
+--------+---+---+---------+
| User Space Applications |
+--------------------------+
在 TAP 接口的情况下,无法完全绕过网络堆栈。用户空间应用程序仍然可以连接到物理接口。只有当一个帧专门指向 TAP 接口时,拦截器应用程序才能拦截帧。
+--------------------------+ +--------------------------+
| Network Interface Driver | | TAP Interface |
+------------+-------------+ +--------+----+------------+
| | |
+------------+-------------+ | |
| Network Stack +--------------+ |
+---+------------------+---+ |
| | | Kernel Space
+-------------------------------------------------------------------------+
| | | User Space
Sockets to NIC Sockets to TAP TAP File Descriptor
| | |
+---+------------------+---+ +-------------+------------+
| Normal Applications | | Interceptor Application |
+--------------------------+ +--------------------------+
在 Netmap 的情况下,一旦用户空间应用程序专门获取了 NIC,则由用户空间应用程序决定哪些帧(如果有)可以注入网络堆栈。因此,我们可以拥有直接抓包的性能,并在需要时利用网络堆栈服务。对 NIC 的独占访问始终不是一个好特性,考虑 NIC 必须响应 ARP 请求的简单场景。
+-----------------------------------------------------------+
| Netmap Enabled Network Interface Driver |
+-----+-----------------------------------------------------+
|
+-----+-----+ +-----------+ +--------------------------+
| NIC Rings | | Host Ring +------+ Network Stack |
+-----+-----+ +-----+-----+ +--------+---+---+---------+
| | | | | Kernel Space
+-------------------------------------------------------------------------+
| | | | | User Space
MMAP Access MMAP Access |Sockets|
| | | | |
+-----+-------------+------+ +--------+---+---+---------+
| Interceptor Application | | Normal Applications |
+--------------------------+ +--------------------------+
不幸的是,根据http://dpdk.org/doc/guides/sample_app_ug/netmap_compatibility.html,DPDK 不支持“主机环”
我不确定 PF_RING
还请注意,为了使用 NETMAP/PF_RING/DPDK,您必须修改、重新编译甚至重新设计您的应用程序以匹配框架。
【讨论】: