pingpang

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  21 Posts :: 0 Stories :: 3 Comments :: 0 Trackbacks

先说一下应用环境:

采用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发送来的包。

posted on 2012-07-19 22:23 往事随风 阅读(1869) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: