五、南向接口协议(四)——NetConf协议

1 什么是NetConf协议

netconf协议最早被作为网管协议被提出来的,与SNMP网管协议相比较:
SNMP的优势在于网络设备的监测,在大规模网管应用中有很大不足,正是针对这种不足之处,提出了NETCONF协议。
总结:

  1. 新一代网管协议
  2. 网络配置协议NETCONF(Network Configuration Protocol)提供一套管
    理网络设备的机制
  3. 2003年成立了NETCONF工作组,2011年更新版的RFC 6241发布
  4. NETCONF协议虽然是多个SDN控制支持的南向协议,但是他无法指导交换机进行数据转发,它与OF-Config OVSDB协议类似,是一种网络设备的配置管理协议

NETCONF协议优点(与SNMP比较):
在这里插入图片描述

2 NetConf协议的其他特点

  • 区分配置数据和状态数据,提供不同的操作进行数据的增删改查。
    • 配置数据(configuration data):对网络设备进行配置的数据;
    • 状态数据(state data):反映设备状态的数据。
  • 存在多个配置数据库
    在这里插入图片描述
    说明:
  • Running数据库代表目前在设备上运行的配置,这个配置数据库一般提供持久化操作的指令。例如思科交换机可以通过copy命令将当前的running配置保持到startup配置,用于设备重启后的配置恢复
  • NETCONF可以支持candidate,就相当于多了一个闲置的练手数据库,可以在candidate配置数据库上进行反复配置,直到得到想要的结果,然后用commit操作将candidate的配置覆盖running配置数据库
  • 另外可以通过copy-config命令将running配置覆盖startup配置数据库。

3 NETCONF协议框架

在这里插入图片描述

3.1 NETCONF传输层

  1. 为NETCONF连接提供可靠的序列号发送机制
  2. 提供了认证、数据完整性和安全性保障
  3. SSH作为其承载协议
    当一个安全连接建立后,客户端和服务端会通过hello消息,进行一次NETCONF消息交互

3.2 NETCONF消息层(采用RPC协议)

  • 采用基于RPC的通讯机制;
  • <rpc>:请求
  • <rpc-reply>:响应
    再交换过hello消息后,NETCONF客户端向服务端发送rpc消息对服务端的设备进行配置管理,服务端对每个rpc请求发送rpc-reply进行回应

3.3 NETCONF操作层(NETCONF核心)

提供对数据库信息的获取、配置、复制和删除等功能
在这里插入图片描述

3.4 NETCONF内容层

在这里插入图片描述

4 操作举例

4.1 <get-config>

在这里插入图片描述

  1. 控制器通过RPC请求,获取交换机的配置信息,
  2. 从RPC请求的XML文档可以看出,标签标识消息层的rpc请求,get-config标签代表操作层的操作。running标签说明操作的对象是running数据库
  3. 从RPC响应的xml文档可以查看,所获取的交换机的datapath-id,所连接的控制器角色,ip和端口号等信息

4.2 <edit-config>

edit-config操作对目标数据库进行编辑,操作的属性主要包括 create replace replace merge delete

在这里插入图片描述

4.3 <copy-config>

在这里插入图片描述

4.4 <delete-config>

在这里插入图片描述

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Netconf是一种网络配置协议南向接口设备端代码需要根据具体的设备和协议版本进行开发。一般来说,设备端代码需要实现以下功能: 1. 连接管理:设备端代码需要支持netconf协议的连接管理,包括建立连接、维护连接、关闭连接等。 2. 协议解析:设备端代码需要支持netconf协议的解析,包括接收和解析客户端发送的请求,生成并发送响应等。 3. 配置管理:设备端代码需要支持设备的配置管理,包括读取设备配置、修改设备配置等。 4. 错误处理:设备端代码需要支持错误处理,包括发送错误信息给客户端、记录错误日志等。 以下是一个简单的设备端代码示例,仅供参考: ```python import ncclient from ncclient import manager def connect(device_ip, device_port, device_username, device_password): """ 建立与设备的netconf连接 """ try: device = manager.connect( host=device_ip, port=device_port, username=device_username, password=device_password, device_params={'name': 'junos'}, hostkey_verify=False ) return device except Exception as e: print(e) def get_config(device, filter): """ 读取设备配置 """ try: return device.get_config(source='running', filter=filter).data_xml except Exception as e: print(e) def edit_config(device, config): """ 修改设备配置 """ try: device.edit_config(config=config) except Exception as e: print(e) def close(device): """ 关闭与设备的netconf连接 """ device.close_session() if __name__ == '__main__': device_ip = '192.168.1.1' device_port = 830 device_username = 'admin' device_password = 'admin' device = connect(device_ip, device_port, device_username, device_password) if device: filter = '<configuration><system/></configuration>' config = '<configuration><system><hostname>new_hostname</hostname></system></configuration>' print(get_config(device, filter)) edit_config(device, config) close(device) ``` 在这个示例中,我们使用ncclient库建立与设备的netconf连接,并实现了读取和修改设备配置的功能。这个示例只是一个简单的示例,并不能直接应用于实际生产环境中,需要根据具体的设备和协议版本进行开发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值