接着上一篇 :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发出
这是一个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、当收到一个拓扑发现报文后,会单播一条拓扑查询报文到对方,以此探查对方设备信息。
四、拓扑响应(Topo response)
1、单播报文
2、消息类型(MT):0x0003
3、当设备收到拓扑查询报文后,会组织设备自身信息封装为Topo response报文进行响应
主要包含几个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、向网络通知自己的网络拓扑变化
六、拓扑消息交互
如上图,
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