Linux虛擬網路裝置之bridge(橋)
繼前兩篇介紹了tun/tap和veth之後,本篇將介紹Linux下常用的一種虛擬網路裝置,那就是bridge(橋)。
本篇將通過實際的例子來一步一步解釋bridge是如何工作的。
什麼是bridge?
首先,bridge是一個虛擬網路裝置,所以具有網路裝置的特徵,可以配置IP、MAC地址等;其次,bridge是一個虛擬交換機,和物理交換機有類似的功能。
對於普通的網路裝置來說,只有兩端,從一端進來的資料會從另一端出去,如物理網絡卡從外面網路中收到的資料會轉發給核心協議棧,而從協議棧過來的資料會轉發到外面的物理網路中。
而bridge不同,bridge有多個埠,資料可以從任何埠進來,進來之後從哪個口出去和物理交換機的原理差不多,要看mac地址。
建立bridge
我們先用iproute2建立一個bridge:
[email protected]:~$ sudo ip link add name br0 type bridge
[email protected]:~$ sudo ip link set br0 up
當剛建立一個bridge時,它是一個獨立的網路裝置,只有一個埠連著協議棧,其它的埠啥都沒連,這樣的bridge沒有任何實際功能,如下圖所示:
+----------------------------------------------------------------+
||
| +------------------------------------------------+ |
|| Newwork Protocol Stack ||
| +------------------------------------------------+ |
| ↑ ↑ |
|..............|................................|................|
| ↓ ↓ |
| +----------+ +------------+ |
|| eth0 || br0 ||
| +----------+ +------------+ |
| 192.168.3.21 ↑ |
|||
|||
+--------------|-------------------------------------------------+
↓
Physical Network
這裡假設eth0是我們的物理網絡卡,IP地址是192.168.3.21,閘道器是192.168.3.1
將bridge和veth裝置相連
建立一對veth裝置,並配置上IP
[email protected]:~$ sudo ip link add veth0 type veth peer name veth1
[email protected]:~$ sudo ip addr add 192.168.3.101/24 dev veth0
[email protected]:~$ sudo ip addr add 192.168.3.102/24 dev veth1
[email protected]:~$ sudo ip link set veth0 up
[email protected]:~$ sudo ip link set veth1 up
將veth0連上br0
[email protected]:~$ sudo ip link set dev veth0 master br0
#通過bridge link命令可以看到br0上連線了哪些裝置
[email protected]:~$ sudo bridge link
6: veth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 2
這時候,網路就變成了這個樣子:
+----------------------------------------------------------------+
||
| +------------------------------------------------+ |
|| Newwork Protocol Stack ||
| +------------------------------------------------+ |
| ↑ ↑ | ↑ |
|............|............|..............|............|..........|
| ↓ ↓ ↓ ↓ |
| +------+ +--------+ +-------+ +-------+ |
|| .3.21|||| .3.101|| .3.102||
| +------+ +--------+ +-------+ +-------+ |
|| eth0 || br0 |<--->| veth0 || veth1 ||
| +------+ +--------+ +-------+ +-------+ |
| ↑ ↑ ↑ |
|||||
|| +------------+ |
|||
+------------|---------------------------------------------------+
↓
Physical Network
這裡為了畫圖方便,省略了IP地址前面的192.168,比如.3.21就表示192.168.3.21
br0和veth0相連之後,發生了幾個變化:
br0和veth0之間連線起來了,並且是雙向的通道
協議棧和veth0之間變成了單通道,協議棧能發資料給veth0,但veth0從外面收到的資料不會轉發給協議棧
br0的mac地址變成了veth0的mac地址
相當於bridge在veth0和協議棧之間插了一腳,在veth0上面做了點小動作,將veth0本來要轉發給協議棧的資料給攔截了,全部轉發給bridge了,同時bridge也可以向veth0發資料。
下面來檢驗一下是不是這樣的:
通過veth0 ping veth1失敗:
[email protected]:~$ ping -c 1 -I veth0 192.168.3.102
PING 192.168.2.1 (192.168.2.1) from 192.168.2.11 veth0: 56(84) bytes of data.
From 192.168.2.11 icmp_seq=1 Destination Host Unreachable
--- 192.168.2.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
為什麼veth0加入了bridge之後,就ping不通veth2了呢? 先抓包看看:
#由於veth0的arp快取裡面沒有veth1的mac地址,所以ping之前先發arp請求
#從veth1上抓包來看,veth1收到了arp請求,並且返回了應答
[email protected]:~$ sudo tcpdump -n -i veth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on veth1, link-type EN10MB (Ethernet), capture size 262144 bytes
21:43:48.353509 ARP, Request who-has 192.168.3.102 tell 192.168.3.101, length 28
21:43:48.353518 ARP, Reply 192.168.3.102 is-at 26:58:a2:57:37:e9, length 28
#從veth0上抓包來看,資料包也發出去了,並且也收到了返回
[email protected]:~$ sudo tcpdump -n -i veth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on veth0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:44:09.775392 ARP, Request who-has 192.168.3.102 tell 192.168.3.101, length 28
21:44:09.775400 ARP, Reply 192.168.3.102 is-at 26:58:a2:57:37:e9, length 28
#再看br0上的資料包,發現只有應答
[email protected]:~$ sudo tcpdump -n -i br0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 262144 bytes
21:45:48.225459 ARP, Reply 192.168.3.102 is-at 26:58:a2:57:37:e9, length 28
從上面的抓包可以看出,去和回來的流程都沒有問題,問題就出在veth0收到應答包後沒有給協議棧,而是給了br0,於是協議棧得不到veth1的mac地址,從而通訊失敗。
給bridge配上IP
通過上面的分析可以看出,給veth0配置IP沒有意義,因為就算協議棧傳資料包給veth0,應答包也回不來。這裡我們就將veth0的IP讓給bridge。
[email protected]:~$ sudo ip addr del 192.168.3.101/24 dev veth0
[email protected]:~$ sudo ip addr add 192.168.3.101/24 dev br0
於是網路變成了這樣子:
+----------------------------------------------------------------+
||
| +------------------------------------------------+ |
|| Newwork Protocol Stack ||
| +------------------------------------------------+ |
| ↑ ↑ ↑ |
|............|............|...........................|..........|
| ↓ ↓ ↓ |
| +------+ +--------+ +-------+ +-------+ |
|| .3.21|| .3.101 |||| .3.102||
| +------+ +--------+ +-------+ +-------+ |
|| eth0 || br0 |<--->| veth0 || veth1 ||
| +------+ +--------+ +-------+ +-------+ |
| ↑ ↑ ↑ |
|||||
|| +------------+ |
|||
+------------|---------------------------------------------------+
↓
Physical Network
其實veth0和協議棧之間還是有聯絡的,但由於veth0沒有配置IP,所以協議棧在路由的時候不會將資料包發給veth0,就算強制要求資料包通過veth0傳送出去,但由於veth0從另一端收到的資料包只會給br0,所以協議棧還是沒法收到相應的arp應答包,導致通訊失敗。
這裡為了表達更直觀,將協議棧和veth0之間的聯絡去掉了,veth0相當於一根網線。
再通過br0 ping一下veth1,結果成功
[email protected]:~$ ping -c 1 -I br0 192.168.3.102
PING 192.168.3.102 (192.168.3.102) from 192.168.3.101 br0: 56(84) bytes of data.
64 bytes from 192.168.3.102: icmp_seq=1 ttl=64 time=0.121 ms
--- 192.168.3.102 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.121/0.121/0.121/0.000 ms
但ping閘道器還是失敗,因為這個bridge上只有兩個網路裝置,分別是192.168.3.101和192.168.3.102,br0不知道192.168.3.1在哪。
[email protected]:~$ ping -c 1 -I br0 192.168.3.1
PING 192.168.3.1 (192.168.3.1) from 192.168.3.101 br0: 56(84) bytes of data.
From 192.168.3.101 icmp_seq=1 Destination Host Unreachable
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
將物理網絡卡新增到bridge
將eth0新增到br0上:
[email protected]:~$ sudo ip link set dev eth0 master br0
[email protected]:~$ sudo bridge link
2: eth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 4
6: veth0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 2
br0根本不區分接入進來的是物理裝置還是虛擬裝置,對它來說都一樣的,都是網路裝置,所以當eth0加入br0之後,落得和上面veth0一樣的下場,從外面網路收到的資料包將無條件的轉發給br0,自己變成了一根網線。
這時通過eth0來ping閘道器失敗,但由於br0通過eth0這根網線連上了外面的物理交換機,所以連在br0上的裝置都能ping通閘道器,這裡連上的裝置就是veth1和br0自己,veth1是通過veth0這根網線連上去的,而br0可以理解為自己有一塊自帶的網絡卡。
#通過eth0來ping閘道器失敗
[email protected]:~$ ping -c 1 -I eth0 192.168.3.1
PING 192.168.3.1 (192.168.3.1) from 192.168.3.21 eth0: 56(84) bytes of data.
From 192.168.3.21 icmp_seq=1 Destination Host Unreachable
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
#通過br0來ping閘道器成功
[email protected]:~$ ping -c 1 -I br0 192.168.3.1
PING 192.168.3.1 (192.168.3.1) from 192.168.3.101 br0: 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=27.5 ms
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.518/27.518/27.518/0.000 ms
#通過veth1來ping閘道器成功
[email protected]:~$ ping -c 1 -I veth1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) from 192.168.3.102 veth1: 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=68.8 ms
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 68.806/68.806/68.806/0.000 ms
由於eth0已經變成了和網線差不多的功能,所以在eth0上配置IP已經沒有什麼意義了,並且還會影響協議棧的路由選擇,比如如果上面ping的時候不指定網絡卡的話,協議棧有可能優先選擇eth0,導致ping不通,所以這裡需要將eth0上的IP去掉。
#在本人的測試機器上,由於eth0上有IP,
#訪問192.168.3.0/24網段時,會優先選擇eth0
[email protected]:~$ sudo route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
link-local * 255.255.0.0 U 1000 0 0 eth0
192.168.3.0 * 255.255.255.0 U 0 0 0 eth0
192.168.3.0 * 255.255.255.0 U 0 0 0 veth1
192.168.3.0 * 255.255.255.0 U 0 0 0 br0
#由於eth0已結接入了br0,所有它收到的資料包都會轉發給br0,
#於是協議棧收不到arp應答包,導致ping失敗
[email protected]:~$ ping -c 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
From 192.168.3.21 icmp_seq=1 Destination Host Unreachable
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
#將eth0上的IP刪除掉
[email protected]:~$ sudo ip addr del 192.168.3.21/24 dev eth0
#再ping一次,成功
[email protected]:~$ ping -c 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=3.91 ms
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 3.916/3.916/3.916/0.000 ms
#這是因為eth0沒有IP之後,路由表裡面就沒有它了,於是資料包會從veth1出去
[email protected]:~$ sudo route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.3.0 * 255.255.255.0 U 0 0 0 veth1
192.168.3.0 * 255.255.255.0 U 0 0 0 br0
#從這裡也可以看出,由於原來的預設路由走的是eth0,所以當eth0的IP被刪除之後,
#預設路由不見了,想要連線192.168.3.0/24以外的網段的話,需要手動將預設閘道器加回來
#新增預設閘道器,然後再ping外網成功
[email protected]:~$ sudo ip route add default via 192.168.3.1
[email protected]:~$ ping -c 1 baidu.com
PING baidu.com (111.13.101.208) 56(84) bytes of data.
64 bytes from 111.13.101.208: icmp_seq=1 ttl=51 time=30.6 ms
--- baidu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 30.690/30.690/30.690/0.000 ms
經過上面一系列的操作後,網路變成了這個樣子:
+----------------------------------------------------------------+
||
| +------------------------------------------------+ |
|| Newwork Protocol Stack ||
| +------------------------------------------------+ |
| ↑ ↑ |
|.........................|...........................|..........|
| ↓ ↓ |
| +------+ +--------+ +-------+ +-------+ |
|||| .3.101 |||| .3.102||
| +------+ +--------+ +-------+ +-------+ |
|| eth0 |<--->| br0 |<--->| veth0 || veth1 ||
| +------+ +--------+ +-------+ +-------+ |
| ↑ ↑ ↑ |
|||||
|| +------------+ |
|||
+------------|---------------------------------------------------+
↓
Physical Network
上面的操作中有幾點需要注意:
如果是在虛擬機器上做上述操作,記得開啟網絡卡的混雜模式(不是在Linux裡面,而是在虛擬機器的配置上面,如VirtualBox上相應虛擬機器的網絡卡配置項裡面),不然veth1的網路會不通,因為eth0不在混雜模式的話,會丟掉目的mac地址是veth1的資料包
上面雖然通了,但由於Linux下arp的特性,當協議棧收到外面的arp請求時,不管是問101還是102,都會回覆兩個arp應答,分別包含br0和veth1的mac地址,也即Linux覺得外面發給101和102的資料包從br0和veth1進協議棧都一樣,沒有區別。由於回覆了兩個arp應答,而外面的裝置只會用其中的一個,並且具體用哪個會隨著時間發生變化,於是導致一個問題,就是外面回覆給102的資料包可能從101的br0上進來,即通過102 ping外面時,可能在veth1抓不到回覆包,而在br0上能抓到回覆包。說明資料流在交換機那層沒有完全的隔離開,br0和veth1會收到對方的IP應答包。為了解決上述問題,可以配置rp_filter, arp_filter, arp_ignore, arp_announce等引數,但不建議這麼做,容易出錯,除錯比較麻煩。
在無線網路環境中,情況會變得比較複雜,因為無線網路需要登入,登陸後無線路由器只認一個mac地址,所有從這臺機器出去的mac地址都必須是那一個,於是通過無線網絡卡上網的機器上的所有虛擬機器想要上網的話,都必須依賴虛擬機器管理軟體(如VirtualBox)將每個虛擬機器的網絡卡mac地址轉成出口的mac地址(即無線網絡卡的mac地址),資料包回來的時候還要轉回來,所以如果一個IP有兩個ARP應答包的話,有可能導致mac地址的轉換有問題,導致網路不通,或者有時通有時不通。解決辦法就是將連線進br0的所有裝置的mac地址都改成和eth0一樣的mac地址,因為eth0的mac地址會被虛擬機器正常的做轉換。在上面的例子中,執行下面的命令即可:
dev@debian:~$ sudo ip link set dev veth1 down #08:00:27:3b:0d:b9是eth0的mac地址 dev@debian:~$ sudo ip link set dev veth1 address 08:00:27:3b:0d:b9 dev@debian:~$ sudo ip link set dev veth1 up
bridge必須要配置IP嗎?
在我們常見的物理交換機中,有可以配置IP和不能配置IP兩種,不能配置IP的交換機一般通過com口連上去做配置(更簡單的交換機連com口的沒有,不支援任何配置),而能配置IP的交換機可以在配置好IP之後,通過該IP遠端連線上去做配置,從而更方便。
bridge就屬於後一種交換機,自帶虛擬網絡卡,可以配置IP,該虛擬網絡卡一端連在bridge上,另一端跟協議棧相連。和物理交換機一樣,bridge的工作不依賴於該虛擬網絡卡,但bridge工作不代表機器能連上網,要看組網方式。
刪除br0上的IP:
[email protected]:~$ sudo ip addr del 192.168.3.101/24 dev br0
於是網路變成了這樣子,相當於br0的一個埠通過eth0連著交換機,另一個埠通過veth0連著veth1:
+----------------------------------------------------------------+
||
| +------------------------------------------------+ |
|| Newwork Protocol Stack ||
| +------------------------------------------------+ |
| ↑ |
|.....................................................|..........|
| ↓ |
| +------+ +--------+ +-------+ +-------+ |
|||||||| .3.102||
| +------+ +--------+ +-------+ +-------+ |
|| eth0 |<--->| br0 |<--->| veth0 || veth1 ||
| +------+ +--------+ +-------+ +-------+ |
| ↑ ↑ ↑ |
|||||
|| +------------+ |
|||
+------------|---------------------------------------------------+
↓
Physical Network
ping閘道器成功,說明這種情況下br0不配置IP對通訊沒有影響,資料包還能從veth1出去:
[email protected]:~$ ping -c 1 192.168.3.1
PING 192.168.3.1 (192.168.3.1) 56(84) bytes of data.
64 bytes from 192.168.3.1: icmp_seq=1 ttl=64 time=1.24 ms
--- 192.168.3.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.242/1.242/1.242/0.000 ms
上面如果沒有veth0和veth1的話,刪除br0上的IP後,網路將會不通,因為沒有裝置和協議棧完全相連
bridge常用場景
上面通過例子展示了bridge的功能,但例子中的那種部署方式沒有什麼實際用途,還不如在一個網絡卡上配置多個IP地址來的直接。這裡來介紹兩種常見的部署方式。
虛擬機器
虛擬機器通過tun/tap或者其它類似的虛擬網路裝置,將虛擬機器內的網絡卡同br0連線起來,這樣就達到和真實交換機一樣的效果,虛擬機發出去的資料包先到達br0,然後由br0交給eth0傳送出去,資料包都不需要經過host機器的協議棧,效率高。
+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
| Host | VirtualMachine1 | VirtualMachine2 |
||||
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
|| Newwork Protocol Stack ||| Newwork Protocol Stack ||| Newwork Protocol Stack ||
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| ↑ | ↑ | ↑ |
|..........................|.....................................|...................|.....................|....................|....................|
| ↓ | ↓ | ↓ |
| +--------+ | +-------+ | +-------+ |
|| .3.101 ||| .3.102||| .3.103||
| +------+ +--------+ +-------+ | +-------+ | +-------+ |
|| eth0 |<--->| br0 |<--->|tun/tap||| eth0 ||| eth0 ||
| +------+ +--------+ +-------+ | +-------+ | +-------+ |
| ↑ ↑ ↑ | ↑ | ↑ |
||| +-------------------------------------------+ |||
|| ↓ ||||
|| +-------+ ||||
|||tun/tap|||||
|| +-------+ ||||
|| ↑ ||||
|| +-------------------------------------------------------------------------------|--------------------+ |
|||||
|||||
|||||
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+
↓
Physical Network (192.168.3.0/24)
docker
由於容器執行在自己單獨的network namespace裡面,所以都有自己單獨的協議棧,情況和上面的虛擬機器差不多,但它採用了另一種方式來和外界通訊:
+----------------------------------------------------------------+-----------------------------------------+-----------------------------------------+
| Host | Container 1 | Container 2 |
||||
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
|| Newwork Protocol Stack ||| Newwork Protocol Stack ||| Newwork Protocol Stack ||
| +------------------------------------------------+ | +-------------------------+ | +-------------------------+ |
| ↑ ↑ | ↑ | ↑ |
|............|.............|.....................................|...................|.....................|....................|....................|
| ↓ ↓ | ↓ | ↓ |
| +------+ +--------+ | +-------+ | +-------+ |
||.3.101|| .9.1 ||| .9.2 ||| .9.3 ||
| +------+ +--------+ +-------+ | +-------+ | +-------+ |
|| eth0 || br0 |<--->| veth ||| eth0 ||| eth0 ||
| +------+ +--------+ +-------+ | +-------+ | +-------+ |
| ↑ ↑ ↑ | ↑ | ↑ |
||| +-------------------------------------------+ |||
|| ↓ ||||
|| +-------+ ||||
||| veth |||||
|| +-------+ ||||
|| ↑ ||||
|| +-------------------------------------------------------------------------------|--------------------+ |
|||||
|||||
|||||
+------------|---------------------------------------------------+-----------------------------------------+-----------------------------------------+
↓
Physical Network (192.168.3.0/24)
容器中配置閘道器為.9.1,發出去的資料包先到達br0,然後交給host機器的協議棧,由於目的IP是外網IP,且host機器開啟了IP forward功能,於是資料包會通過eth0傳送出去,由於.9.1是內網IP,所以一般發出去之前會先做NAT轉換(NAT轉換和IP forward功能都需要自己配置)。由於要經過host機器的協議棧,並且還要做NAT轉換,所以效能沒有上面虛擬機器那種方案好,優點是容器處於內網中,安全性相對要高點。(由於資料包統一由IP層從eth0轉發出去,所以不存在mac地址的問題,在無線網路環境下也工作良好)
上面兩種部署方案中,同一網段的每個網絡卡都有自己單獨的協議棧,所以不存在上面說的多個ARP的問題
參考
相關推薦
Linux虛擬網路裝置之bridge(橋)
繼前兩篇介紹了tun/tap和veth之後,本篇將介紹Linux下常用的一種虛擬網路裝置,那就是bridge(橋)。本篇將通過實際的例子來一步一步解釋bridge是如何工作的。什麼是bridge?首先,bridge是一個虛擬網路裝置,所以具有網路裝置的特徵,可以配置IP
Linux-虛擬網路裝置-veth pair
基本概念 Virtual Ethernet Cable Bidirectional FIFO Often used to cross namespaces Linux container 中用到一個叫做veth的東西,這是一種新的裝置,專門
Linux-虛擬網路裝置-LinuxBridge
基本概念 bridge是一個虛擬網路裝置,具有網路裝置的特性(可以配置IP、MAC地址等);而且bridge還是一個虛擬交換機,和物理交換機裝置功能類似。網橋是一種在鏈路層實現中繼,對幀進行轉發的技術,根據MAC分割槽塊,可隔離碰撞,將網路的多個
Linux-虛擬網路裝置-OpenvSwitch(持續更新)
概述 OpenvSwitch,簡稱OVS是一個虛擬交換軟體,主要用於虛擬機器VM環境,作為一個虛擬交換機,支援Xen/XenServer, KVM, and VirtualBox多種虛擬化技術。 在虛擬化平臺上,OVS 可以為動態變化的端
Linux系統中高階網路管理 之 網橋.橋接
網橋:(Bridge) Linux網橋是一種以同種協議連線兩個區域網的產品。可以把它看成是一個決定傳送的包是到自己的區域網還是到另一個區域網的裝置。linux網橋檢查區域網上所有的包,在同一個區域網中傳送它,如果不是同一個網中的,就將它發到別的網上。 原理: 網橋是連線兩個區域網的儲存轉
【Linux】Ubuntu14.04虛擬網路裝置TUN安裝
1、檢測系統中是否存在TUN模組,ctrl+alt+t開啟Ubuntu終端,輸入: ①modinfo tun modinfo: ERROR: Module tun not found. ②modprobe tun lsmod | grep tun 沒有任何輸出 就是說沒有
網路虛擬化之linux虛擬網路基礎
1 linux虛擬網路基礎 1.1 Device 在linux裡面devic(裝置)與傳統網路概念裡的物理裝置(如交換機、路由器)不同,Linux所說的裝置,其背後指的是一個類似於資料結構、核心模組或裝置驅動這樣的含義。就是說device可能只是軟體系統裡的一個驅動,一個函式介面。 1.2 Tap Tap位於
安裝linux虛擬機器配置靜態ip(橋接模式)
1、centOs7、VMware Workstation14 2、常規新建虛擬機器操作後,來到選擇連線模式: 這裡選擇橋接模式,複製物理網路連線狀態(就是把實際的主機網絡卡資訊拷貝一份,讓虛擬機器也有一份和主機一樣的網絡卡)可不選, 關閉後,左上角點選編輯----虛擬網路編輯器 Vmnet0是
Linux-C網路程式設計之epoll函式
上文中說到如果從100的不同的地方取外賣,那麼epoll相當於一部手機,當外賣到達後,送貨員可以通知你,從而達到每去必得,少走很多路。 它是如何實現這些作用的呢? epoll的功能 epoll是select/poll的強化版,同是多路複用的函式,epoll
Linux系統網路裝置啟動和禁止“ifconfig eth0 up/down”命令的跟蹤
前面文章講了Linux系統的ethtool框架的一些東西,是從使用者空間可以直觀認識到的地方入手。同樣,本文從Linux系統絕大部分人都熟悉的“ifconfig eth0 up”命令來跟蹤一下此命令在核心中的發生了什麼事情。由於ifconfig啟動(up)和禁止(down)
Linux驅動-網路裝置(1)
1.Linux網路裝置驅動結構 Linux網路裝置驅動體系分為四層,從上往下依次為 網路協議介面層,網路裝置介面層,裝置驅動功能層,網路裝置與媒介層 這裡值得一提的是Linux網路裝置體系和TCP,IP協議棧之間的關係.下圖是TCP/IP結構圖 Linux網路驅
linux——管理系統裝置之磁碟的加密、加密磁碟的掛載及磁碟陣列、配額
一、磁碟加密1.磁碟加密命令祥解:[[email protected] ~]# cryptsetup luksFormat /dev/vdb1 ##對裝置/dev/vdb1進行加密WARNING!========This will overwrite data o
Linux虛擬記憶體對映之brk/sbrk,map/munmap
一.關於虛擬記憶體 問題: 一個程式不能訪問另外一個程式的地址指向的空間. 理解: 1.每個程式的開始地址ox8048000(?可由objdump 反彙編得到)
linux socket網路程式設計之socket屬性
1.函式用法:#include <sys/types.h> #include <sys/socket.h> int getsockopt(int sockf
Linux下網路程式設計之自定義協議進行併發多客戶端與伺服器的通訊(多程序處理併發)不足佔用資源太多
自定義協議訊息體*********msg.h*************#ifndef _MSG_H_#define _MSG_H_struct msg{ char head[10]; //頭部 char msg_chck; //效驗碼 char buff[512];/
Linux 學習之路 --------ip地址虛擬網路
// ifconfig 檢視IP地址 網路資訊 我的IP 39.161.136.25 ① 為網絡卡臨時配置IP地址 ifconfig eth0 39.161.136.5 (netmask /255.255.255.0&n
linux 網路裝置驅動之alloc_etherdev
最近在看網路驅動時,發現這個函式: struct net_device *netdev; netdev = alloc_etherdev(sizeof(synopGMACPciNetworkAdapter)); 順著這個函式進行追蹤: #define allo
理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虛擬網路
學習 Neutron 系列文章: 雖然大部分的OpenStack 部署環境中,都會使用 Open vSwitch 來作為虛擬交換機來實現二層網路功能,但是Neutron 仍然支援使用 Linux bridge 作為虛擬交換機來實現二層網路。
Linux核心學習之網路裝置
字元裝置、塊裝置、網路裝置是linux中對裝置的三種分類。字元裝置、塊裝置在/dev下是有裝置節點的,而塊裝置是沒有的。對塊裝置的操作是通過一種叫socket的API進行的,這些操作包括了收包(讀)、發包(寫)、設定IP地址等等(IOCTL)。 • 網路裝置的註冊 分配net_device空間,該資料型別表
C#設計模式之八橋接模式(Bridge)【結構型】
升級 方向 implement 詳細 .cn mage names 這樣的 意圖 一、引言 今天我們要講【結構型】設計模式的第二個模式,該模式是【橋接模式】,也有叫【橋模式】的。大家第一次看到這個名稱會想到什麽呢?我第一次看到這個模式根據名稱猜肯定是連接什麽東西的。因為