通用TUNTAP设备驱动

通用TUNTAP设备驱动,第1张

原文 Universal TUN/TAP device driver

TUN/TAP为用户空间提供分组接收和传输。既可以看作一个Point-to-Point设备,也可以看做一个Ethernet设备。它从用户空间程序接收分组,而不是从物理媒介;将分组写入用户空间程序而不是通过物理媒介。

一个程序打开/dev/net/tun字符型文件,并向内核发出ioctl()来注册一个网络设备。根据选项,这个网络设备将显示为tunXX或者tapXX。当程序关闭文件描述符时,这个网络设备和所有对应的路由都将关闭。

用户空间程序read/write IP数据包(通过tun)还是以太网帧(通过tap),取决于选择的设备类型。正在使用哪一个取决于ioctl()设置的flag。

http://vtun.sourceforge.net/tun 下的软件包包含两个简单的示例,介绍如何使用tun和tap设备。两个示例的工作原理都像在两个网络接口之间的桥一样。

另外,最好的例子来源于VTun( http://vtun.sourceforge.net ) :))

创建设备节点:

设置权限:

驱动程序模块自动加载:

确保内核启用了“内核模块加载器” - 模块自动加载支持。 内核应该在第一次访问时加载它。

手动加载:

后一种方法,每次当你需要使用模块的时候,你都需要加载它。另一种方法将在你打开/dev/net/tun的时候自动加载。

设备的名称 char *dev 是具有格式的字符串(e.g. "tun%d"),也可以是任何有效的网络设备名称。注意,字符指针将会被真实网络设备名覆盖。

如果 IFF_NO_PI 标志没有被设置,每一帧格式如下:

从3.8版开始,Linux支持多队列tuntap,它可以使用多个文件描述符(队列)来并行发送或接收数据包。 设备分配与以前相同,如果用户想要创建多个队列,则必须使用IFF_MULTI_QUEUE标志多次调用具有相同设备名称的TUNSETIFF。

char *dev 是设备的名称, queues 是要创建的队列数, fds 用于存储和返回创建给调用者的文件描述符(队列)。 每个文件描述符都作为一个队列的接口,可以被用户空间访问。

引入了一个新的 ioctl(TUNSETQUEUE) 来启用或禁用队列。 当用 IFF_DETACH_QUEUE 标志调用它时,队列被禁用。 当用 IFF_ATTACH_QUEUE 标志调用它时,队列被启用。 通过 TUNSETIFF 创建队列后,队列默认启用。

fd是我们想要启用或禁用的文件描述符(队列),当enable为真时,我们启用它,否则我们禁用它

虚拟机中的网络设置要设为:vmnet0为自动桥连,主机系统里IP地址手动设为和PLC一个频段,然后把虚拟机中的网络IP也设为和PLC一个频段,但是三个IP不要冲突。然后虚拟机中选择以太网就可以连接了。

TUN与TAP是操作系统内核中的虚拟网络设备。

TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。

TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。

统一来讲就是,服务器如果拥有TUN/TAP模块,就可以开启VPN功能。

网桥,就是将两个局域网(LAN)连起来,根据MAC地址(物理地址)来转发帧,可以看作一个“低层的路由器”。

网桥通常用于联接数量不多的、同一类型的网段。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/735900.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-12
下一篇2023-08-12

发表评论

登录后才能评论

评论列表(0条)

    保存