core的底层实现

在core的基本原理中提到了其创建过程,那么底层底层是怎么实现的?

1.core的主要部件包括如下

core-daemon

  • 管理给定网络的节点和链接的模拟会话
  • 节点是使用 Linux 命名空间创建的
  • 链接是使用 Linux 网桥和虚拟以太网对等体创建的
  • 通过链接发送的数据包使用流量控制进行操作
  • 提供 gRPC API

core-gui

  • GUI 和守护进程通过 gRPC API 进行通信
  • 拖放创建节点和链接
  • 可以在正在运行的会话中启动模拟节点的终端
  • 可以保存/打开方案文件以重新创建以前的会话

vnode

  • 用于创建 CORE 节点命名空间的命令行实用程序
  • 该命令是将底层Linux命名空间来创建节点容器封装了
  • 如vnoded -v c /tmp/pycore.1/n1 -l /tmp/pycore.1/n1.log -p /tmp/pycore.1/n1.pid -C /tmp/pycore.1/n1.conf

vcmd

  • 用于向节点发送 shell 命令的命令行实用程序
  • 其底层实现是core底层开了一个服务器,通过在终端发送vcmd命令,交给服务器执行
  • vcmd -c /tmp/pycore.1/n1 -- mount -n --bind /tmp/pycore.1/n1.conf/var.log /var/log

2.底层工作原理

CORE框架在Linux上运行并使用Linux命名空间来创建节点容器。这些节点使用Linux桥接和虚拟接口链接在一起。CORE会话是一组为了特定目的而一起运行的节点和链接。通过使用ebtables规则控制哪些接口可以发送和接收来模拟无线网络。

其底层就是通过一些命令创建节点,veth对与网桥形成一个网络

创建节点

#创建节点

//创建节点需要的命令
1.mkdir -p /tmp/pycore.1/n1.conf
2.vnoded -v c /tmp/pycore.1/n1 -l /tmp/pycore.1/n1.log -p /tmp/pycore.1/n1.pid -C /tmp/pycore.1/n1.conf
3.vcmd -c /tmp/pycore.1/n1 -- ip link set lo up
4.vcmd -c /tmp/pycore.1/n1 -- hostname n1
5.mkdir -p /tmp/pycore.1/n1.conf /var.run
6.vcmd -c /tmp/ pycore.1/n1 -- mkdir -p /var / run
7.vcmd -c /tmp/pycore.1/n1 -- mount -n --bind /trp/pycore.1/n1.conf/var.run /var/run
8.mkdir -p /tmp/pycore.1/n1.conf/var.log
9.vcmd -c /tmp/pycore.1/n1 -- mkdir -p /var /log
10.vcmd -c /tmp/pycore.1/n1 -- mount -n --bind /tmp/pycore.1/n1.conf/var.log /var/log

创建链路

//创建链路需要的步骤
//创建veth对
ip link add name {name} type veth peer name {peer}
//将veth对的一段放进容器内
ip link set {device} netns {namespace}
//将veth对的一段放到网桥上
ip link set dev {iface_name} master {bridge_name}

开启服务

//开启服务的步骤
ipforward
1.mkdir -p  /tmp/pycore.1/n1.conf/ipforward.sh
2.write data
3.vcmd -c /tmp/pycore.1/n1 -- bash ipforward.sh
-----
zebra
1.mkdir -p  /tmp/pycore.1/n1.conf/usr.local.etc.quagga
2.vcmd -c /tmp/pycore.1/n1 -- mkdir -p /usr/local/etc/quagga
3.vcmd -c /tmp/pycore.1/n1 -- mount -n --bind /tmp/pycore.1/n1.conf/usr.local.etc.quagga /usr/local/etc/quagga
-----
Quagga.conf
4.mkdir -p /tmp/pycore.1/n1.conf/var.run/quagga
5.mkdir -p /tmp/pycore.1/n1.conf/usr.local.etc.quagga
6.write data to quagga.conf
-----
vtysh.conf
'service integrated-vtysh-config\n'
7.创建quagga.boot并写入内容
-----
开启zebra
8.vcmd -c /tmp/pycore.1/n1 -- bash quaggaboot.sh zebra
'vcmd -c /tmp/pycore.1/n1 -- bash ipforward.sh'

具体过程

有线节点

节点1和节点2,和它们的信息iface1和iface2
对于节点1:
1.loaclname为veth1.0.1,确定name为veth1.0.1p
2.创建veth类
3.ip link add name veth1.0.1 type veth peer name veth1.0.1p
4.ip link set veth1.0.1p mtu 1500                                                                                                                                                                                                 
5.ip link set veth1.0.1 mtu 1500
6.ip link set veth1.0.1 up
7.ip link set veth1.0.1p netns 11227(11227为node的pid,看看这是哪条命令的返回值)
8.vcmd -c /tmp/pycore.1/n1 -- ethtool -K veth1.0.1p rx off tx off
9.vcmd -c /tmp/pycore.1/n1 -- cat /sys/class/net/veth1.0.1p/ifindex//运行这条命令,返回了了flow_id,不知道干什么用的
10.'vcmd -c /tmp/pycore.1/n1 -- cat /sys/class/net/veth1.0.1p/address' //获得mac地址,并把self.mac改成了这个
11.'vcmd -c /tmp/pycore.1/n1 -- ip link set veth1.0.1p name eth0'
12.'ip link set dev veth1.0.1 master b.3.1'
13.'ip link set veth1.0.1 up'
14.'vcmd -c /tmp/pycore.1/n1 -- ip link set dev eth0 address 00:00:00:aa:00:00'//iface_data
15.'vcmd -c /tmp/pycore.1/n1 -- ip address add 10.0.0.1/24 dev eth0'
16.'vcmd -c /tmp/pycore.1/n2 -- ip address add 2001::1/64 dev eth0'
17.'vcmd -c /tmp/pycore.1/n1 -- sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1'
18.'vcmd -c /tmp/pycore.1/n2 -- ip link set eth0 up'

无线节点

创建ctrl0网桥:
ip link add name ctrl0.1 type bridge
ip link set ctrl0.1 type bridge stp_state 0
ip link set ctrl0.1 type bridge forward_delay 0
ip link set ctrl0.1 type bridge mcast_snooping 0
ip link set ctrl0.1 type bridge group_fwd_mask 65528
ip link set ctrl0.1 up
ip link set ctrl0.1 mtu 1500
ip address add 172.16.0.254/24 dev ctrl0.1

创建veth pair
ip link add name veth2.99.1 type veth peer name veth2.99.1p
ip link set veth2.99.1p mtu 1500
ip link set veth2.99.1 mtu 1500
ip link set veth2.99.1 up
ip link set veth2.99.1p netns 22358
ip link set dev veth2.99.1 master ctrl0.1
ip link set veth2.99.1 up

对容器里面的pair进行的操作
vcmd -c /tmp/pycore.1/n2 -- ethtool -K veth2.99.1p rx off tx off
vcmd -c /tmp/pycore.1/n2 -- ip link set veth2.99.1p name ctrl0
vcmd -c /tmp/pycore.1/n2 -- ip link set dev ctrl0 address 00:16:3e:ac:23:1b
vcmd -c /tmp/pycore.1/n2 -- ip address add 172.16.0.2/24 dev ctrl0
vcmd -c /tmp/pycore.1/n2 -- ip link set ctrl0 up
vcmd -c /tmp/pycore.1/n2 -- ip route replace 224.1.2.8 dev ctrl0
vcmd -c /tmp/pycore.1/n2 -- emane -d -l 3 -r -f /tmp/pycore.1/n2.conf/eth0-emane.log /tmp/pycore.1/n2.conf/eth0-platform.xml
vcmd -c /tmp/pycore.1/n2 -- ip link show eth0
vcmd -c /tmp/pycore.1/n2 -- ip address add 10.0.0.1/24 dev eth0
vcmd -c /tmp/pycore.1/n2 -- ip address add 2001::1/128 dev eth0
vcmd -c /tmp/pycore.1/n2 -- sysctl -w net.ipv6.conf.eth0.keep_addr_on_down=1

开启容器节点的Quagga等服务
mkdir -p /tmp/pycore.1/n2.conf/usr.local.etc.quagga
vcmd -c /tmp/pycore.1/n2 -- mkdir -p /usr/local/etc/quagga
vcmd -c /tmp/pycore.1/n2 -- mount -n --bind /tmp/pycore.1/n2.conf/usr.local.etc.quagga /usr/local/etc/quagga
mkdir -p /tmp/pycore.1/n2.conf/var.run/quagga
mkdir -p /tmp/pycore.1/n2.conf/usr.local.etc.quagga
mkdir -p /tmp/pycore.1/n2.conf/usr.local.etc.quagga
vcmd -c /tmp/pycore.1/n2 -- bash quaggaboot.sh zebra
vcmd -c /tmp/pycore.1/n2 -- bash ipforward.sh

这就是他的基本过程,可以发现,core其实就是把这些命令组合一起,将所有容器节点连接到一起,并在容器中运行路由协议实现网络仿真。

无线的特点就是多了一个包处理过程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值