Easymesh之拓扑模块(二)

接着上一篇 :Easymesh 基础知识(一)-CSDN博客

这一篇主要对拓扑模块进行引入、一起抓取分析下相关的报文并分析,报文大概分为下面几种类型:Topo discovery、Topo notification、Topo query、Topo response。

一、TLV消息格式

在讲具体的拓扑类型报文之前,让我们先学习下一种漂亮的组织数据方式 TLV。

T:type,消息类型

L:Length,消息负载长度

V:Vaule,消息负载

只要按照规范定义好的消息格式,通过TLV就可以很轻松的取出报文的数据。

二、拓扑发现(Topo discovery)

1、广播报文

2、消息类型(MT):0x0000

3、主动发送 + 周期60s发出

Easymesh之拓扑模块(二)_第1张图片

这是一个Topo discovery报文,包含2个TLV信息 和 1个End TLV结束标志。

第一个 TLV 是设备的 AL MAC,第二个是发送网卡的 AL MAC。

注:这里引入一个概念,AL MAC:AL MAC用来标识一个 1905 设备,而不是平时使用的网卡 MAC。从报文中可以看到,二层 src、dst 的 MAC 地址使用的都是 AL MAC,表示这个包是由哪个 1905设备发出,要送往哪个1905设备。

比如,我这里是主网关发出的一个 Topo discovery 广播报文。目的地址为组播地址 01:80:C2:00:00:13,使用 br0 mac 作为 AL MAC(22:33:44:55:11:22),发送报文时通过 eth0 网卡发出(22:33:44:55:28:23)。

其实,1905设备会周期60s发出Topo discovery报文,我这里是周期60s往 br0 桥下每个网卡都发送一个Topo discovery。假设 br0 桥下有四个网卡,eth1~eth4,那发送4个Topo doscovery,每个报文 src、dst都是一样的(src 使用的br0 mac 作为AL MAC 表示一个1905设备,dst使用1905组播 MAC);只有第二个 TLV(0x02)有所区别,用eth1~eth4 的 mac 填充。

三、拓扑查询(Topo query)

1、单播报文

2、消息类型(MT):0x0002

3、当收到一个拓扑发现报文后,会单播一条拓扑查询报文到对方,以此探查对方设备信息。

Easymesh之拓扑模块(二)_第2张图片

四、拓扑响应(Topo response)

1、单播报文

2、消息类型(MT):0x0003

3、当设备收到拓扑查询报文后,会组织设备自身信息封装为Topo response报文进行响应

Easymesh之拓扑模块(二)_第3张图片

主要包含几个TLV:

1、1905 device infomation type(0x03)

包含桥下(本地)网卡数据

2、Device bridging capability(0x04)

包含设备桥能力集:多少个桥设备、每个桥设备下有哪些网卡

3、1905 neighbor device(0x07)

1905邻居:即1905设备邻居(Controller 或者 Agent)

4、non 1905 neighbor device(0x06)

非1905邻居:即非1905设备邻居,如 PC、手机等下挂

5、Supported service infomation(0x80)

标识自己是 Controller 或是 Agent 角色

6、AP operational BSS(0x83)

AP的BSS信息

7、Associated client

无线下挂信息

五、Topo notification(Topo 通知)

1、广播报文

2、消息类型(MT):0x0001

3、向网络通知自己的网络拓扑变化

Easymesh之拓扑模块(二)_第4张图片

六、拓扑消息交互

Easymesh之拓扑模块(二)_第5张图片

如上图,

1、Agent1广播Topo discovery

2、Agent2 收到后会单播 Topo query 到 Agent1

3、Agent1 收到 Topo query 后会单播响应 Topo response 到 Agent2

4、Agent3 行为同 Agent2 一样

七、拓扑消息报文

相关报文已经上传网盘,有需要的可以下载。

链接:https://pan.baidu.com/s/1-q-zS5gnX50Iibf96GYvdg 
提取码:9f3l

你可能感兴趣的:(Easymesh,网络,service_mesh)