简单网络管理协议,则是一种广泛使用的管理协议,其定义了一套用于连接到IP网络设备通信的标准。SNMP提供了一种用于对网络设备进行监视与控制的方法。与思科IOS的IP SLA操作(IP Service Level Agreement, IP 网络服务等级协议,该特性通过使用活动流量监视来测量网络性能,而允许客户对IP服务等级进行分析)一样,SNMP可用于收集统计数据、监测设备性能,以及提供到网络的一个基线(a baseline of the network),且SNMP是使用最为广泛的网络维护与监测工具之一。
尽管SNMP可以提供流量统计,但其无法区分各种数据流(While SNMP can provide traffic statistics, SNMP cannot differentiate between individual flows)。不过思科IOS的Netflow就可以做到。数据流(A flow)简单地就是一系列的、有着同样源与目的地址、源与目的端口、协议接口,以及同样的服务参数类(Class of Service parameters)的数据包。
`Syslog`使用用户数据报协议(User Datagram Protocol, UDP),作为所采用的传输机制,因此数据包没有被排序与确认。因为UDP没有包含在TCP中的额外开销(the overhead included in TCP),这意味着在某些重度使用的网络中,一些数据包可能被丢弃,而因此导致记录的信息丢失。不过思科IOS软件允许管理员出于冗余目的,配置多台`syslog`服务器。`syslog`方案由两个主要元素构成:`syslog`服务器与`syslog`客户端。
`syslog`报文的优先级,同时表示了设施,与报文的严重程度(The priority of a syslog message represents both the facility and the severity of the message)。此数字是一个8位的数字。前3个最低有效位(The first 3 least significant bits),表示报文的严重程度(在3位的情况下,可表示8中不同的严重程度),其它5位表示了某项设施。可使用这些值,来对`syslog`守候程序中的事件进行过滤。
此外,一些地方使用标准时间(Standard Time)与夏令时间(Dayligh Saving Time)。考虑这个因素,那么在手动配置系统时钟时,确保于所有设备上正确设置系统时间(标准还是夏令时)就很重要了。下面的配置实例,演示了如何将系统时钟,设置为比GMT晚6个小时的中部标准时间(Central Standard Time, CST)时区的2010年10月20日上午12点40分:
NTP使用层的概念(a concept of a stratum),来描述某台机器距离权威时间源有多少跳。请记住这不是路由或交换的条数,而是NTP跳数,这是一个完全不同的概念。一台层`1`的时间服务器(A stratum 1 time server),通常具有一个直接安装的无线电或原子钟,同时一台层`2`的时间服务器(a stratum 2 time server),则是通过NTP从层`1`的时间服务器接收其时间,如此等等。在某台设备被配置了多台NTP参考服务器时,它将自动选择有着配置为通过NTP进行通信的最低层编号的机器,作为其时间源(When a device is configured with multiple NTP reference servers, it will automatically choose as its time source the machine with the lowest stratum number that it is configured to communicate with via NTP)。
在思科IOS软件中,使用全局配置命令`ntp server [address]`,来将某台设备配置带有一台或多台NTP服务器的IP地址。如先前指出的那样,可通过重复使用同样的命令,指定多个NTP参考地址。此外,该命令还可用于配置服务器与客户端之间的安全及其它特性。下面的配置实例,演示了如何将某台设备配置为将其时间与一台有着IP地址`10.0.0.1`的NTP进行同步:
接着的`st`字段表示该参考的层(the stratum of the reference)。从上面的打印输出,可以看到`10.0.0.1`的NTP设备有着`5`的层数。本地设备的层数,将增加`1`到值`6`,如下所示,因为其是从有着层`5`的服务器出接收到的时间源。如有另一台设备被同步到该本地路由器,那么它将反应出一个`7`的层数,如此等等。用于检查NTP配置的第二个命令,就是`show ntp status`命令了,其输出如下面所示:
```console
R2#show ntp status
Clock is synchronized, stratum 6, reference is 10.0.0.1
nominal freq is 249.5901 Hz, actual freq is 249.5900 Hz, precision is 2**18
reference time is C02C38D2.950DA968 (05:53:22.582 UTC Sun Mar 3 2002)
clock offset is 4.6267 msec, root delay is 3.16 msec
root dispersion is 4.88 msec, peer dispersion is 0.23 msec
简单网络管理协议,是一个应用层(`Layer 7`)协议,使用UDP端口`161`与`162`,促进网络设备之间管理信息的交换。一个SNMP管理的网络,由管理系统、代理程序及所管理的设备构成(An SNMP-managed network consists of a management system, agents, and managed devices)。其中,管理系统执行监控应用及对所管理的设备进行控制。其也执行大多数的管理流程,并提供了用于网络管理的大部分存储资源。某个网络科恩该是由一套或多套的管理系统所管理。
代理程序,则是出于各个受管理的设备之上,而对本地管理信息数据,比如性能信息或事件与软件装置中捕获到的错误信息(error information caught in software traps),转换为管理系统可读取的形式。SNMP代理程序使用将数据传输到网络管理软件的[SNMP`get-request`指令](pdfs/06-ch06.pdf)。SNMP代理程序从管理信息库(Management Information Bases, MIBs)或从错误或修改陷阱设置处捕获数据,而管理信息库则是设备参数与网络数据存放的地方(SNMP agents capture data from Management Information Bases(MIBs), which are device parameters and network data repositories, or from error or change **traps**)。
SNMP陷阱简单地就是就网络上的某个状况,通知SNMP管理器的消息(SNMP traps are simply messages that alert the SNMP manager of a condition on the network)。一个SNMP陷阱的实例,可能包含了某个接口从`up`状态过渡到了`down`状态。SNMP的主要问题在于它们是无确认的。这就意味着发出设备无法确定该陷阱是否被NMS接收到。
而SNMP通知命令,则是包含了来自SNMP管理器的接收确认的SNMP陷阱。这些消息可用于表示诸如失败的认证尝试,或失去到邻居路由器的连接等消息。管理器在没有接收到通知请求的情况下,它就不发送响应。而发送者在从没有接收到响应的情况下,通知请求可被再度发送。因此,SNMP的通知,更可能抵达其想要的目的(Thus, informs are more likely to reach their intended destination)。
`SNMPv2`对`SNMPv1`进行了修订,包含了在性能、安全性、保密性及管理器到管理器通信等方面的提升。`SNMPv2`还定义了两种新的操作(命令、operations):`GetBulk`与`Inform`。`GetBulk`用于有效地获取大块的数据(large blocks of data)。`Inform`操作允许一个网络管理站发送陷阱信息到另一网络管理站,并于随后接收一个响应。在`SNMPv2`中,如某个对`GetBulk`操作进行响应的代理程序无法在一个清单中提供所有变量的值,那么它就提供部分结果。
在思科IOS软件中,使用`snmp-server host [hostname | address]`命令,来指定本地设备将发送陷阱或通知的目的主机名或IP地址。为实现网络管理站对本地设备的轮询,`SNMPv1`与`SNMPv2`要求使用全局配置命令`snmp-server community <name> [ro | rw]`,为只读或读写访问,指定一个共有字符串(a community string)。
`SNMPv3`蜜柑有使用这种同样的基于共有的安全形式(the same community-based form of security),而是使用了用户与组的安全(user and group security)。下面的配置实例,演示了如何配置带有两个共有字符串的本地设备,其一用于只读访问,另一个用于读写访问。此外,该本地设备还配置了为思科IOS的SLA(Service Level Agreement, 服务级别协议)操作/命令与`syslog`,而使用只读共有字符串,将SNMP陷阱发送到`1.1.1.1`:
这两个工具之间的第二个不同,就是SNMP是一种基于轮询的协议(a poll-based protocol),意味着受管理设备被轮询信息。在那些SNMP设备发送陷阱(甚至报告,even report)到管理站的实例中,也可认为它是基于推送的(push-based)。而思科IOS的NetFlow,则是基于推送的技术,意味着配置了NetFlow的设备,是将其收集的信息发送出来,到某个中心存储库的。由于这个原因,NetFlow与SNMP互为补充,可作为标准网络维护与监控工具套件(the standard network maintenance and monitoring toolkit)的组成部分。但它们并非各自的替代;这是一个常被误解的概念,重要的是记住这一点。
3. 就那些已经有一段时间不活动的、以被终止的,或者仍活动但超出了活动计时器的数据流,对NetFlow进行搜索(The NetFlow cache is searched for flows that have been inactive for a certain period of time, have been terminated, or, for active flows, that last greater than the active timer)。
4. 将这些已标识出的数据流导出至NetFlow收集器服务器(Those identified flows are exported to the NetFlow Collector server)。
5. 将接近30到50个数据流打包在一起,并通常经由UPD进行传送。
6. NetFlow收集器软件从数据创建出实时或历史性的报告。
在配置思科IOS的NetFlow特性时,需要三个主要步骤,如下所示:
1. 在那些希望对信息进行捕获并在流缓存中存储的所有接口上,使用接口配置命令`ip flow ingress`,把接口配置为将数据流捕获进入NetFlow缓存。重要的是记住NetFlow仅在每个接口的基础上配置的(Configure the interface to capture flows into the NetFlow cache using the `ip flow ingress` interface configuration command on all interfaces for which you want information to be captured and stored in the flow cache. It is important to remember that NetFlow is configured on a per-interface basis only)。
> **Dario先生的提醒**:命令`ip route-cache flow`可在物理接口及其下的所有子接口上,开启(NetFlow)数据流(the `ip route-cache flow` command will enable flows on the physical interface and all subinterfaces associated with it)。
> 此外,在NetFlow版本5下,唯一选项是使用`ip flow ingress`命令来监视上传统计数据(with NetFlow v5, the only option was to monitor inbound statistics using the `ip flow ingress` command)。不过随着NetFlow版本9的发布,现在就了使用`ip flow egress`命令,来对离开各个接口的流量进行监控的选择了。