【问题标题】:c - tcp - netmap : could tun/tap interface neglict the use of netmap?c - tcp - netmap : tun/tap 接口可以忽略 netmap 的使用吗?
【发布时间】:2015-02-23 08:27:56
【问题描述】:

我刚刚在这里问了一个问题:previous question

Tun/tap 设备会避免安装 netmap/pf_ring/dpdk 吗? 如果 tun/tap 允许绕过内核,难道不是一回事吗?

或者那些代码带来了太多的优化,以至于它们超过了 tun os 绕过策略?

这里我不太明白。

谢谢

【问题讨论】:

    标签: c tcp packet


    【解决方案1】:

    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,您必须修改、重新编译甚至重新设计您的应用程序以匹配框架。

    【讨论】:

    • 谢谢阿米尔!我最终得出了相同的结论并重写了一个完整的 tcp 堆栈。甚至比我提到的替代方案更快:D
    • 哇,完整的 tcp 堆栈,这将是一个大项目。
    • 它已经完成了 :) 是的,很多 c 行和汇编。但是工作得很好:)人们甚至会在不知道的情况下从中受益。我不在乎名声。
    • 如果是开源项目,能否告诉我项目网站上的名称?
    猜你喜欢
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多