对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从功能上讲,属于数据链路层。数据链路层的协议主要有:

  1. 点对点协议
  2. 以太网
  3. 高级数据链路协议
  4. 帧中继
  5. 异步传输模式

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模块。关系图如下。

 

posted @ 2019-03-11 15:41  L1m1t  阅读(207)  评论(0编辑  收藏  举报