帝游网提供最新手游APP下载和游戏攻略!

Linux Tun/Tap 简介

发布时间:2024-10-17浏览:74

大家好,感谢邀请,今天来为大家分享一下Linux Tun/Tap 简介的问题,以及和的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

操作系统通过TUN/TAP设备向与设备绑定的用户空间程序发送数据。反之,用户空间程序也可以像操作硬件网络设备一样通过TUN/TAP设备发送数据。在后一种情况下,TUN/TAP 设备将数据包传递(或“注入”)到操作系统的网络堆栈中,从而模拟从外部接收数据的过程。

应用程序如何操作Tun/Tap

Linux Tun/Tap 驱动程序为应用程序交互提供了两种方式:虚拟网络接口和字符设备/dev/net/tun。写入字符设备/dev/net/tun的数据将被发送到虚拟网络接口;发送到虚拟网络接口的数据也会出现在字符设备上。

应用程序可以通过标准的Socket API向Tun/Tap接口发送IP数据包,就像操作真实的网卡一样。除了应用程序之外,操作系统还会根据TCP/IP协议栈的处理,向Tun/Tap接口发送IP数据包或以太网数据包,如ARP或ICMP数据包。 Tun/Tap驱动会将Tun/Tap接口接收到的数据包原样写入到/dev/net/tun字符设备中。处理Tun/Tap 数据的应用程序(例如VPN 程序)可以从此设备读取。对数据包进行适当的处理。

应用程序还可以通过/dev/net/tun字符设备写入数据包。这样的话,写入到字符设备上的数据包就会被发送到Tun/Tap虚拟接口,进入操作系统的TCP/IP协议。堆栈会相应地处理它,就像数据从物理网卡进入操作系统一样。

Tun虚拟设备与物理网卡的区别在于Tun虚拟设备是IP层设备。从/dev/net/tun字符设备读取的是IP数据包,写入的只能是IP数据包,所以无法进行二次处理。层操作,例如发送ARP 请求和以太网广播。而Tap虚拟设备是以太网设备,处理二层以太网数据帧。它从/dev/net/tun字符设备读取以太网数据帧,并且只能写入以太网数据帧。从这一点来看,Tap虚拟设备和真实物理网卡的能力更加接近。

下图描述了Tap/Tun 的工作原理:

使用Tun/Tap 创建点对点隧道

通过应用程序从/dev/net/tun字符设备读取或写入数据似乎没有多大用处,但是通过将Tun/Tap与物理网络设备一起使用,我们可以创建点对点隧道。如下图所示,左侧主机上的应用程序发送到Tun虚拟设备的IP数据包,通过字符设备被VPN程序接收,然后通过TCP或UDP发送到右侧的VPN服务器隧道。 V* *服务器将隧道负载中的原始IP数据包写入字符设备,这些IP数据包会出现在右侧的Tun虚拟设备上,最终通过操作系统协议栈发送给右侧的应用程序和套接字接口。

上图中的隧道也可以使用Tap虚拟设备来实现。如果使用Tap,隧道的负载将是以太网数据帧而不是IP数据包,并且还会传输ARP等广播包。

使用Tun/Tap 隧道绕过防火墙

使用Tap 隧道桥接两个远程站点

如下图所示,tap可以用来建立二层隧道,将两个远端站点桥接起来,形成一个局域网。对于两个站点的主机来说,访问对方站点的主机和本地站点的主机的方式没有区别。它们都在同一个LAN 192.168.0.0/24 中。

VPN主机上有两张物理网卡,其中Eth0用于与对方站点的VPN主机通信并建立隧道。当Eth1通过网线连接到以太网交换机时,它也被添加到Linux Bridge中。这相当于使用网线将Linux Bridge上的一个端口(Eth1)连接到本地站点的以太网交换机。 Eth1收到的所有数据包都会发送到Linux Bridge,Linux Bridge发送到Eth1的数据包也会发送到以太网交换机。 Linux Bridge上还有一个Tap虚拟网卡,VPN程序用它来接收从Linux Bridge收到的数据包。

假设192.168.0.5向192.168.0.3发送ARP请求。 ARP请求在网络中的路径如下:

192.168.0.5 发送ARP 请求,询问192.168.0.3 的MAC 地址。

ARP 请求将被发送到以太网交换机。

以太网交换机将请求洪泛到其所有端口,包括Eth1。

由于VPN主机上的Linux Bridge添加了Eth1,因此Linux Bridge会收到ARP请求。

Linux Bridge 泛洪ARP 请求并将其发送到与其连接的Tap 虚拟网卡。

VPN程序通过/dev/net/tun字符设备读取ARP请求,然后封装成TCP/UDP报文发送给对端VPN主机。

对端VPN程序通过监听TCP/UDP端口接收封装后的ARP请求,并通过/dev/net/tun字符设备将ARP请求写入Tap设备。

Linux Bridge 泛洪并将ARP 请求发送到Eth1。由于Eth1与以太网交换机相连,因此以太网交换机会收到ARP请求。

以太网交换机向所有主机(包括192.168.0.3)泛洪并发送ARP 请求。

192.168.0.3收到APR请求,判断该IP地址与自己相同,并响应该请求。

同理,ARP响应报文也可以沿着这条路径返回到图中左侧的192.168.0.5站点。

从站点主机的角度来看,上图中两台VPN主机之间的远程连接可以看作是一条虚拟网线,连接了两个Linux Bridge。这两个Linux Bridge和两个以太网交换机将左右站点的主机连接在一起,形成一个局域网。

用户评论

◆残留德花瓣

刚学完Linux网络基础,看到“Tun/Tap”这个词,感觉很新奇啊!这篇博文解释得很详细,帮助我理解了其工作原理和应用场景,原来如此灵活的网络设备控制方式!

    有14位网友表示赞同!

敬情

学习linux开发确实需要了解这些深入的技术概念。Tun/Tap的使用场景的确非常广泛,尤其是虚拟机和VPN方面的应用就让我感觉很有趣啊!要好好研究一下这篇文章.

    有5位网友表示赞同!

葵雨

太棒了!终于找到一篇清晰的介绍Linux Tun/Tap的文章,以前一直在网上搜寻但大多是英文解释很难理解。 这篇文章用通俗易懂的语言讲解了许多关键概念,非常感谢作者!

    有13位网友表示赞同!

淡淡の清香

没想到Linux内核里还有这么厉害的技术工具啊!这篇文章让我对Tun/Tap有了更系统的了解,尤其是在网络安全方面应用简直太牛了,以后有机会一定要深入学习一下!

    有10位网友表示赞同!

浅嫣婉语

我一直以为Tun/Tap是比较高深的技术,看了这篇文章才知道原来并不复杂。博主解释得很到位,图文并茂,很容易理解。我现在对Linux虚拟网络的搭建更有信心了!

    有19位网友表示赞同!

你是梦遥不可及

以前一直在使用Windows平台的VPN软件,这次尝试用Linux环境搭建VPN连接,却遇到了一些困难。幸好找到这篇介绍Tun/Tap的文章,现在终于明白了如何配置好虚拟网络界面,太感谢作者了!

    有5位网友表示赞同!

?娘子汉

文章介绍得非常全面,涵盖了Tun/Tap的基本概念、工作原理以及常见的应用场景,受益匪浅!以后学习Linux网络编程时应该会经常用到这些知识点。

    有8位网友表示赞同!

揉乱头发

这篇文章对于那些想深入了解Linux内核的人来说很有用处,但是对于新手来说有些过于专业了,我希望博主可以提供一些更简单的入门教程。

    有13位网友表示赞同!

非想

太长了!我主要看Tun/Tap的如何使用,结果文章开篇就聊了一大段理论。能直接点入实际操作步骤就好了!

    有9位网友表示赞同!

傲世九天

这篇文章的代码例子用的是什么语言?感觉有点眼花缭乱,希望博主可以提供一些更通俗易懂的讲解方式。

    有15位网友表示赞同!

↘▂_倥絔

我刚开始学习Linux内核,这篇关于虚拟网络的文章确实很有帮助。但是我觉得对于初学者来说,介绍每个概念的时候可以用更多的图示来辅助理解。

    有20位网友表示赞同!

盲从于你

虽然文章写得很详细,但没有提供一些实际案例和使用场景讲解,对我的理解效果有限,希望博主可以补充相关的实战经验分享。

    有17位网友表示赞同!

陌颜

我尝试按照文章中的步骤配置Tun/Tap设备,但是一直报错,不知道是什么问题。能不能请博主帮忙解决一下?

    有10位网友表示赞同!

麝香味

这篇文章很有用!我之前在虚拟机测试环境中遇到了一些网络连接的问题,经过阅读后终于明白了是怎么回事。现在可以顺利进行测试了,感谢作者分享!

    有17位网友表示赞同!

热点资讯