- 深入理解OpenStack Neutron
- 李宗標(biāo)
- 116字
- 2019-01-04 06:09:56
第2章 Linux虛擬網(wǎng)絡(luò)基礎(chǔ)
Neutron在構(gòu)建網(wǎng)絡(luò)服務(wù)時(shí),利用了很多Linux虛擬網(wǎng)絡(luò)功能(Linux內(nèi)核中的虛擬網(wǎng)絡(luò)設(shè)備以及其他網(wǎng)絡(luò)功能)。為了對(duì)Neutron有一個(gè)全面的理解,掌握一些Linux虛擬網(wǎng)絡(luò)知識(shí)是必要的。本章將從使用方法入手,對(duì)與Neutron密切相關(guān)的Linux虛擬網(wǎng)絡(luò)功能進(jìn)行簡(jiǎn)單介紹。
2.1 tap
Linux在談到tap時(shí),經(jīng)常會(huì)與tun并列談?wù)摗烧叨际遣僮飨到y(tǒng)內(nèi)核中的虛擬網(wǎng)絡(luò)設(shè)備。tap位于二層,tun位于三層。需要說明的是,這里所說的設(shè)備(Device)是Linux的概念,不是我們平時(shí)生活中所說的設(shè)備。比如,生活中,我們常常把一臺(tái)物理路由器稱為一臺(tái)設(shè)備,如圖2-1所示。

圖2-1 一臺(tái)路由器設(shè)備
而Linux所說的設(shè)備,其背后指的是一個(gè)類似于數(shù)據(jù)結(jié)構(gòu)、內(nèi)核模塊或設(shè)備驅(qū)動(dòng)這樣的含義。像tun/tap這樣的設(shè)備,它的數(shù)據(jù)結(jié)構(gòu)如下:
struct tun_struct { char name[8]; //設(shè)備名 unsigned long flags; //區(qū)分tun和tap設(shè)備 struct fasync_struct *fasync; //文件異步通知結(jié)構(gòu) wait_queue_head_t read_wait; //等待隊(duì)列 struct net_device dev; //Linux抽象網(wǎng)絡(luò)設(shè)備結(jié)構(gòu) struct sk_buff_head txq; //網(wǎng)絡(luò)緩沖區(qū)隊(duì)列 struct net_device_stats stats; //網(wǎng)卡狀態(tài)信息結(jié)構(gòu) };
我們看到,甚至連數(shù)據(jù)結(jié)構(gòu),tap與tun的定義都是同一個(gè),兩者僅僅是通過一個(gè)Flag來區(qū)分。不過從背后所承載的功能而言,兩者還是有比較大的區(qū)別:tap位于網(wǎng)絡(luò)OSI模型的二層(數(shù)據(jù)鏈路層), tun位于網(wǎng)絡(luò)的三層。本節(jié)暫時(shí)只介紹tap, tun會(huì)在后面的章節(jié)專門介紹。
tap從功能定位上來講,位于數(shù)據(jù)鏈路層,數(shù)據(jù)鏈路層的主要協(xié)議有:
1)點(diǎn)對(duì)點(diǎn)協(xié)議(Point-to-Point Protocol);
2)以太網(wǎng)(Ethernet);
3)高級(jí)數(shù)據(jù)鏈路協(xié)議(High-Level Data Link Protocol);
4)幀中繼(Frame Relay);
5)異步傳輸模式(Asynchronous Transfer Mode)。
但是tap只是與其中一種協(xié)議以太網(wǎng)(Ethernet)協(xié)議對(duì)應(yīng)。所以,tap有時(shí)也稱為“虛擬以太設(shè)備”。
要想使用Linux命令行操作一個(gè)tap,首先Linux得有tun模塊(Linux使用tun模塊實(shí)現(xiàn)了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 ......
當(dāng)Linux版本具有tun模塊時(shí),還得看看其是否已經(jīng)加載,檢查方法如下:
lsmod | grep tun tun 28672 2
如果已經(jīng)加載,則會(huì)出現(xiàn)上述的“tun***”那一行。如果沒有加載,則使用如下命令進(jìn)行加載:
modprobe tun
當(dāng)我們確認(rèn)Linux加載了tun模塊以后,我們還需要確認(rèn)Linux是否有操作tun/tap的命令行工具tunctl。在Linux中輸入以下命令:
tunctl help
輸入這個(gè)命令后,如果Linux有輸出,則說明OK,否則我們執(zhí)行如下命令行以安裝tunctl:
yum install tunctl
具備了tun和tunctl以后,我們就可以創(chuàng)建一個(gè)tap設(shè)備了,命令行也很簡(jiǎn)單,如下:
tunctl -t tap_test Set 'tap_test' persistent and owned by uid 0
我們可以通過如下命令來查看剛剛創(chuàng)建的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) ...
通過上面的命令行輸出,我們看到,這個(gè)tap_test還沒有綁定IP地址。執(zhí)行如下命令,給其綁定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
使用ifconfig -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以后,一個(gè)tap設(shè)備就創(chuàng)建完畢了。我們會(huì)在后面的章節(jié)中通過測(cè)試用例,繼續(xù)講述tap的用法。
- Aptana Studio Beginner's Guide
- 物聯(lián)網(wǎng)關(guān)鍵技術(shù)及應(yīng)用
- 新一代物聯(lián)網(wǎng)架構(gòu)技術(shù):分層算力網(wǎng)絡(luò)
- WordPress 5 Complete
- NB-IoT物聯(lián)網(wǎng)技術(shù)解析與案例詳解
- Microservice Patterns and Best Practices
- 夢(mèng)工廠之材質(zhì)N次方:Maya材質(zhì)手冊(cè)
- 網(wǎng)絡(luò)綜合布線(第2版)
- 物聯(lián)網(wǎng)的機(jī)遇與利用
- Guide to NoSQL with Azure Cosmos DB
- 網(wǎng)絡(luò)安全之道
- 智慧城市中的物聯(lián)網(wǎng)技術(shù)
- 中國(guó)信息化年鑒2017
- 萬物互聯(lián):物聯(lián)網(wǎng)核心技術(shù)與安全
- Scala Programming Projects