本文介绍蜂巢的连通性及其连接,以及两个命名空间之间的连通性。
按定义,Veth-pair是一对虚拟设备界面,与窃听/tun设备不同,它们以对对方式出现。结尾与协议柜台相连,结尾与另一端相连。如下图所示:
由于这一特点,它往往充当连接各种虚拟网络装置的桥梁,一般是“两个名称空间之间的连接”、“桥梁、OVS之间的连接”、“多克集装箱之间的连接”等等,以建造非常复杂的虚拟网络结构,如OpenStack中子。
我们分别对Veth0和Veth1和IP:10.1.1.2 和 10.1.1.3进行配对, 然后我们从Veth0点到Veth1点。
拿一个袋子,tcpdump -nt -i veth0。
root@ubuntu:~#?tcpdump?-nnt?-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
ARP,?Request?who-has?10.1.1.3?tell?10.1.1.2,?length?28
ARP,谁? 10.1.1.3?告诉?10.1.1.2?Length.28登录并复制。
可以看出,由于Veth0和Veth1在同一节中,并且首次连接,ARP软件包是提前发放的,但Veth1对ARP软件包没有反应。
经审查后,这是由于我使用的Ubuntu系统中与ARP有关的默认配置限制,需要修改配置:
echo?1?>?/proc/sys/net/ipv4/conf/veth1/accept_local
echo?1?>?/proc/sys/net/ipv4/conf/veth0/accept_local
echo?0?>?/proc/sys/net/ipv4/conf/all/rp_filter
echo?0?>?/proc/sys/net/ipv4/conf/veth0/rp_filter
/proc/sys/net/ipv4/conf/veth1/rp_ filter 登录
完事后我就没事了
root@ubuntu:~#?ping?-I?veth0?10.1.1.3?-c?2
PING?10.1.1.3?(10.1.1.3)?from?10.1.1.2?veth0:?56(84)?bytes?of?data.
64?bytes?from?10.1.1.3:?icmp_seq=1?ttl=64?time=0.047?ms
64?bytes?from?10.1.1.3:?icmp_seq=2?ttl=64?time=0.064?ms
---?10.1.1.3?ping?statistics?---
2?packets?transmitted,?2?received,?0%?packet?loss,?time?3008ms
在登录后为0.047/0.072/033/0.025毫秒
我们更关心这个沟通过程, 我们可以看看它。
对于 Veth0 :
root@ubuntu:~#?tcpdump?-nnt?-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
ARP,?Request?who-has?10.1.1.3?tell?10.1.1.2,?length?28
ARP,?Reply?10.1.1.3?is-at?5a:07:76:8e:fb:cd,?length?28
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?1,?length?64
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?2,?length?64
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?3,?length?64
IP? 10.1.1.2? 10.1.1.3: IP? IP? 10.1.1.2? 10.1.3? 10.1.3:? ICMP? echo? request?
蔬菜1:
root@ubuntu:~#?tcpdump?-nnt?-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
ARP,?Request?who-has?10.1.1.3?tell?10.1.1.2,?length?28
ARP,?Reply?10.1.1.3?is-at?5a:07:76:8e:fb:cd,?length?28
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?1,?length?64
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?2,?length?64
IP?10.1.1.2?>?10.1.1.3:?ICMP?echo?request,?id?2189,?seq?3,?length?64
IP? 10.1.1.2? 10.1.1.3: IP? IP? 10.1.1.2? 10.1.3? 10.1.3:? ICMP? echo? request?
奇怪,我们没有看到IPIC的回声答录包, 如何运作?
事实上,这里就是我们要去的地方,呃,当地人, 拿一个袋子,看看它。
root@ubuntu:~#?tcpdump?-nnt?-i?lo
tcpdump:?verbose?output?suppressed,?use?-v?or?-vv?for?full?protocol?decode
listening?on?lo,?link-type?EN10MB?(Ethernet),?capture?size?262144?bytes
IP?10.1.1.3?>?10.1.1.2:?ICMP?echo?reply,?id?2244,?seq?1,?length?64
IP?10.1.1.3?>?10.1.1.2:?ICMP?echo?reply,?id?2244,?seq?2,?length?64
IP?10.1.1.3?>?10.1.1.2:?ICMP?echo?reply,?id?2244,?seq?3,?length?64
IP? 10.1.1.3? 10.1.1.2: 国际CMP?echo?repy?id?2244?seq?4?
为什么?
我们会看到整个通讯过程。
首先, ping 程序构建 ICMP 元素, 并通过插座将其发送到协议存储处 。
由于Ping首次指定了Veth0,需要发出ARP请求,否则数据集将直接交给Veth0。
因为 veth0 连接到 veth1, ICMP 直接发送到 veth1 。
收到请求后,在另一端将第1节交给协议柜台。
此 IP 可在协议仓库本地获取, 因此, ICMP 回复软件包会建好, 路线表会经过审查, 返回到10.1.0 部分的数据包会到达本地后端入口, 回复软件包会送到 lo 入口( Proute show 表 0 被优先处理 ) 。
Lo从礼宾室收到了一个答复袋,什么也没做,他回到了协议厅。
收到答复包后,等待包内有一个套座,包裹交给套座。
正在等待用户标注的 ping 程序找到要返回的锁链, 收到IPC 的回复包 。
以下图表说明了整个过程:
命名空间是Linux 2.6.x在内核版本之后支持的一个特征,后者主要用于分离资源。使用命名空间,一个Linux系统可以抽取多个网络子系统,每个系统都有自己的网络设备、协议计数器等,而不会相互影响。
如果需要在不同地名空间之间进行沟通,答案是用蔬菜作为桥梁。
视连接的方式和大小而定,它可分为“直接连接”、“桥梁连接”和“OVS连接”。
直接连接是连接的最容易的方式,如下:一对veth-pair直接连接两个命名空间。
配置 Veth-pair 的 IP 配置, 测试连接 :
创建? 命名空间
ip?netns?a?ns1
ip?netns?a?ns2
创造一对情侣?
ip?l?a?veth0?type?veth?peer?name?veth1
会吗? 蔬菜0 蔬菜1?
ip?l?s?veth0?netns?ns1
ip?l?s?veth1?netns?ns2
? 两个? veth0 veth1? 与IP?
ip?netns?exec?ns1?ip?a?a?10.1.1.2/24?dev?veth0
ip?netns?exec?ns1?ip?l?s?veth0?up
ip?netns?exec?ns2?ip?a?a?10.1.1.3/24?dev?veth1
ip?netns?exec?ns2?ip?l?s?veth1?up
? 从? 蔬菜0? ping?
[root@localhost?~]#?ip?netns?exec?ns1?ping?10.1.1.3
PING?10.1.1.3?(10.1.1.3)?56(84)?bytes?of?data.
64?bytes?from?10.1.1.3:?icmp_seq=1?ttl=64?time=0.073?ms
64?bytes?from?10.1.1.3:?icmp_seq=2?ttl=64?time=0.068?ms
---?10.1.1.3?ping?statistics?---
15?packets?transmitted,?15?received,?0%?packet?loss,?time?14000ms
在登录后为0.068/0.084/0.201/0.032吗?
Linux桥相当于一个开关 它可以转换两个命名空间的流量, 让我们看看Veth -pair在其中扮演什么角色。
如下,两对Veth-pair将两个命名空间连接到Bridge。
配置具有相同veth-pair 的 IP 配置, 测试它们的连接 :
? 首先创造大桥? Bren
ip?l?a?br0?type?bridge
ip?l?s?br0?up?
创造两对对
ip?l?a?veth0?type?veth?peer?name?br-veth0
ip?l?a?veth1?type?veth?peer?name?br-veth1
两对 香肠 和两对 ns和br0
ip?l?s?veth0?netns?ns1
ip?l?s?br-veth0?master?br0
ip?l?s?br-veth0?up
ip?l?s?veth1?netns?ns2
ip?l?s?br-veth1?master?br0
ip?l?s?br-veth1?up
? 他们的两个? 蜂窝? 配置? IP?
ip?netns?exec?ns1?ip?a?a?10.1.1.2/24?dev?veth0
ip?netns?exec?ns1?ip?l?s?veth0?up
ip?netns?exec?ns2?ip?a?a?10.1.1.3/24?dev?veth1
ip?netns?exec?ns2?ip?l?s?veth1?up
#?veth0?ping?veth1
[root@localhost?~]#?ip?netns?exec?ns1?ping?10.1.1.3
PING?10.1.1.3?(10.1.1.3)?56(84)?bytes?of?data.
64?bytes?from?10.1.1.3:?icmp_seq=1?ttl=64?time=0.060?ms
64?bytes?from?10.1.1.3:?icmp_seq=2?ttl=64?time=0.105?ms
---?10.1.1.3?ping?statistics?---
2?packets?transmitted,?2?received,?0%?packet?loss,?time?999ms
在登录后为0.060/0.082/0.105/0.024吗?
OVS是一座第三方开源桥, 比Linux桥更强大, 对于同样的实验,我们使用OVS来观察会发生什么。
如下图所示:
两个命名空间之间连接的相同测试 :
? 与命令从???
ovs-vsctl?add-br?ovs-br
创造两对对
ip?l?a?veth0?type?veth?peer?name?ovs-veth0
ip?l?a?veth1?type?veth?peer?name?ovs-veth1
? 你会加吗?
ip?l?s?veth0?netns?ns1
ovs-vsctl?add-port?ovs-br?ovs-veth0
ip?l?s?ovs-veth0?up
ip?l?s?veth1?netns?ns2
ovs-vsctl?add-port?ovs-br?ovs-veth1
ip?l?s?ovs-veth1?up
? 这里的蜂巢? 配置? IP?
ip?netns?exec?ns1?ip?a?a?10.1.1.2/24?dev?veth0
ip?netns?exec?ns1?ip?l?s?veth0?up
ip?netns?exec?ns2?ip?a?a?10.1.1.3/24?dev?veth1
ip?netns?exec?ns2?ip?l?s?veth1?up
#?veth0?ping?veth1
[root@localhost?~]#?ip?netns?exec?ns1?ping?10.1.1.3
PING?10.1.1.3?(10.1.1.3)?56(84)?bytes?of?data.
64?bytes?from?10.1.1.3:?icmp_seq=1?ttl=64?time=0.311?ms
64?bytes?from?10.1.1.3:?icmp_seq=2?ttl=64?time=0.087?ms
^C
---?10.1.1.3?ping?statistics?---
2?packets?transmitted,?2?received,?0%?packet?loss,?time?999ms
ltt?min/avg/max/mdev?=0.087/0.199/0.311/0.11?
视网膜作为虚拟网络的桥梁,将多个网络设备与复杂的网络连接起来。
三大经典实验是直接相连的,通过桥梁连接,通过OVS连接。
http://www.opencloudblog.com/?p=66
https://segmentfault.com/a/1190000009251098
这些是Linux虚拟网络设备Veth-pair的详情,非常详细。 请多注意中文的php 和其他相关文章!
注册有任何问题请添加 微信:MVIP619 拉你进入群
打开微信扫一扫
添加客服
进入交流群
发表评论