1.1 CORE通信逻辑
CORE是一个构建虚拟网络仿真的工具。其仿真的本质就是以相互隔离的容器来模拟现实生活中的真实的网络设备,如PC,Router,Wifi等;然后以这些容器在Linux系统上构建出的实时运行的真实计算机网络,来模拟现实生活中的网络通信场景。以下是关于CORE中节点(容器)之间怎么实现通信的底层逻辑解释。
1.1.1 节点与容器
图1.1 CORE拓扑
如图1.1所示,这是一个包含了7个CORE节点的仿真拓扑,左边模拟的是PC和Router直接相连的场景,右边模拟的是Switch交换机将PC和Router连接在一起的场景。在CORE中,主要分为以下三类节点:
类型1:容器类节点。如图1.1中的n1,n2,n7等都属于容器类节点;CORE主要的容器类节点有如下几种。这些容器类节点,它们的本质就是一个容器;他们是由 Linux 网络命名空间(namespace)提供支持。它们使用很少的系统资源来模拟网络。不过,它们共享主机文件系统,因为它们没有自己的文件系统。但是CORE会在仿真开启的时候为它们创建一个目录,作为保存它们的文件和挂载日志的地方,这些目录通常会在关闭时被删除。
名称 | PC | Router | MDR | Docker | LXC |
主要功能 | 具有默认路由的基本仿真机,默认情况下不运行任何进程 | 运行Quagga OSPFv2和OSPFv3的路由,以转发数据包。 | 运行Quagga OSPFv3 的MDR路由,实现城域网优化路由。 | Docker类型的容器 | LXC类型的容器 |
类型2:Net类节点。如图1.1所示,其中的n4就属于net类型的节点;CORE中主要有以下几种Net类型的节点,如表1.2;Net类型的节点本质上就是一个Linux网桥,当这些类型的节点启动的时候会直接创建一条Linux网桥
名称 | Hub | Switch | WirelessLAN | Emane |
主要功能 | 以太网集线器将接收到的数据包转发给每个连接的节点。 | 以太网交换机使用以太网地址哈希表将接收到的数据包智能转发给连接的主机。 | 当路由器连接到该WLAN节点时,它们就加入了一个无线网络。 | Emane具有自己独特的无线仿真模块,可以适配大部分无线仿真场景 |
类型3:工具类节点相关:如表1.3所示的RJ45和Tunnel属于和物理机相连的接口工具,一般用于和真实的物理机通信的时候使用。
名称 | RJ45 | Tunnel |
主要功能
| 可将仿真节点与真实物理接口连接;使用该工具,可将真实网络和设备与实时运行的仿真进行物理连接。 | 通过使用GRE隧道来连接多个CORE仿真。
|
1.1.2 节点之间的通信逻辑
CORE容器类节点之间的通信主要是通过使用veth对,然后连接网桥来实现的。如图1.2所示,为图1.1左边的3个节点相互连接的时候,CORE容器之间相互通信的连接过程。
图1.2 CORE节点通信的连接过程
CORE中每有两个节点相互连接,需要通信的时候主要步骤如下:
- 首先CORE会创建一条linux网桥,作为容器通信的渠道
- 其次会创建一个veth对,一端接在容器里面,另一端接在网桥上。
- 这个时候对接在容器中的veth对进行编辑,为它添加IP地址,修改它的mac地址,以及名字(修改成eth这种接口名字)。完成这一系列操作之后,veth对接在容器中的这一端就成为了容器之间用于通信的网卡。
在图1.1中,还有三个容器类节点连接到Net类节点的场景,此时这些节点之间的通信和之前的3个容器类节点直接相连类似,只是这个时候就不需要新建网桥了,因为Net类节点本身自己就是一根网桥,这个时候的原理如图1.3下:
图1.3 CORE节点通信的连接过程
1.1.3 分布式情况下节点之间的通信原理
如图1.4所示,两个节点的分布式拓扑,分别位于两个从机CORE1和CORE2之上。
图1.4 两个节点的分布式拓扑
工作原理如图1.5所示
图1.5 分布式通信创建流程图
主要步骤。
- 生成节点:在从机上生成容器。
- 生成VETH对:每生成一个节点,就在对应计算机上生成一对VETH对,并且将VETH对的一端放入到容器中。
- 生成网桥:分布式模式之下,不管两端是属于哪个计算机,CORE会在每个和主机相连的计算机,和主机本身中都生成一个网桥,并且将VETH对的另一端与网桥连接。
- 创建隧道:CORE对链路的两端(不管两个接口是否属于同一个计算机)都创一条通往主机的GRE隧道,并且将隧道端口与刚刚创建的网桥连接。