tun/tap设备浅析(一)--原理浅析

author author     2023-04-01     644

关键词:

参考技术A

TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便地模拟网络行为。 TUN 模拟的是一个三层设备,也就是说,通过它可以处理来自网络层的数据,更通俗一点的说,通过它,我们可以处理 IP 数据包。

先来看看物理设备是如何工作的:

上图中的 eth0 表示我们主机已有的真实的网卡接口 ( interface )。

网卡接口 eth0 所代表的真实网卡通过网线( wire )和外部网络相连,该物理网卡收到的数据包会经由接口 eth0 传递给内核的网络协议栈( Network Stack )。然后协议栈对这些数据包进行进一步的处理。

对于一些错误的数据包,协议栈可以选择丢弃;对于不属于本机的数据包,协议栈可以选择转发;而对于确实是传递给本机的数据包,而且该数据包确实被上层的应用所需要,协议栈会通过 Socket API 告知上层正在等待的应用程序。

下面看看 TUN 的工作方式:

我们知道,普通的网卡是通过网线来收发数据包的话,而 TUN 设备比较特殊,它通过一个文件收发数据包。

如上图所示, tunX 和上面的 eth0 在逻辑上面是等价的, tunX 也代表了一个网络接口,虽然这个接口是系统通过软件所模拟出来的.

网卡接口 tunX 所代表的虚拟网卡通过文件 /dev/tunX 与我们的应用程序(App) 相连,应用程序每次使用 write 之类的系统调用将数据写入该文件,这些数据会以网络层数据包的形式,通过该虚拟网卡,经由网络接口 tunX 传递给网络协议栈,同时该应用程序也可以通过 read 之类的系统调用,经由文件 /dev/tunX 读取到协议栈向 tunX 传递的 所有 数据包。

此外,协议栈可以像操纵普通网卡一样来操纵 tunX 所代表的虚拟网卡。比如说,给 tunX 设定 IP 地址,设置路由,总之,在协议栈看来, tunX 所代表的网卡和其他普通的网卡区别不大,当然,硬要说区别,那还是有的,那就是 tunX 设备不存在 MAC 地址,这个很好理解, tunX 只模拟到了网络层,要 MAC 地址没有任何意义。当然,如果是 tapX 的话,在协议栈的眼中, tapX 和真是网卡没有任何区别。

如果我们使用 TUN 设备搭建一个基于 UDP VPN ,那么整个处理过程可能是这幅样子:

首先,我们的应用程序通过 eth0 和远程的 UDP 程序相连,对方传递过来的 UDP 数据包经由左边的协议栈传递给了应用程序, UDP 数据包的内容其实是一个网络层的数据包,比如说 IP 数据报,应用程序接收到该数据包的数据(剥除了各种头部之后的 UDP 数据)之后,然后进行一定的处理,处理完成后将处理后的数据写入文件 /dev/tunX ,这样,数据会第二次到达协议栈。需要注意的是,上图中绘制的两个协议栈其实是同一个协议栈,之所以这么画是为了叙述的方便。

TAP 设备与 TUN 设备工作方式完全相同,区别在于:

最后,关于文章中出现的二层,三层,我这里说明一下,第一层是物理层,第二层是数据链路层,第三层是网络层,第四层是传输层。

参考文章:
[1]. https://blog.kghost.info/2013/03/27/linux-network-tun/

通用tun/tap设备驱动

...户空间提供分组接收和传输。既可以看作一个Point-to-Point设备,也可以看做一个Ethernet设备。它从用户空间程序接收分组,而不是从物理媒介;将分组写入用户空间程序而不是通过物理媒介。一个程序打开/dev/net/tun字符型文件,... 查看详情

web开发,click,touch,tap事件浅析

...点击。二、关于tap的点透处理在使用zepto框架的tap来移动设备浏览器内的点击事件,来规避click事件的延迟响应时,有可能出现点透的情况,即点击会触发非当前层的点击事件。处理方式 查看详情

移动端web开发,click,touch,tap事件浅析

...点击。二、关于tap的点透处理在使用zepto框架的tap来移动设备浏览器内的点击事件,来规避click事件的延迟响应时,有可能出现点透的情况,即点击会触发非当前层的点击事件。处理方式 查看详情

gps定位基本原理浅析(代码片段)

...务已经成为越来越热的一门技术,也将成为以后所有移动设备(智能手机、掌上电脑等)的标配。而定位导航技术中,目前精度最高、应用最广泛的,自然非GPS莫属了。网络上介绍GPS原理的专业资料很多,而本文试图从编程人员... 查看详情

linux下tun/tap怎么安装

参考技术A可以yuminstallopenvpn可搜搜openvpn,在rpmforge这个仓库里有,其他也有。官网也有来自:求助得到的回答 参考技术A这是内核模块,需要编译内核。本回答被提问者采纳 查看详情

linux网络工具详解之iptuntap和tunctl创建tap/tun设备(代码片段)

...本文将介绍如何使用工具tunctl和iptuntap来创建并使用tap/tun设备。tunctl安装首先在centos的环境中安装tunctl。[[email protected]~]#vim/etc/yum.repos.d/nux-misc.repo[nux-misc]name=NuxMiscbaseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/enabled=0gpgcheck=1gpgkey=h... 查看详情

centos下使用tun/tap虚拟网卡的基本教程

在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。TAP等同于一个以... 查看详情

fresco原理浅析

...地存储图片方面遇到了很多问题。图片所需空间很大,而设备上空间很小。每个像素占用4个字节,分别为红、绿、蓝和α透明度。如果一个手机的屏幕尺寸是480*800像素,一张全屏的图片就占用1.5MB的内存。通常手机的内存很少,... 查看详情

硬货|利用linuxtap/tun虚拟设备写一个icmpecho程序(代码片段)

...01准备工作首先通过modinfotun查看系统内核是否支持tap/tun设备驱动。[[email 查看详情

浅析aidl的使用和工作原理(代码片段)

AIDL是一种接口定义语言,用于生成可在Android设备上两个进程之间进行进程间通信(IPC)的代码。AIDL的使用新建一个aidl文件,定义进程间通信的接口//IStudentManager.aidlpackagecom.tellh.androidart;//Declareanynon-defaulttypesherewithimportstatem... 查看详情

thrift原理浅析

RPC原理RPC(RemoteProcedureCall )远程调用过程。1.定义了一个接口文件,描述了对象,对象成员,接口方法等一系列信息。2.通过RPC框架提供的编译器,将接口说明文件编译成对应的语言文件。2.在客户端和服务端分别引用RPC编译器生... 查看详情

比特币深层技术原理浅析

摘要:这是一篇主要针对技术小白的文章。本文尽量使用通俗易懂但又不失要义的文字,带你深入剖析当前备受追捧的比特币背后的深层技术原理,最后会简要介绍一下业界市场的现状。这是一篇主要针对技术小白的文章。本文... 查看详情

kubernetes网络自学系列|给用户态一个机会:tun/tap设备

...总_COCOgsta的博客-CSDN博客1.4给用户态一个机会:tun/tap设备我们在1.3节讲解Linuxbridge时就向读者介绍过tun/tap设备,并强调tun/tap设备在虚拟机的组网过程中起到作用。但促使我们用一节的篇幅介绍它的另一个原因是:tun/t... 查看详情

中断浅析

...和陷阱0~31对应异常和非屏蔽中断32~47对应屏蔽中断(即I/O设备引起的中断)47~255对应软中断,软中断?其中128号即0x80用于实现系统调用中断描述符表IDT实地址模式下原来的中断向量表被由于具体位数的变化,名称也变为... 查看详情

浅析c#dictionary实现原理(代码片段)

一、前言二、理论知识1、Hash算法2、Hash桶算法3、解决冲突算法三、Dictionary实现1.Entry结构体2.其它关键私有变量3.Dictionary-Add操作4.Dictionary-Find操作5.Dictionary-Remove操作6.Dictionary-Resize操作(扩容)7.Dictionary-再谈Add操作8.Collection版本控... 查看详情

javascript自执行匿名函数(function(){})()的原理浅析

...章主要介绍了Javascript自执行匿名函数(function(){})()的原理浅析的相关资料,需要的朋友可以参考下函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途。匿名函数指没有指定函数名或指针的函数,自执行匿名函数... 查看详情

浅析kubernetes的工作原理

转至 https://www.cnblogs.com/163yun/p/9518901.html 先放一张Kubernetes的架构图:    整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解... 查看详情

易语言算法原理浅析

注:如果你看完了下面的文章。就来试试这个KeyGenMe吧,相信你能有所收获。http://www.52pojie.cn/thread-540179-1-1.html 一、文章开头首先我们要贴上一段易语言代码,并且编译这段代码,从汇编角度分析易语言程序编译后,易语言... 查看详情