对Linux虚拟网络的学习
为了学习neutron而补充虚拟网络的相关知识。
TAP
tap是linux操作系统内核中的虚拟网络设备。tap是二层虚拟设备。而这背后指的是一个类似于类似于数据解耦股、内核模块或设备驱动这样的含义。
tap的数据结构如下:
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从功能上讲,属于数据链路层。数据链路层的协议主要有:
- 点对点协议
- 以太网
- 高级数据链路协议
- 帧中继
- 异步传输模式
namespace
linux中很多资源是全局有效的。进程id这类的资源就是例子。而namespace会把这些资源进行隔离,单独在这个namespace里是全局的,不同的namespace中的资源是不相互可见的。
Linux namespace 实现了 6 项资源隔离,基本上涵盖了一个小型操作系统的运行要素,包括主机名、用户权限、文件系统、网络、进程号、进程间通信。
不同namespace中的设备可以利用veth pair 进行桥接。
veth pair
veth pair 是一对设备,连接两个虚拟以太端口。veth pair 要和namespace一起使用,不然没有意义。
Bridge
在linux中,bridge与switch是一个概念。
router
linux本身就是个路由器,只不过要打开ip_forward。
tun
隧道技术,是网络层(ip)的点对点设备,它启用了IP层隧道功能。Linux原生支持的三层隧道。
iptables
IPtables也是在linux中的一个软件。通过iptables可以实现防火墙、NAT等功能。实质上,iptables相关的命令行是调用了内核空间的netfilter模块。关系图如下。