参考资料
-linux云估算网路
区别图
一图胜千言,步入题外话:化学网卡,TUN,TAP,VETH四种模型的数据收发如右图所示
TAP/TUN
tap/tun是Linux内核2.4.x版本以后实现的虚拟网路设备,不同于数学网卡靠硬件网络板卡实现linux虚拟网络设备,tap/tun虚拟网卡完全由软件来实现,功能和硬件实现完全没有差异,它们都属于网路设备,都可以配置IP,都归Linux网路设备管理模块统一管理。
作为网路设备,tap/tun也须要配套相应的驱动程序能够工作。tap/tun驱动程序包括两个部份,一个是字符设备驱动,一个是网卡驱动。这两部份驱动程序分工不太一样,字符驱动负责数据包在内核空间和用户空间的传送,网卡驱动负责数据包在TCP/IP网路合同栈上的传输和处理。
用户空间与内核空间的数据传输
在Linux中,用户空间和内核空间的数据传输有多种形式,字符设备就是其中的一种。tap/tun通过驱动程序和一个与之关联的字符设备,来实现用户空间和内核空间的通讯插口。
在Linux内核2.6.x以后的版本中,tap/tun对应的字符设备文件分别为:
tap:/dev/tap0
tun:/dev/net/tun
设备文件即充当了用户空间和内核空间通讯的插口。当应用程序打开设备文件时,驱动程序都会创建并注册相应的虚拟设备插口,通常以tunX或tapX命名。当应用程序关掉文件时,驱动也会手动删掉tunX和tapX设备,都会删掉早已构建上去的路由等信息。
tap/tun设备文件如同一个管线,一端联接着用户空间,一端联接着内核空间。当用户程序向文件/dev/net/tun或/dev/tap0写数据时,内核就可以从对应的tunX或tapX插口读到数据,反之linux视频,内核可以通过相反的形式向用户程序发送数据。
tap/tun和网路合同栈的数据传输
tap/tun通过实现相应的网卡驱动程序来和网路合同栈通讯。通常的流程和化学网卡和合同栈的交互流程是一样的,不同的是化学网卡一端是联接化学网路,而tap/tun虚拟网卡通常联接到用户空间。
如右图的示意图,我们有两个应用程序A、B,化学网卡eth0和虚拟网卡tun0分别配置IP:10.1.1.11和192.168.1.11,程序A希望构造数据包发往192.168.1.0/24网关的主机192.168.1.1。
基于上图,我们瞧瞧数据包的流程:
应用程序A构造数据包,目的IP是192.168.1.1linux解压rar,通过socketA将这个数据包发给合同栈。
合同栈按照数据包的目的IP地址,匹配路由规则,发觉要从tun0出去。
tun0发觉自己的另一端被应用程序B打开了,于是将数据发给程序B.
程序B收到数据后,做一些跟业务相关的操作,之后构造一个新的数据包,源IP是eth0的IP,目的IP是10.1.1.0/24的网段10.1.1.1,封装原先的数据的数据包,重新发给合同栈。
合同栈再依照本地路由,将这个数据包从eth0发出。
后续步骤,当10.1.1.1收到数据包后linux虚拟网络设备,会进行解封装,读取上面的原始数据包,从而转发给本地的主机192.168.1.1。当接收回包时,也遵照同样的流程。
在这个流程中,应用程序B的作用虽然是借助tun0对数据包做了一层隧洞封装。虽然tun设备的最大用途就是用于隧洞通讯的
VETHPAIRS
Veth设备被建立为成对的联接虚拟以太网插口,而且可以被视为虚拟尾纤。最终结果将在另一端凸显下来。
这促使veth对特别适宜将不同的虚拟网路组件(比如Linux集线器,OVS集线器和LXC容器)联接在一起。
您将在vethpairs对中见到的一个常见用例是OpenStackNeutron。在使用第vethpairs对将多个Linux桥接器联接在一起的情况下,您目前难以使用基于Tap的设备进行此操作。
常见问题
TUN/TAP驱动程序支持什么平台?
目前,驱动程序已为3Unices编撰:
Linux内核2.2.x,2.4.x及之后版本
FreeBSD3.x,4.x,5.x及之后版本
Solaris2.6、7.0、8.0及之后版本
TUN/TAP驱动程序用于哪些?
如上所述,TUN/TAP驱动程序的主要目的是隧洞。
VTun()使用它。
使用TUN/TAP的另一个有趣的应用程序是pipsecd
(~beyssac/pipsec/),一个用户空间IPSec
可以使用完整的内核路由的实现(与FreeS/WAN不同)。
3.虚拟网路设备实际怎么工作?
可以将虚拟网路设备视为简单的点对点或
以太网设备,而不是从化学设备接收数据包
媒体,从用户空间程序接收它们,而不是发送
通过化学媒体发送的数据包将它们发送到用户空间程序。
假定您在tap0上配置了IPv6,
内核将IPv6数据包发送到tap0,并将其传递给应用程序
(比如,VTun)。该应用程序将其加密,压缩并发送到
另一端在TCP或UDP上。另一边的应用解压缩
揭秘接收到的数据并将数据包写入TAP设备,
内核会像处理来自实际化学设备的数据包一样处理数据包。
TUN驱动程序和TAP驱动程序有哪些区别?
TUN适用于IP框架。TAP适用于以太网帧。
这意味着在使用tun和
使用水龙头时使用以太网帧。
BPF和TUN/TAP驱动程序有哪些区别?
BPF是中级数据包筛选器。可以附加到现有的
网路插口。它不提供虚拟网路插口。
TUN/TAP驱动程序确实提供了虚拟网路插口,而且可能
将BPF附加到此插口。
TAP驱动程序是否支持内核以太网桥接?
是。Linux和FreeBSD驱动程序支持以太网桥接。