匿名
未登录
登录
Linux78|wiki
搜索
查看“隧道技术”的源代码
来自Linux78|wiki
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
隧道技术
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
wiki:用户|用户
您可以查看与复制此页面的源代码。
隧道技术是一种常用的实现网络虚拟化的技术,它将其他协议或封装格式的数据帧进行重新封装后发送或接受。 其中,以overlay最为著名,overlay技术是将整个以太网报文作为DATA封装到新的报文中,隧道报文封装新的二层头、三层头,甚至是新的TCP或者UDP报文头,这些技术有VPLS/VXLAN/NVGRE等。VXLAN是由VMware、Cisco、RedHat等联合提出的一个解决方案,它本质就是MAC-in-UDP,将原始报文封装到UDP数据包中传输,负责处理(封包和解包)VXLAN报文的设备被称为VTEP(VXLAN Tunnel EndPoints)。图8是一个VXLAN数据包结构。 [[文件:Spine-5.jpg|有框|居中]] 整个数据包分为三层,最外层是UDP协议报文,是在宿主机网络中传输的;中间是VXLAN头部,VTEP接受报文之后,去除外面UDP协议部分,得到最内层原始的L2层数据包,转发到最终的目的端。下面逐一分析每一层的组成。外层的UDP数据包具体包含8个字节的四层UDP头部。其中,目的端口就是接收方VTEP使用的端口,默认是4789,还有20个字节的三层IP头部,主机之间通信的地址,可能是主机的网卡IP地址,也可能是多播IP地址。 二层还需要封装14个字节的MAC头部,主机之间通信的MAC地址,源MAC地址为主机MAC地址,目的MAC地址为下一跳设备的MAC地址。中间层8个字节的VXLAN头部,头部里面最重要的是一个24位的VNI,标识VXLAN的ID与VLAN的ID类似,可以将网络分组隔离。加上外层的UDP(共8+14+20字节)封装,整个VXLAN的封包相比传统的网络包额外增加了50字节。 带来的影响一方面是网络设备的负载增加;另一方面,在封包和拆包的时候,计算资源的消耗也必须被考虑。解决的思路通常是将VXLAN包的封装过程从物理服务器迁移至支持VXLAN的网络设备上。 VXLAN还支持隔离,每个租户多个VNI(VXLAN Network Identifier),它具有24位(最大值为16777216),相比传统VLAN的12位(最大值为4096),扩展了很多。 它能提供一个跨数据中心的大二层技术方案。VXLAN接口称为VTEP(VXLAN tunnel endpoint),VXLAN子网的报文,都需要从VTEP出去,多播组主要用来学习ARP:VXLAN子网内广播ARP请求,对应VM响应,但这并不是必须的。 如果网络不复杂,可以认为某一Hypervisor上所有子网IP的MAC,和Hypervisor上的VTEP的MAC一致,可以直接用VTEP MAC封装报文。下面通过简单的流程讲解一下整个发包的过程。VXLAN的报文工作流程,位于上方的虚拟机A要通过VXLAN网络发送报文给右上方的虚拟机B,如图 [[文件:Spine-6.jpg|有框|居中]] VTEP建立的时候会通过配置加入多播组,图5中的多播组IP地址是239.1.1.1。虚拟机A只知道对方的IP地址,不知道MAC地址,因此会发送ARP报文进行查询,内部的ARP报文很普通,目标地址为全1的广播地址。 VTEP-1收到ARP报文,发现虚拟机目的MAC为广播地址,封装上VXLAN协议头部之后(外层IP为多播组IP,MAC地址为多播组的MAC地址),发送给多播组239.1.1.1,支持多播的底层网络设备(交换机和路由器)会把报文发送给组内所有成员。 VTEP-2接收VXLAN封装的ARP请求,去掉VXLAN头部,并通过报文将发送方<虚拟机A MAC-VNI-VTEP IP>三元组保存起来,把解包后的ARP报文广播给主机上面的虚拟机。 虚拟机B接收ARP请求报文。如果ARP报文请求的是自己的MAC地址,则返回对应的ARP应答。VTEP-2此时已经知道发送方虚拟机的VTEP信息,把ARP应答添加上VXLAN头部(外部IP地址为VTEP-1的IP地址,VN1是原来报文的VN1)之后通过单播发送出去。 VTEP-1接收报文,并学习报文中的三元组,记录下来。然后通过VTEP进行解包,知道内部的IP和MAC地址,并转发给目的虚拟机。虚拟机A拿到ARP应答报文,就知道了到目的虚拟机的MAC地址。 在这个过程中,只有一次多播,因为VTEP有自动学习的能力,后续的报文都是通过单播直接发送的。可以看到,多播报文非常浪费,每次的多播其实只有一个报文是有效的。如果某个多播组的VTEP数量很多,这个浪费是非常大的。但是多播组实现起来比较简单,不需要中心化控制,只有底层网络支持多播。 单播报文的发送过程就是上述应答报文的逻辑,应该非常容易理解。 还有一种通信方式,那就是不同VN网络之间的通信,这个需要使用VXLAN网关(可以是物理网络设备,也可以是软件),它接收一个VXLAN网络报文之后解压,根据特定的逻辑添加另外一个VXLAN头部转发出去。因为并不是所有的网络设备都支持多播,再加上多播方式带来的报文浪费,在实际生产中这种方式很少用到。 从多播的流程可以看出,其实VTEP发送报文最关键的就是知道对方虚拟机的MAC地址和虚拟机所在主机的VTEP IP地址。如果能够事先知道这两个信息,直接告诉VTEP,那么就不需要多播了。所以,可以通过预置这些网络信息,从而有效提高VXLAN数据包的转发效率。 L2 Population便是一种通过网络管理系统(如OpenStack Neutron)预先下发“IP和MAC”及“IP和VTEP”关系,从而在虚拟机需要获取对方MAC地址的时候,VTEP可以作为代理直接返回对方MAC,并且在数据封包时可以直接获取VXLAN外层的目的IP。
返回至
隧道技术
。
导航
导航
首页
最近更改
随机页面
栏目
Nginx
Kubernetes
Spring Cloud
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志