Below you will find pages that utilize the taxonomy term “Tun”
May 24, 2022
Linux 中的 Tun/Tap 介绍
"\u003ch1 id=\"tuntap-设备\"\u003eTUN/TAP 设备\u003c/h1\u003e\n\u003cp\u003e在计算机中TUN与TAP是操作系统内核中的虚拟网络设备。不同于硬件设备这些虚拟的网络设备全部用软件实现,但提供了与硬件设备完全相同的功能。\u003c/p\u003e\n\u003cp\u003e我们先了解一下物理设备的工作原理\n\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2022/07/57e54aad529225723698841910e61c46.png\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e所有主机物理网卡收到的数据包时,会先将其交给内核的 Network Stack 处理,然后通过 Socket API 通知给用户态的用户程序。\u003c/p\u003e\n\u003cp\u003eLinux 中 \u003ccode\u003eTun/Tap\u003c/code\u003e 驱动程序为应用程序提供了两种交互方式:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e虚拟网络接口和字符设备 \u003ccode\u003e/dev/net/tun\u003c/code\u003e。写入字符设备 \u003ccode\u003e/dev/net/tun\u003c/code\u003e 的数据会发送到虚拟网络接口中;\u003c/li\u003e\n\u003cli\u003e发送到虚拟网络接口中的数据也会出现在该字符设备上;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e我们再看下 tun 设备的工作原理\n\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2022/07/ece6896a211da4167687ea55edc4f2c9.png\" alt=\"\"\u003e\u003c/p\u003e\n\u003cp\u003e用户态应用往字符设备 \u003ccode\u003e/dev/tunX\u003c/code\u003e 写数据时,写入的数据都会出现在TUN虚拟设备上,当内核发送一个包给 TUN 虚拟设备时,通过读这个字符设备 \u003ccode\u003e/dev/tunX\u003c/code\u003e 同样可以拿到包的内容。\u003c/p\u003e\n\u003cp\u003e用户态应用程序写数据到 \u003ccode\u003etun/tap\u003c/code\u003e 设备后进入内核态,内核态通过TCP协议复制到用户态,最后数据再次复制到内核态并通过物理网卡转发出去,期间共经历了三次用户态与内核态的复制 …\u003c/p\u003e"