linux下tap的一种使用方法

本文介绍了一种众核平台Tilera上使用TAP虚拟网卡的方法,解决10G xgbe网卡数据包无法直接交付给标准协议栈的问题,通过TAP网卡将数据包传递给应用层程序,实现高效的数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.ibm.com/developerworks/cn/linux/l-tuntap/

tap的介绍就不说了,请自行参考上面的引用


先说一下应用环境:

采用Tilera的平台(一种众核平台,),三张网卡,两个10G的xgbe网卡,用来进行数据的发送和接受;一个1G的普通网卡,用来做管理接口.


10G的xgbe工作在Tilera的特定sdk下,其中的数据包不经过内核协议栈,直接交付给用户。这样的好处是数据处理效率很高(普通的linux协议栈中需要两次内存的拷贝,效率低),但是也因此带来了一些问题,有些包需要交给标准的协议栈 ,比如ospf报文,zebra工作在用户态,需要从标准的协议栈内获取网络数据包,而xgbe是不会直接把数据交付给标准协议栈的。


TAP虚拟网卡是Linux标准的虚拟网络设备,在Tilera平台上其编程也是一样的。

拥有这样的虚拟网卡后可以利用其通用linux协议栈的特性,并可以将数据包交付应用层的socket程序处理。ospfd程序就可以利用TAP进程收到ospf报文,并发布默认路由出去。


上图是TAP网卡的收发包流程图

左侧红色箭头标示的为从协议栈经TAP网卡发包标示,对从tap读进来的包进行一下netio封装,然后经过xbge发送出去

右侧绿色箭头标示的为数据包经TAP网卡收至协议栈的流程,调用netio(tilera 特定的网络编程api)从xgbe中收到发送给tap的报后,经过包处理进程将数据包交付给TAP进程,其实就是将收到的包写进tap网卡中,这样用户进程就可以再内核协议栈中接受到通过xgbe发送来的包。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值