自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

云計(jì)算 虛擬化
Linux的網(wǎng)絡(luò)虛擬化是LXC項(xiàng)目中的一個(gè)子項(xiàng)目,LXC包括文件系統(tǒng)虛擬化,進(jìn)程空間虛擬化,用戶虛擬化,網(wǎng)絡(luò)虛擬化,等等,這里使用LXC的網(wǎng)絡(luò)虛擬化來模擬多個(gè)網(wǎng)絡(luò)環(huán)境。

 Linux的網(wǎng)絡(luò)虛擬化是LXC項(xiàng)目中的一個(gè)子項(xiàng)目,LXC包括文件系統(tǒng)虛擬化,進(jìn)程空間虛擬化,用戶虛擬化,網(wǎng)絡(luò)虛擬化,等等,這里使用LXC的網(wǎng)絡(luò)虛擬化來模擬多個(gè)網(wǎng)絡(luò)環(huán)境。

[[265078]]

本文從基本的網(wǎng)絡(luò)設(shè)備講起,到具體實(shí)驗(yàn)環(huán)節(jié),希望能對(duì) Linux 本身的虛擬網(wǎng)絡(luò)環(huán)境有一個(gè)宏觀的了解。

TUN 設(shè)備

TUN 設(shè)備是一種虛擬網(wǎng)絡(luò)設(shè)備,通過此設(shè)備,程序可以方便得模擬網(wǎng)絡(luò)行為。先來看看物理設(shè)備是如何工作的:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

所有物理網(wǎng)卡收到的包會(huì)交給內(nèi)核的 Network Stack 處理,然后通過 Socket API 通知給用戶程序。下面看看 TUN 的工作方式:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

普通的網(wǎng)卡通過網(wǎng)線收發(fā)數(shù)據(jù)包,但是 TUN 設(shè)備通過一個(gè)文件收發(fā)數(shù)據(jù)包。所有對(duì)這個(gè)文件的寫操作會(huì)通過 TUN 設(shè)備轉(zhuǎn)換成一個(gè)數(shù)據(jù)包送給內(nèi)核;當(dāng)內(nèi)核發(fā)送一個(gè)包給 TUN 設(shè)備時(shí),通過讀這個(gè)文件可以拿到包的內(nèi)容。

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

數(shù)據(jù)包會(huì)通過內(nèi)核網(wǎng)絡(luò)棧兩次。但是經(jīng)過 App 的處理后,數(shù)據(jù)包可能已經(jīng)加密,并且原有的 ip 頭被封裝在 udp 內(nèi)部,所以第二次通過網(wǎng)絡(luò)棧內(nèi)核看到的是截然不同的網(wǎng)絡(luò)包。

TAP 設(shè)備

TAP 設(shè)備與 TUN 設(shè)備工作方式完全相同,區(qū)別在于:

TUN 設(shè)備的 /dev/tunX 文件收發(fā)的是 IP 層數(shù)據(jù)包,只能工作在 IP 層,無法與物理網(wǎng)卡做 bridge,但是可以通過三層交換(如 ip_forward)與物理網(wǎng)卡連通。

TAP 設(shè)備的 /dev/tapX 文件收發(fā)的是 MAC 層數(shù)據(jù)包,擁有 MAC 層功能,可以與物理網(wǎng)卡做 bridge,支持 MAC 層廣播

MACVLAN

有時(shí)我們可能需要一塊物理網(wǎng)卡綁定多個(gè) IP 以及多個(gè) MAC 地址,雖然綁定多個(gè) IP 很容易,但是這些 IP 會(huì)共享物理網(wǎng)卡的 MAC 地址,可能無法滿足我們的設(shè)計(jì)需求,所以有了 MACVLAN 設(shè)備,其工作方式如下:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

MACVLAN 會(huì)根據(jù)收到包的目的 MAC 地址判斷這個(gè)包需要交給哪個(gè)虛擬網(wǎng)卡。單獨(dú)使用 MACVLAN 好像毫無意義,但是配合之前介紹的 network namespace 使用,我們可以構(gòu)建這樣的網(wǎng)絡(luò):

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

由于 macvlan 與 eth0 處于不同的 namespace,擁有不同的 network stack,這樣使用可以不需要建立 bridge 在 virtual namespace 里面使用網(wǎng)絡(luò)。

MACVTAP

MACVTAP 是對(duì) MACVLAN的改進(jìn),把 MACVLAN 與 TAP 設(shè)備的特點(diǎn)綜合一下,使用 MACVLAN 的方式收發(fā)數(shù)據(jù)包,但是收到的包不交給 network stack 處理,而是生成一個(gè) /dev/tapX 文件,交給這個(gè)文件:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

由于 MACVLAN 是工作在 MAC 層的,所以 MACVTAP 也只能工作在 MAC 層,不會(huì)有 MACVTUN 這樣的設(shè)備。

創(chuàng)建虛擬網(wǎng)絡(luò)環(huán)境

使用命令

  1. $ ip netns add net0 

可以創(chuàng)建一個(gè)完全隔離的新網(wǎng)絡(luò)環(huán)境,這個(gè)環(huán)境包括一個(gè)獨(dú)立的網(wǎng)卡空間,路由表,ARP表,ip地址表,iptables,ebtables,等等??傊c網(wǎng)絡(luò)有關(guān)的組件都是獨(dú)立的。

使用命令

  1. $ ip netns listnet0 

可以看到我們剛才創(chuàng)建的網(wǎng)絡(luò)環(huán)境

進(jìn)入虛擬網(wǎng)絡(luò)環(huán)境

使用命令

  1. $ ip netns exec net0  
  2. `command` 

我們可以在 net0 虛擬環(huán)境中運(yùn)行任何命令

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

這樣我們可以在新的網(wǎng)絡(luò)環(huán)境中打開一個(gè)shell,可以看到,新的網(wǎng)絡(luò)環(huán)境里面只有一個(gè)lo設(shè)備,并且這個(gè)lo設(shè)備與外面的lo設(shè)備是不同的,之間不能互相通訊。

連接兩個(gè)網(wǎng)絡(luò)環(huán)境

新的網(wǎng)絡(luò)環(huán)境里面沒有任何網(wǎng)絡(luò)設(shè)備,并且也無法和外部通訊,就是一個(gè)孤島,通過下面介紹的這個(gè)方法可以把兩個(gè)網(wǎng)絡(luò)環(huán)境連起來,簡(jiǎn)單的說,就是在兩個(gè)網(wǎng)絡(luò)環(huán)境之間拉一根網(wǎng)線。

  1. $ ip netns add net1 

先創(chuàng)建另一個(gè)網(wǎng)絡(luò)環(huán)境net1,我們的目標(biāo)是把net0與net1連起來。

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

這里創(chuàng)建連一對(duì)veth虛擬網(wǎng)卡,類似pipe,發(fā)給veth0的數(shù)據(jù)包veth1那邊會(huì)收到,發(fā)給veth1的數(shù)據(jù)包veth0會(huì)收到。就相當(dāng)于給機(jī)器安裝了兩個(gè)網(wǎng)卡,并且之間用網(wǎng)線連接起來了。

  1. $ ip link set veth0 netns net0 
  2. $ ip link set veth1 netns net1 

這兩條命令的意思就是把veth0移動(dòng)到net0環(huán)境里面,把veth1移動(dòng)到net1環(huán)境里面,我們看看結(jié)果。

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

veth0 veth1已經(jīng)在我們的環(huán)境里面消失了,并且分別出現(xiàn)在net0與net1里面。下面我們簡(jiǎn)單測(cè)試一下net0與net1的聯(lián)通性。

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

分別配置好兩個(gè)設(shè)備,然后用ping測(cè)試一下聯(lián)通性:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

一個(gè)稍微復(fù)雜的網(wǎng)絡(luò)環(huán)境

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

創(chuàng)建虛擬網(wǎng)絡(luò)環(huán)境并且連接網(wǎng)線。

ip netns add net0ip netns add net1ip netns add bridgeip link add type vethip link set dev veth0 name net0-bridge netns net0ip link set dev veth1 name bridge-net0 netns bridgeip link add type vethip link set dev veth0 name net1-bridge netns net1ip link set dev veth1 name bridge-net1 netns bridge

在bridge中創(chuàng)建并且設(shè)置br設(shè)備:

ip netns exec bridge brctl addbr brip netns exec bridge ip link set dev br upip netns exec bridge ip link set dev bridge-net0 upip netns exec bridge ip link set dev bridge-net1 upip netns exec bridge brctl addif br bridge-net0ip netns exec bridge brctl addif br bridge-net1

然后配置兩個(gè)虛擬環(huán)境的網(wǎng)卡:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

測(cè)試:

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

OK,以上便是今天的內(nèi)容。

NDK基礎(chǔ)開發(fā)流程—Linux流程大綱

 

詳解:Linux網(wǎng)絡(luò)虛擬化技術(shù)

 

 

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-07-24 10:06:15

Linux網(wǎng)絡(luò)虛擬化

2019-04-16 16:23:29

GPU虛擬化CPU

2015-10-10 15:46:02

融合網(wǎng)絡(luò)網(wǎng)絡(luò)虛擬化

2019-11-12 14:48:00

Linux桌面虛擬化KVM

2011-03-28 18:25:03

ibmdwLinux

2012-03-18 21:41:40

linux虛擬化

2013-11-18 09:43:28

網(wǎng)絡(luò)虛擬化SDN

2012-03-21 10:10:57

虛擬化網(wǎng)絡(luò)診斷

2009-12-25 10:05:00

Linux虛擬化Xen虛擬化

2015-10-09 17:01:08

數(shù)據(jù)中心網(wǎng)絡(luò)虛擬化

2011-04-21 09:20:28

IaaS網(wǎng)絡(luò)虛擬化

2009-12-28 21:12:05

網(wǎng)絡(luò)虛擬化IRF2H3C

2009-01-21 18:31:50

2018-02-28 14:29:18

2009-11-23 19:47:57

ibmdwLinux

2013-08-23 10:32:41

Linux服務(wù)器虛擬化

2020-07-22 15:19:34

開源KVM虛擬化

2009-02-27 10:03:14

虛擬化網(wǎng)絡(luò)大會(huì)虛擬化技術(shù)

2009-05-26 16:53:20

2009-08-18 20:05:11

虛擬化技術(shù)虛擬交換機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)