4-1 LLDP服务和JSON格式
介绍
链路发现协议介绍
LLDP协议:(Link Layer Discovery Protocol)是IEEE 802.1ab中定义的链路层发现协议。LLDP是一种标准的二层发现方式,可以将本端设备的管理地址、设备标识、接口标识等信息组织起来,并发布给自己的邻居设备,邻居设备收到这些信息后将其以标准的管理信息库MIB(Management Information Base)的形式保存起来,以供网络管理系统查询及判断链路的通信状况。
目的: 随着网络规模越来越大,网络设备种类繁多,并且各自的配置错综复杂,对网络管理能力的要求也越来越高。传统网络管理系统多数只能分析到三层网络拓扑结构,无法确定网络设备的详细拓扑信息、是否存在配置冲突等。因此需要有一个标准的二层信息交流协议。 LLDP提供了一种标准的链路层发现方式。通过LLDP获取的设备二层信息能够快速获取相连设备的拓扑状态;显示出客户端、交换机、路由器、应用服务器以及网络服务器之间的路径;检测设备间的配置冲突、查询网络失败的原因。企业网用户可以通过使用网管系统,对支持运行LLDP协议的设备进行链路状态监控,在网络发生故障的时候快速进行故障定位。 1
实验设计

S0交换机和Cloud结构与2-1节相同。
在S0交换机上分出几台其它设备构成拓扑网络,所有节点开启LLDP网络发现。
在S0上获取拓扑节点信息,使用netmiko库ssh连接远程服务器,通过lldp协议获取S0节点相关的拓扑信息。
处理拓扑信息数据,使用graphviz绘制拓扑图。
1.S5700与物理机互通
2.配置SSH
详见3-1SSH协议.md
因为需要先远程连接服务器,才能做后面的事,重复SSH内容。
3.更多设备节点和命名设备
拉出更多S5700设备,启动,与第一台S5700连接。
分别登录设备,顶级节点命名为S0 ,另外的命名为S1、S2。
4.分别开启LLDP服务
一行命令即可开启LLDP功能。所有设备都分别开启。
5.或直接导入工程
鉴于内容跟之前两章重复,也可以直接导入。
6.验证结果
在S0设备上输入
能看到回显信息,与S0连接的S1、S2节点信息为成功。

JSON格式
介绍
JSON:(JavaScript Object Notation,JavaScript 对象表示法)是一种轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成,广泛应用于 Web 应用程序中。
想一想为什么需要json格式?直接将输出存储在本地记事本中;存储在数据库中;将信息从一台服务器发送至客户端;服务器上使用的编程语言和框架各部相同。
数据类型和语法
数据类型
字符串:由双引号包围的 Unicode 字符序列。
数字:可以是整数或浮点数。
布尔值:true 或 false。
数组:由方括号 [] 包围的有序值序列,值之间用逗号分隔。
对象:由花括号 {} 包围的键值对集合,键值对之间用逗号分隔,键和值之间用冒号分隔。
空值:null。
语法规则:
数据以键值对的形式存在。
键值对之间用逗号分隔。
对象由花括号 {} 包围。
数组由方括号 [] 包围。
字符串必须用双引号包围。
示例:
与Python Dict字典的区别
虽然长的跟Python字典完全一致,但只是恰巧罢了。Dict字典是Python内置的数据结构,在硬盘上以二进制字节存在,我们看到的是解码后的信息。
Python的dict字典、Javascript的对象、Java的Map都是键值对映射,支持的数据类型和语法甚至完全一样,以至于看上去一样,但它们的具体实现和存储在硬盘上的字节肯定是不一样的。
因此,需要XML、JSON这种可以作为中间通用格式的字符串存在。
Json字符串与python Dict互转
使用内置库json。
dict转json字符串: dict.dumps()
json字符串转dict: jsonstring.loads()
注意:dict.dump()和string.load()方法针对文件。