1.NETCONF作用
NETCONF利用基于XML-RPC的通信机制实现配置客户端与配置服务器之间的通信,实现对网络设备的配置和管理。
2.NETCONF的技术规范
NETCONF分为四个层:传输协议层、RPC层、操作层、内容层。
(一)传输协议层
本设计中使用SSH加密,完成数据传输;
(二)RPC层
RPC层流程:
(1) 通过传输协议层模块得到NETCONF的请求报文后,就应交由RPC模块处理如果NETCONF报文经过了压缩或加密的话,先进行解压和解密
(2) 然后将RPC请求报文,用RFC4741的XML Schema文件进行验证
(3) 如果符合NETCONF的报文格式则解析文档中的RPC元素部分,进行RPC元素中message—id和命名空间属性的检查和保存
(4) 然后将内部的操作层元素取出传给操作层模块
(5) 如果操作层模块处理成功,返回正确的报文
(6) RPC模块再将返回的响应报文进行RPC层的封装,然后发送给对应的客户端。如果中途在某个环节检查错误或操作层模块错误,则统一封装成错误处理报文,发送给客户端
(三)操作层
9种操作
(1) NETCONF有九种基本操作:get-config、edit-config、copy-config、delete-config、get、lock、unlock、close-session、kill-session.
(2) 这些操作的参数都各不相同,因此每种操作都有自己的处理流程
(3) 以get-config为例说明:
get-config请求报文格式
<?xmlversion="1.0"?>
<rpcmessage-id="100"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter>
<top xmlns="http://www.h3c.com/comware:5.0/config/get">
指定模块,子模块,表名,列名
</top>
</filter>
</get-config>
</rpc>
get-config请求报文解析流程
(四)内容层
配置数据库
3.NETCONF实现流程
4.NETCONF关键技术实现
关键的环节包括:安全认证、建立加密传输通道、rpc-xml消息收发、rpc-xml文件解析、rpc-reply消息的生成。
(1)安全认证实现
使用ssh密钥认证方法,在Client端生成一对密钥,将公共密钥传给Server相关目录进行备份,借助libssh2函数库的相关函数完成安全认证。
(2)加密通道建立
借助SSHV2本地端口转发功能分别在Client端和Server端建立一个SSH隧道,实现Client端12500端口和Server830端口的数据经过SSH传输。
命令:ssh -2 –N–C –f –L 12500:172.16.15.213:830 (Client端执行)
命令:ssh -2 –N–C –f –L 830:172.16.15.213:12500 (Server端执行)
(3)xml-rpc消息收发
Client端需要将rpc-xml文件转换为内容为rpc请求的xml化的字符,send()到Server,Server端在recv()收到字符之后利用libxml2库函数生成rpc-xml文件的指针,借助xpath搜索原理进行相关数据定位,如果检索到相关操作关键字再调用相关函数生成rpc-reply文件并转换为字符格式send()到Client。
(4) xml消息的解析
NETCONF中有9种操作每一种操作的元素各不一样,因此要建立很多个流程来处理每一个操作,对rpc-xml请求的合法性以及想要获得的数据等进行定位,这个是RPC层需要实现的核心内容。
(5) xml消息的生成
原则上需要调用3个配置数据库的相关数据,执行并返回rpc-xml请求的结果。但是我是手动生成的rpc-reply消息,特别的rpc-error需要详细的错误信息,目前还不清楚怎么实现。