此文已由作者刘超授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验
当你想了解OpenStack的Neutron网络,打开下面这张图的时候,心里一定是崩溃的,看起来这些模块连在一起很复杂,但其实和你家里的网络很像,看不出来?看我来慢慢解析。
其实这个网络的样子更像是我上大学的时候的寝室里面的网络。
作为一个已到中年的80后,在两千年初上大学的时候,当时家用路由器的价格还很高,所以我们寝室买不起家用路由器,只好买一个hub,将整个寝室的四台电脑连接起来,整个寝室只有一个对外网口,于是寝室长的电脑需要买两张网卡(当时买另外一张网卡是需要整个寝室分摊钱的),一张连接外网网口,一张连接Hub,其实是充当路由器的作用,其他的室友的网线都插到Hub上,任何一个人要上外网,必须把寝室长的电脑打开才可以。
整个寝室的网络拓扑结构如下:
如果是现在家里有路由器的,拓扑架构如下:
家里的路由器一般都会有DHCP功能,家里的设备只要连接到路由器,就会自动被分配一个IP地址,家里的路由器会有一个内网IP地址192.168.1.1,
家里的电脑的网关一般就设置为这个地址,当家里的电脑上网的时候,也是通过路由器,从公网口出去到互联网上访问。
接下来,我们将整个寝室放在一台物理机里面,虚拟机是你的电脑,路由器和DHCP Server相当于家用路由器或者寝室长的电脑,外网网口访问互联网,所有的电脑都通过内网网口连接到一个Hub上,名为br-int,虚拟机要想访问互联网,需要通过Hub br-int连到路由器上,然后通过路由器将请求转发到公网。
接下来的事情就惨了,你和你的寝室长闹矛盾了,你们要分开宿舍住,分成两个宿舍,对应上面的图,路由器和VM分在两台物理机上,这下把一个完整的br-int一刀两断,一半放在寝室长宿舍,一半放在你的宿舍。
可是只有你的寝室长有公网口可以上网,于是你偷偷的在两个宿舍中间打了一个隧道,用网线通过隧道将两个宿舍的两个br-int连接起来,让你的电脑和你寝室长的电脑感觉上,还是连到同一个br-int上,其实中间通过你的隧道中的网线做了转发。
为什么要多一个br-tun这个虚拟交换机呢?主要通过br-int这一层将虚拟机之间的互联和主机之间的互联分成两层来设计,tun的意思就是tunnel,就是隧道,隧道可以各种挖法,GRE,VXLAN都可以。
如果两个寝室之间的互联是通过VLAN,则结构如下:
这两个加起来,是不是最上面的那张图了。
接下来我们详细解读各个部分:
一、tap/tun设备
将guest system的网络和host system的网络连在一起
Tun/tap驱动程序中包含两个部分,一部分是字符设备驱动,还有一部分是网卡驱动部分
二、Openvswitch的基本概念
br-int & br-tun由Openvswitch实现
Openvswitch是一个virutal switch, 支持Open Flow协议,当然也有一些硬件Switch也支持Open Flow协议,他们都可以被统一的Controller管理,从而实现物理机和虚拟机的网络联通。
Openvswitch创建出来的虚拟交换机会保存很多Flow Table包含许多entry,每个entry是对packet进行处理的规则
Match Field涵盖TCP/IP协议各层:
Layer 1 – Tunnel ID, In Port, QoS priority, skb mark
Layer 2 – MAC address, VLAN ID, Ethernet type
Layer 3 – IPv4/IPv6 fields, ARP
Layer 4 – TCP/UDP, ICMP, ND
Action也主要包含下面的操作:
Output to port (port range, flood, mirror)
Discard, Resubmit to table x
Packet Mangling (Push/Pop VLAN header, TOS, ...)
Send to controller, Learn
这些Flow Table可以通过OpenFlow协议进行增删查改。
这些FlowTable里面的规则执行顺序安装Table的优先级来,高优先级的先执行,低优先级的后执行,执行过程中可任意修改网络包的内容,修改完毕后,可以扔给另一个Table,也可以直接output从一个虚拟口将包发出来。
相关阅读:觉得OpenStack的网络复杂?其实你家里就有同样一个网络 (2)
更多网易技术、产品、运营经验分享请点击。