TUN/TAB-设备
简介 TUN 和 TAP
TUN (Network Tunnel) 和 TAP (Network Adapter)
共同点:
- 两种都是虚拟网络设备, 用于在操作系统级别上模拟网络接口.
- 都可以捕获、处理和转发网络数据包
不同点:
- 设备类型: TAP 设备模拟以太网适配器, 而TUN设备模拟点对点网络连接
- 数据包封装: TAP 设备以太网帧级别处理数据包, 而 TUN 设备将数据包封装在 IP 包中
- 适用协议: TAP 设备适用于以太网协议, 可以处理各种上层协议 (如 TCP/IP, UDP 等), TUN 设备适用于 IP 协议, 常用于创建 IP 隧道, 如 IPSec VPN
- 使用场景: TAP 设备通常用于虚拟局域网 (VLAN) 和网络桥接, 用于连接不同物理网络的主机. TUN 设备通常用于创建安全的点对点连接, 如 VPN 隧道
且 TUN 设备没有 MAC 地址, 而 TAP 设备有.
关于为什么 TUN 没有 MAC 地址
其工作在网络层, 负责运输 IP 数据包.
物理网卡和虚拟网卡
物理网卡的一端是内核空间的网络协议栈, 另一端是外接网络, 其以比特流传输数据, 可以:
- 接受外部网络发送给主机的数据, 并传输给内核协议栈处理
- 将在内核协议栈中封装好的数据包对外发送
这里内核和用户空间之间的数据传递由 CPU 负责.
虚拟网卡的一端为内核网络协议栈, 另一端为用户空间, 其直接在内存中拷贝数据, 负责内核网络协议栈和用户空间的程序之间传递数据.
即, 物理网卡, 工作在数据链路层, 负责实现物理层和数据链路层之间的接口, 处理以太网帧, MAC 地址等网络数据.
而虚拟网卡在不同的 OSI 模型层级上工作:
- 虚拟以太网适配器通常工作在数据链路层, 模拟物理以太网接口, 并负责处理以太网帧, MAC 地址等数据链路层操作
- 虚拟隧道适配器工作在网络层, 负责封装和解封装网络层数据, 用于构建 VPN 或其他隧道连接
- 虚拟回环适配器工作在网络层, 模拟回环接口, 用于本地主机内部的网络通信
两者的主要区别在于: 物理网卡以比特流的方式传输数据.
都可以配置 IP 地址, 设置子网掩码等.
注意: 虚拟网卡不具备物理网卡以比特流方式传输数据的硬件功能, 所以, 绝不可能通过虚拟网卡向外界发送数据, 外界数据也不可能直接发送到虚拟网卡上. 能够直接收发外界数据的, 只能是物理设备.
另一点: 用户空间的程序是无法对数据包做任何封装和解封操作的, 所有的封装和解封都只能由内核的网络协议栈来完成.
对于 VPN 额外添加封装而言, 其原理为: 每一次由用户空间程序进行的额外封装, 都意味着数据要从内核空间到用户空间, 再到内核空间.
系统代理
如 http/socks5 系统代理, 在代理软件中设置为接管系统代理后, 遵循系统代理的软件就会把流量交给当前系统代理处理.
但并不是所有的软件都遵循系统代理, 除浏览器外, 绝大多数软件其实都不支持系统代理.
TUN/TAP 模式代理
TUN/TAP 模式代理的原理是创建一张虚拟网卡, 从网络层接管所有流量. (此时主要是修改了路由表)
数据从那张网卡发出主要取决于路由表.