Super Blog

Super Blog

马上订阅 Super Blog RSS 更新: https://superpung.com/atom.xml

实训小记

2022年6月18日 11:15

简单记录一下一个多月的“实训”。

1 Linux 虚拟网络基础

1.1 tap

tap 和 tun 是操作系统内核中的虚拟网络设备,tap 位于二层,tun 位于三层。它们的数据结构如下:

1
2
3
4
5
6
7
8
9
struct tun_struct {
char name[8]; // 设备名
unsigned long flags; // 区分tun和tap设备
struct fasync_struct *fasync; // 文件异步通知结构
wait_queue_head_t read_wait; // 等待队列
struct net_device dev; // Linux抽象网络设备结构
struct sk_buff_head txq; // 网络缓冲区队列
struct net_device_stats stats; // 网卡状态信息结构
};

tap 和 tun 的数据结构定义相同,两者仅通过一个 Flag 来区分。但二者承载的功能区别很大:

  • tap 位于网络 OSI 模型的二层(数据链路层)
  • tun 位于网络的三层

tap 从功能定位上来讲,位于数据链路层,数据链路层的主要协议有:

  1. 点对点协议(Point-to-Point Protocol)
  2. 以太网(Ethernet)
  3. 高级数据链路协议(High-Level Data Link Protocol)
  4. 帧中继(Frame Relay)
  5. 异步传输模式(Asynchronous Transfer Mode)

tap 只与其中一种协议——以太网(Ethernet)协议对应。所以 tap 有时也称为“虚拟以太设备”。

创建 tap 的方法:

  1. Linux 使用 tun 模块实现了 tun/tap,所以首先 Linux 得有 tun 模块,使用 modinfo tun 检查
  2. 使用 lsmod | grep tuntun 检查 tun 模块是否已经加载
  3. 确认 Linux 是否有操作 tun/tap 的命令行工具 tunctl,安装方式 yum install tunctl
  4. 创建一个 tap 设备:tunctl -t tap_test
  5. 查看刚刚创建的 tap:ip...

剩余内容已隐藏

查看完整文章以阅读更多