前面两篇文章已经介绍过 tap/tun 的原理和配置工具。这篇文章通过一个编程示例来深入了解 tap/tun 的程序结构。...编译时开启下面的选项即可: Device Drivers => Network device support => Universal TUN/TAP device driver support tap...ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) { close(fd); return err; } // 一旦设备开启成功...使用 tap/tun 设备需要包含头文件 #include linux/if_tun.h>,以下是完整代码。...ioctl(fd, TUNSETIFF, (void *) &ifr)) < 0) { close(fd); return err; } // 一旦设备开启成功
概述 目前主流的虚拟网卡方案有tun/tap和veth两种。在时间上 tun/tap 出现得更早,在 Linux Kernel 2.4 版之后发布的内核都会默认编译 tun/tap 的驱动。...并且 tun/tap 应用非常广泛,其中云原生虚拟网络中, flannel 的 UDP 模式中的 flannel0 就是一个 tun 设备,OpenV** 也利用到了 tun/tap 进行数据的转发。...veth 是另一种主流的虚拟网卡方案,在 Linux Kernel 2.6 版本,Linux 开始支持网络名空间隔离的同时,也提供了专门的虚拟以太网(Virtual Ethernet,习惯简写做 veth...tun/tap tun 和 tap 是两个相对独立的虚拟网络设备,它们作为虚拟网卡,除了不具备物理网卡的硬件功能外,它们和物理网卡的功能是一样的,此外tun/tap负责在内核网络协议栈和用户空间之间传输数据...在 qume-kvm 开启 tap 模式之后,在启动的时候会向内核注册了一个tap类型虚拟网卡 tapx,x 代表依次递增的数字; 这个虚拟网卡 tapx 是绑定在 Bridge 上面的,是它上面的一个接口
什么是Tun/Tap 在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。...应用程序如何操作Tun/Tap Linux Tun/Tap驱动程序为应用程序提供了两种交互方式:虚拟网络接口和字符设备/dev/net/tun。...Tun/Tap驱动程序会将Tun/Tap接口收到的数据包原样写入到/dev/net/tun字符设备上,处理Tun/Tap数据的应用程序如V**程序可以从该设备上读取到数据包,以进行相应处理。...Linux Bridge上还有一个Tap虚拟网卡,用于V**程序接收从Linux Bridge上收到的数据包。...由于Eth1被加入了V**主机上的Linux Bridge,因此Linux Bridge收到该ARP请求。 Linux Bridge对该ARP请求进行泛洪,发送到连到其上面的Tap虚拟网卡上。
/TAP是linux下的虚拟网卡设备,能够被用户态的进程用来发送和接收数据包,但是与物理网卡的数据来自链路层不同,tun/tap数据的接收和发送方都是来自用户进程或内核。...设备的创建和工作原理:tun、tap设备都是通过linux内核的驱动程序tun来创建的,tun驱动在初始化的时候会创建一个misc设备,路径是/dev/net/tun,用来作为向用户态导出的接口,所有对...return VNET_API_ERROR_SYSCALL_ERROR_1; clib_memset (&ifr, 0, sizeof (ifr)); /*设置tun、tap接口在linux设备名称...tapcli-x接口: *intfc-namelinux创建tap接口名称> *address linux tap接口ip地址> *hwaddr: vpp tap接口mac地址 */ tap connect...#linux系统显示tap接口名称 ethernet #默认是tun模式,配置Ethernet标识tap模式。
tap/tun 是什么 tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网路板卡实现,tap/tun 虚拟网卡完全由软件来实现,功能和硬件实现完全没有差别...,它们都属于网络设备,都可以配置 IP,都归 Linux 网络设备管理模块统一管理。...用户空间与内核空间的数据传输 在 Linux 中,用户空间和内核空间的数据传输有多种方式,字符设备就是其中的一种。...在 Linux 内核 2.6.x 之后的版本中,tap/tun 对应的字符设备文件分别为: tap:/dev/tap0 tun:/dev/net/tun 设备文件即充当了用户空间和内核空间通信的接口...tap/tun 的区别 看到这里,你可能还不大明白 tap/tun 的区别。 tap 和 tun 虽然都是虚拟网络设备,但它们的工作层次还不太一样。
这里介绍 Linux 常用的虚拟网络接口类型:TUN/TAP、bridge、veth、ipvlan/macvlan、vlan 以及 vxlan/geneve。...Linux 通过内核模块 TUN 提供 tun/tap 功能,该模块提供了一个设备接口 /dev/net/tun 供用户层程序读写,用户层程序通过 /dev/net/tun 读写主机内核协议栈的数据。...TUN 或 TAP 类型的虚拟网卡(实例化一个 tun/tap 设备),其名称可能是 tun0/tap0 等。...from tun/tap device\n", nread); } return 0; } 接下来开启三个终端窗口来测试上述程序,分别运行上面的 tun 程序、tcpdump 和 iproute2.../tap device Read 84 bytes from tun/tap device Read 84 bytes from tun/tap device Read 84 bytes from tun
=/etc/qemu-ifup 908 ifconfig 909 qemu -hda linux-0.2.img -net nic -net tun,ifname=tap0,script=.../etc/qemu-ifup 910 qemu -hda linux-0.2.img -net nic -net /dev/net/tun,ifname=tap0,script=/etc/qemu-ifup... 911 vi /dev/net/tun 912 ll /dev/net/tun 913 vi /etc/qemu-ifup 914 qemu -hda linux-0.2...tap,ifname=tap0,script=/etc/qemu-ifup 916 modprobe tun 917 qemu -hda linux-0.2.img -net nic -...nic -net tap,ifname=qtap0,script=no 952 lsmod |grep tun 953 ls -l /dev/net/tun 954 qemu -kernel
操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。...在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。 服务器如果拥有TUN/TAP模块,就可以开启V**代理功能。...虚拟网卡TUN/TAP 驱动程序设计原理: tun/tap 驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。...利用tun/tap 驱动,可以将tcp/ip协议栈处理好的网络分包传给任何一个使用tun/tap驱动的进程,由进程重新处理后再发到物理链路中。...开源项目openV**和Vtun都是利用tun/tap驱动实现的隧道封装。
/tun 是Linux内核 2.4.x 版本之后使用软件实现的虚拟网络设备,这类接口仅能工作在内核中。...linux /if_tun.h> int tun_alloc(char *dev, int flags) { struct ifreq ifr; int fd, err; char...下面程序使用了上面定义的tun_alloc()函数,完整代码如下: #include #include linux/if_tun.h> #include #include...User-Mode Linux也是做了类似的事情:将一个用户空间运行的(修改过的)内核连接到主机上的一个tap接口,并通过该接口与主机进行通信。...当然,一个完整的Linux内核会实现TCP/IP和以太网,新的虚拟化平台,如libvirt广泛使用tap接口与支持qemu/kvm的客户机进行通信,接口通常会被命名为vnet0,vnet1等。
TUN/TAP,对于后台没有或者找不到这个模块的,刚好可以用一下。...安装完成后,会开启 rinetd-bbr。以后重启机器也会随开机自启。使用前请注意自己的 iptables 相关设置。...bash tcp_nanqinlang-haproxy-debian.sh # CentOS 7 # 64 bit # ldd > = 2.14 # tun/tap enabled wget https...tcp_nanqinlang-haproxy-debian.sh # CentOS 7# 64 bit# ldd > = 2.14# tun/tap enabledwget https://github.com...安装完成后,会开启 LKL。以后重启机器也会随开机自启。
Linux 虚拟网络的背后都是由一个个的虚拟设备构成的。虚拟化技术没出现之前,计算机网络系统都只包含物理的网卡设备,通过网卡适配器,线缆介质,连接外部网络,构成庞大的 Internet。 ?...而实现这些功能的基本元素就是虚拟的网络设备,比如 tap、tun 和 veth-pair。 tap/tun tap/tun 提供了一台主机内用户空间的数据传输机制。...tap/tun 有些许的不同,tun 只操作三层的 IP 包,而 tap 操作二层的以太网帧。 ?...它的这个特性常常用来连接不同的虚拟网络组件,构建大规模的虚拟网络拓扑,比如连接 Linux Bridge、OVS、LXC 容器等。...总结 最后,总结一下,我们提到几种网络设备,eth0、tap、tun、veth-pair,这些都构成了如今云网络必不可少的元素。
为了将来自VPP拥有的网卡的IKE数据包路由到strongswan,我们创建了一个Linux-CP实例,它绑定了镜像接口对(图中的WAN网卡端口和Tun/Tap端口),两者都具有相同的IP地址10.0.0.1...Linux-CP有助于自动配置接口之间的路由。当IKE消息通过WAN网卡端口被vpp接收后,会通过Tun/Tap端口转发到内核,经过Linux内核栈处理后再传递给strongswan。...Linux-CP还将处理WAN网络适配器和镜像Tun/Tap端口之间的正确路由配置。 上图显示了ipsec加解密相关流程。...随后,解密数据包被转发到LAN网卡或Tun/Tap端口,具体取决于解密数据包中的IP目的地址。 下面是参考白皮书基于vpp最新主线分支在ubuntu22.04环境搭建流程。...{ disable } } #开启vpp和linux内核之间配置自动同步 linux-cp { lcp-sync } 重启vpp及strongswan软件,查询strongswan vapi
以 TUN/TAP 为代表的虚拟网卡地址,多为 V** 场景 以 eth1 为代表的多网卡场景,有钱就可以装多网卡了!...5 干扰因素二:TUN/TAP 虚拟网络设备 平时我们所说的虚拟网卡、虚拟机,大致都跟 TUN/TAP 有关。...因为我们常用的 V** 基本就是基于 TUN/TAP 搭建的,如果我们使用 TUN 设备搭建一个基于 UDP 的 V** ,那么整个处理过程可能是这幅样子: 5.3 TAP 工作原理 TAP...mktun --dev tun0Mon Apr 29 22:23:31 2019 TUN/TAP device tun0 openedMon Apr 29 22:23:31 2019 Persist state...这里读者可能会有疑惑,使用 ifconfig 不是也可以创建 tap 和 tun 网卡吗?
但 Linux 本身由于虚拟化技术的演进,也集成了一些虚拟网络设备的解决方案,主要有以下几种: (1)TAP/TUN/VETH TAP/TUN 是 Linux 内核实现的一对虚拟网络设备,TAP 工作在二层...Linux 内核通过 TAP/TUN 设备向绑定该设备的用户空间程序发送数据,反之,用户空间程序也可以像操作物理网络设备那样,向 TAP/TUN 设备发送数据。...当一个 TAP 设备被创建时,在 Linux 设备文件目录下会生成一个对应的字符设备文件,用户程序可以像打开一个普通文件一样对这个文件进行读写。...(2)Bridge Bridge 也是 Linux 内核实现的一个工作在二层的虚拟网络设备,但不同于 TAP/TUN 这种单端口的设备,Bridge 实现为多端口,本质上是一个虚拟交换机,具备和物理交换机类似的功能...总结 传统网络架构到虚拟化的网络架构,可以看作是宏观网络到微观网络的过渡 TAP/TUN/VETH、Bridge 这些虚拟的网络设备是 Linux 为了实现网络虚拟化而实现的网络设备模块,很多的云开源项目的网络功能都是基于这些技术做的
以 TUN/TAP 为代表的虚拟网卡地址,多为 V** 场景 以 eth1 为代表的多网卡场景,有钱就可以装多网卡了!...5 干扰因素二:TUN/TAP 虚拟网络设备 平时我们所说的虚拟网卡、虚拟机,大致都跟 TUN/TAP 有关。...因为我们常用的 V** 基本就是基于 TUN/TAP 搭建的,如果我们使用 TUN 设备搭建一个基于 UDP 的 V** ,那么整个处理过程可能是这幅样子: 5.3 TAP 工作原理 TAP...mktun --dev tun0 Mon Apr 29 22:23:31 2019 TUN/TAP device tun0 opened Mon Apr 29 22:23:31 2019 Persist...这里读者可能会有疑惑,使用 ifconfig 不是也可以创建 tap 和 tun 网卡吗?
第一部分:Xen Hypervisor,又称虚拟机监控程序(Virtual Machien Monitor简称VMM),VMM工作原有linux系统内核位置,替代了linux系统内核,用于虚拟CPU、Memeory...等; 第二部分:Xen Dom0,又称特殊区域;为vmm提供硬件驱动程序,用于协助vmm驱动各个底层硬件,同时又为Xen DomU提供模拟IO等功能;由于特殊原因Linux-2.6.37以后的内核才支持...或TAP实现 在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。...TAP等同 于一个以太网设备,它操作第二次数据包如以太网数据帧;TUN模拟了网络层设备,操作三层数据包比如IP数据包;操作系统通过TUN/TAP设备向绑定该 设备的用户空的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样...,通过TUN/TAP设备发送数据,在后中情况下,TUN/TAP设备向 操作系统的网络栈投递(或”注入”)数据包,从而模拟从外部接受数据报的过程。
Linux为了实现网络的虚拟化,为应用程序开了一个后门,这个后门叫做TUN/TAP。...我们先以TUN为例给大家看一下TUN的使用方法: 如图,在系统内添加一个设备tunX以后,应用程序可以以tunX设备为抓手,应用read和write等方法论,拉通其他socket API的资源 (以上不小心用了黑话...利用TUN或TAP,可以将数据包封装进入自定义的隧道,如下图: 如图,红色箭头代表来自真正应用程序的流量,payload通过操作系统socket API,进入协议栈被依次封装上UDP,IP和以太网包头...另一个APP通过TUN,从内核取出这个数据包(不包含以太网二层头),进行加工后再通过UDP Socket发出去。这样,最终被发到线路上的数据包就成了一个有着外层头的隧道数据包。...虽然在Linux中,VM,TAP,VETH Pair等都是软件实现的虚拟设备,但只要没有忘记设计网络的初心,会发现,在Linux下或其他环境中的虚拟化网络,与最初经典的网络,其本质是别无二致的。
第一部分:Xen Hypervisor,又称虚拟机监控程序(Virtual Machien Monitor简称VMM),VMM工作原有linux系统内核位置,替代了linux系统内核,用于虚拟CPU、Memeory...等; 第二部分:Xen Dom0,又称特殊区域;为vmm提供硬件驱动程序,用于协助vmm驱动各个底层硬件,同时又为Xen DomU提供模拟IO等功能;由于特殊原因Linux-2.6.37以后的内核才支持...或TAP实现 在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。...TAP等同于一个以太网设备,它操作第二次数据包如以太网数据帧;TUN模拟了网络层设备,操作三层数据包比如IP数据包;操作系统通过TUN/TAP设备向绑定该设备的用户空的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样...,通过TUN/TAP设备发送数据,在后中情况下,TUN/TAP设备向操作系统的网络栈投递(或"注入")数据包,从而模拟从外部接受数据报的过程。
以虚拟机发出流量方向为例,从虚拟机处开始分析: 1)流量经由虚拟机IP内核交给虚拟网卡处理,虚拟网卡由TAP软件实现,TAP允许用户态程序向内核协议栈注入数据,它可以运行于虚拟机操作系统之上,能够提供与硬件以太网卡完全相同的功能...2)TAP设备并不是直接连接到OVS上的,而是通过linux bridge中继到ovs br-int上,其原因在于ovs无法实现linux bridge中一些带状态的iptables规则,而这些规则往往用于以虚拟机为单位的安全组...veth-pair与tap的区别可以简单理解为veth-pair是软件模拟的网线,而tap是软件模拟的网卡。...Overlay模型中ovs br-tun通过TUN设备对数据包进行外层隧道封装并送到HyperVisor内核中,内核根据外层IP地址进行选路,从硬件网卡eth1将数据包送到物理网络中。...TUN与TAP的实现机制类似,区别在于TAP工作在二层,而TUN工作在三层。 ? 第二张图和第三张图是网络节点上的网络实现,需要结合在一起来看。
领取专属 10元无门槛券
手把手带您无忧上云