玩转Openvswitch第八站:Interface和Tunnel (上)

Openvswitch支持三种隧道的方式:

  • gre

  • vxlan

  • ipsec_gre

我们先来看GRE。

GRE全称Generic Routing Encapsulation,是一种隧道协议,通过将其他协议封装在一个点对点的连接中,实现跨公网的网络互联。

b3860bc4a6548c3ff2a90d9273f809e0.png

如图所示,在左面数据中心的服务器Host A要访问右面数据中心的Host B。

所以Host A发出的包中源地址是A的地址10.0.1.2,目标地址是B的地址10.0.2.2。

然而两个数据中心是通过公网才能通信,所以要在Router A和Router B之间,通过互相的公网地址(172.19.20.18和172.19.20.21)建立一个GRE隧道。

从Host A发出的包先到达Router A,然后通过GRE隧道进行封装,在原来的包头上加上GRE包头,然后外层的源地址和目标地址变成了隧道两端的公网地址(172.19.20.18和172.19.20.21).。

由于外层地址是公网地址,当然可以通过Internet到达,到达Router B之后,在GRE隧道的另一端,将外层公网地址卸掉,然后将GRE包头卸掉,于是剩下了里面原本的源地址和目标地址,目标地址就是Host B的地址,于是成功到达。

当Host B将返回结果发回给Host A的时候,则走完全相反的路径就可以了。

890cadf6461b4d3355869bd25abf86aa.png

GRE是点对点的连接,并且一个GRE端点可以有多个隧道,因而需要有一个标志位标识当前包属于哪个隧道,这就是GRE包头中的key。

1385e3e92c82001a7107b4832b522fad.png

我们再来看VXLAN。

VXLAN要复杂一些,主要是通过通过对L2包的打包和解包实现不同的L2网络感觉在同一个L2网络里面。

VXLAN有几个概念:

  • 需要支持多播和组播,因为在VXLAN网络里面,需要这两个协议发现目标MAC地址

  • VNI,全称VXLAN Network Identifier,是一个24位的ID,用于标识不同的VXLAN

  • VTEP,全称VXLAN Tunnel End Point,是VXLAN隧道的两端

VXLAN的包头如下:

bb9abe3b2bfb5470861c49c9a9d75a28.png

在最原始的包外面,首先加上的是VXLAN包头,里面主要就是VNI。

在VXLAN包头外面,加了一层UDP包头,目标端口和源端口都是VTEP的端口。

在UDP包头外面,加一层IP包头,目标地址和源地址都是VTEP的地址。

在IP包头的外面,加一层MAC包头,MAC层的目标和源地址,要看两个VTEP是否在同一个网段,如果在同一个网段,MAC直达,如果不是,还需要通过Gateway去转发,目标MAC就变成了Gateway的MAC地址。

如果两个VM,连接到两个VTEP上,希望通过VXLAN相互通信,并且通信的时候,两个VM需要感知他们似乎在同一个VLAN下面。

4d7e048b4527e0154b26a6ddf145073f.png

首先两个VTEP启动的时候,需要加入同一个组播组,通过IGMP协议。

fa841a1f5b18f375893102f0a1676e43.png

当VM1要发送包给VM2的时候,一开始VM1只知道VM2的IP地址,但是不知道VM2的MAC地址,如果他们在同一个VLAN里面,发现MAC地址这件事情,需要通过ARP协议,以广播的方式在VLAN里面询问,而是这个IP地址的机器VM2,会将MAC地址发送出来,于是VM1才能知道VM2的MAC地址。

既然按上面所述,VM1和VM2需要感觉上,他们是在同一个VLAN里面的,于是VM1就像原来一样发送了ARP请求。

ARP请求到达了VTEP1,VTEP1知道VM1不是在一个VLAN里面,而是在一个VXLAN里面,而且VM2也不归自己管,所以只好将ARP包通过VXLAN包头封装起来,然后通过组播,将ARP请求发送到所有的VTEP。

VTEP2知道VM2归自己管,于是将组播接收下啦,将VXLAN包头卸掉,将里面的ARP包发送给VM2,VM2看到ARP包,以为同一个VLAN里面的虚拟机在询问自己的MAC地址,于是将自己的MAC地址发送出来。

94ff0e8cb32ec8cc9de454e3a71fa2d6.png

VTEP2将ARP的结果封装VXLAN包头后发送给VTEP1,VTEP1将VXLAN包头卸掉后,将ARP的结果发送给VM1,VM1收到后感觉像从同一个VLAN里面发出来的一样。

在整个过程中,VTEP1和VTEP2都学习到了一条知识,就是VM1的MAC归VTEP1管,VM2的MAC归VTEP2管,以后两个VM通信的时候,不需要再组播问某个VM归谁管了,直接发送就可以了。

def6a910eea9c77bfbdd7fcc93eebb30.png

当双方知道了MAC地址以后,两个VM之间的交互和GRE就很像了。

内部的IP和MAC地址被封装起来,外面加上VTEP的IP和MAC地址,发送到另一端后,再把外层卸下来,发送给对端的VM。

最后下一节我们来看IPSec隧道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

popsuper1982

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值