《深入理解OpenStack Neutron》—2 Linux虚拟网络基础

举报
华章计算机 发表于 2019/05/29 22:34:23 2019/05/29
【摘要】 本书摘自《深入理解OpenStack Neutron》一书中的第2章,第2.1节,作者是李宗标。

第2章

Linux虚拟网络基础

Neutron在构建网络服务时,利用了很多Linux虚拟网络功能(Linux内核中的虚拟网络设备以及其他网络功能)。为了对Neutron有一个全面的理解,掌握一些Linux虚拟网络知识是必要的。本章将从使用方法入手,对与Neutron密切相关的Linux虚拟网络功能进行简单介绍。

2.1 tap

Linux在谈到tap时,经常会与tun并列谈论。两者都是操作系统内核中的虚拟网络设备。tap位于二层,tun位于三层。需要说明的是,这里所说的设备(Device)是Linux的概念,不是我们平时生活中所说的设备。比如,生活中,我们常常把一台物理路由器称为一台设备,

如图2-1所示。

image.png

而Linux所说的设备,其背后指的是一个类似于数据结构、内核模块或设备驱动这样的含义。像tun/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与tun的定义都是同一个,两者仅仅是通过一个Flag来区分。不过从背后所承载的功能而言,两者还是有比较大的区别:tap位于网络OSI模型的二层(数据链路层),tun位于网络的三层。本节暂时只介绍tap,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有时也称为“虚拟以太设备”。

要想使用Linux命令行操作一个tap,首先Linux得有tun模块(Linux使用tun模块实现了tun/tap),检查方法如下:

# 如果敲击 Linux 命令行 modinfo tun,有如下输出,则说明具有 tun 模块

modinfo tun

filename:      /lib/modules/4.5.5-300.fc24.x86_64/kernel/drivers/net/tun.ko.xz

alias:          devname:net/tun

alias:          char-major-10-200

......

当Linux版本具有tun模块时,还得看看其是否已经加载,检查方法如下:

lsmod | grep tun

tun   28672  2

如果已经加载,则会出现上述的“tun***”那一行。如果没有加载,则使用如下命令进行加载:

modprobe tun

当我们确认Linux加载了tun模块以后,我们还需要确认Linux是否有操作tun/tap的命令行工具tunctl。在Linux中输入以下命令:

tunctl help

输入这个命令后,如果Linux有输出,则说明OK,否则我们执行如下命令行以安装tunctl:

yum install tunctl

具备了tun和tunctl以后,我们就可以创建一个tap设备了,命令行也很简单,如下:

tunctl -t tap_test

Set 'tap_test' persistent and owned by uid 0

我们可以通过如下命令来查看刚刚创建的tap(名字是tap_test):

ip link list

...

13: tap_test: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT 

    group default qlen 1000

link/ether 2e:72:30:19:4e:bb brd ff:ff:ff:ff:ff:ff

我们也可以通过如下命令来查看:

ifconfig -a

...

tap_test: flags=4098<BROADCAST,MULTICAST>  mtu 1500

ether 2e:72:30:19:4e:bb  txqueuelen 1000  (Ethernet)

...

通过上面的命令行输出,我们看到,这个tap_test还没有绑定IP地址。执行如下命令,给其绑定IP地址:

# 使用 ip addr 命令绑定 IP 地址命令

ip addr add local 192.168.100.1/24 dev tap_test

# 或者使用 ifconfig 命令绑定 IP 地址命令

ifconfig tap_test 192.168.100.1/24

使用ifconf?ig -a命令再查看一下:

ifconfig -a

......

tap_test: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

        inet 192.168.100.1  netmask 255.255.255.0  broadcast 0.0.0.0

        ......

配置完IP以后,一个tap设备就创建完毕了。我们会在后面的章节中通过测试用例,继续讲述tap的用法。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。