关于NCSI的标准介绍,我们可以参考DMTF的文档,链接:
https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.1.0.pdf
https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0b.pdf
也可以参考下面这篇IBM曾经的文章,现在已经失传。
王俊元, 软件工程师, IBM
王寒芷, 软件工程师, IBM
简介: NCSI(Network Controller Sideband Interface)是一个由分布式管理任务组(Distributed Management Task Force, DMTF)定义的用于支持服务器带外管理的边带接口网络控制器的工业标准,由一个管理控制器和多个网络控制器组成。DMTF 为 NCSI 定义了完整的基于以太网的控制命令请求和应答标准,此外,NCSI 还具备单线程,超时重传等机制。本文结合NCSI标准,简单演示了在 Linux 网络协议栈中注册、初始化 NCSI 协议,并且利用 socket 接口实现一个完整的 NSCI 操作的过程。
引言
网络技术的飞速发展使得人们对于服务器的带外可管理性及可控制性提出了更高的要求。通过带外管理,工程师可以在任意地点通过网络连接到相应的服务器上,进行一系列的管理与维护,而不再需要长时间驻守在嘈杂的实验室环境中。NCSI(Network Controller Sideband Interface)就是一个由分布式管理任务组(Distributed Management Task Force, DMTF)定义的用于支持服务器带外管理的边带接口网络控制器的工业标准。
NCSI 的简单介绍
NCSI 的简单介绍
一般地,服务器的网络管理模块结构如图 1 所示:
它主要包括:一个管理控制器(Management Controller, MC),一个或多个(NCSI 的电气特性最多支持 4 个)网络控制器(Network Controller, NC)。网络控制器一方面连接了外部网络接口与内部主机接口,另一方面,又与管理控制器之间有一个带外接口。
通过带外接口的网络数据包主要分为两类:一类是在外部网络与管理控制器之间传输的普通数据包,网络控制器对于这类数据包只作转发处理;另一类是在管理控制器与网络控制器之间传输的携带控制信息的数据包,他们往往是管理控制器对网络控制器配置的一些修改操作,对于这类数据包,网络控制器需要做出相应的响应。而管理控制器与网络控制器之间的带外接口的电气性质以及通信协议,就是由 NCSI 来定义的。
此外,NCSI 还提供了相应的传输协议栈来保证这种带外管理。NCSI 的传输协议栈如图 2 所示:
从图 2 中可以看到:
- 在 NCSI 的传输协议栈中,位于最底层的是物理层,NCSI 的物理层是基于 RMII 接口的;
- 位于物理层之上的是数据链路层,NCSI的数据链路层是基于以太介质的;
- NCSI 支持的位于数据链路层之上的协议主要有两种:一种是管理控制器与网络控制器之间交互的 NCSI命令协议,另一种是管理控制器与外部网络通信的网络数据协议,如:ARP 协议、DHCP 协议、NetBIOS协议等,它们只是被网络控制器在管理控制器和外部网络之间作转发处理。在本文中,我们着重讨论第一种协议,也就是控制命令协议。
NCSI 控制命令协议
NCSI 控制命令允许管理控制器初始化、规范化自己的 NCSI 接口流量,配置 NCSI 信道过滤规则以及监控网络控制器的运行状态。作为 NCSI 控制命令协议的主体,管理控制器是所有控制命令的发起者,而网络控制器则响应管理控制器发送的控制命令。
NCSI 实例号(IID)
所有通过 NCSI 命令发送的 NCSI 请求都有一个唯一的标识符 Instance ID(IID)。IID 是一个 8 比特长的标识序列。每个 NCSI 响应包的 IID 都等于所对应的 NCSI 请求包的 IID。通过使用 IID,可以有效地识别新的 NCSI 请求,提高 NCSI 请求与响应匹配的鲁棒性,并且区分新的 NCSI 请求与超时重传的 NCSI 请求。
网络控制器在收到标记有 IID 的 NCSI 请求时,会遵循如下的操作原则:
在响应的包的相应位置会标记有该 NCSI 响应对应的 NCSI 请求的 IID。
如果收到的 NCSI 请求的 IID 与之前收到的相同,则表明这是一个超时重发的 NCSI 请求。NCSI 标准规定,此时网络控制器必须对重发的 NCSI 请求作出响应。网络控制器可以根据具体的 NCSI 命令,返回前一次 NCSI 命令的执行结果,如果该执行结果在当前时刻还没有失效。或者,网络控制器也可以重新在当前时刻再执行一遍 NCSI 命令。
如果收到的 NCSI 请求的 IID 与之前收到的不同,则网络控制器必须将这个请求看成是一个新的 NCSI 请求。