TCP/IP学习笔记(七)
一、SNMP:简单网络管理协议
基于TCP/IP的网络管理包括两部分:网络管理站(manager)和被管理的网络单元(被管设备)。这些被管设备的共同点就是都运行TCP/IP协议。管理进程和代理进程之间的通信有两种方式,一种是管理进程向代理进程发出请求,询问参数值,另一种方式是代理进程主动向管理进程报告某些重要的事件。
基于TCP/IP的网络管理包含3个组成部分:
(1) 一个管理信息库(MIB)。管理信息库包含所有代理进程的所有可被查询和修改的参数。
(2) 关于MIB的公用结构和表示符号,叫做管理信息结构SMI。例如:SMI定义计数器是一个非负整数,它的计数范围是0-4294967295,当达到最大值后,又从0开始。
(3) 管理进程和代理进程之间的通信协议,叫做简单网络管理协议SNMP。SNMP包括数据交换的格式等,主要采用UDP协议。
1、协议:SNMP定义了5种报文:
(1) get-request操作:从代理进程处提取一个或多个参数值。
(2) get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
(3) set-request操作:设置代理进程的一个或多个参数值。
(4) get-response操作:由代理进程发出的一个或多个参数值。它是3种的响应操作。
(5) trap操作:代理进程主动发出的报文,通知管理进程由事情发生。
前面3个操作是由管理进程向代理进程发出的,后两个是代理进程发给管理进程的。
说明:◆前4种操作是简单的请求-应答方式,由于采用UDP协议,因此一定要有超时和重传机制。
◆ 管理进程采用UDP的161端口,代理进程使用UDP的162端口,因此一个系统可以同时为管理进程和代理进程。
◆ 下面是UDP数据报5种操作的SNMP报文:
IP首部 | UDP首部 | 版本0 | 共同体 | PDU类型(0-3) | 请求标识 | 差错状态(0-5) | 差错索引 | 名称 | 值 | 名称 | 值 | ... |
PDU类型4 | 企业 | 代理地址 | Trap类型(0-6) | 特定代码 | 时间戳 | 名称 | 值 | ... |
(1) SNMP报文的长度取决域变量的类型和值。
(2) 版本字段为0,表示为SNMP V1。
(3) PDU为协议数据单元,即分组。
PDU类型 | 名称 |
0 | Get-request |
1 | Get-next-request |
2 | Get-response |
3 | Set-request |
4 | Trap |
(4) 共同体为一个字符串,这是管理进程和代理进程之间的口令,是明文格式,默认为public。
(5) 对于get、get-next和set操作,请求标识由管理进程设置,然后由代理进程在get-response中返回。这个字段的作用是使客户进程(目前是管理进程)能够将服务器进程(即代理进程)发出的响应和客户进程发出的查询进行匹配。这个字段允许管理进程对一个或多个代理进程发出多个请求,并且从返回的应答中分类。
(6) 差错状态字段是一个整数,由代理进程设置,指明有错误发生。
差错状态 | 名称 | 描述 |
0 | NoError | 没有错误 |
1 | TooBig | 代理进程无法把响应放在一个SNMP消息中发送 |
2 | NoSuchName | 操作一个不存在的变量 |
3 | BadValue | Set操作的值或语法有错误 |
4 | ReadOnly | 管理进程试图改变一个只读变量 |
5 | genErr | 其他错误 |
(7) 在get、get-next和set的请求数据报中,包含变量名称和变量值的表,对于get和get-next操作,变量值部分被忽略。
2、 管理信息结构SMI
(1) INTEGER:有些整形变量没有范围限制,有些整形变量定义为特殊的数值。
(2) OCTER STRING:0或多个8位字节,每个字节值在0-255之间。
(3) DisplayString:0或多个8位字节,每个字节必须是ASCII码,所有该类型的变量不能超过255个字符。
(4) OBJECT IDENTIFIER:
(5) NULL:相关变量还没有值。
(6) IPAddress:4字节的OCTER STRING,以网络序表示的IP地址,每个字节代表IP地址的一个字段。
(7) PhyAddress:OCTER STRING类型,代表物理地址。
(8) Counter:非负整数,范围为0-4294976295,达到最大后从0开始。
(9) Gauge:非负整数,范围为0-4294976295,或增或减,达到最大值后锁定,直到复位。
(10) TimeTicks:时间计数器,以0.01秒递增,但是不同的变量可以有不同的递增幅度,所以定义该类变量时必须指定递增幅度。
(11) SEQUENCE:类似于结构,包括0个或多个元素。
(12) SEQUENCE OF:向量,其所有元素具有相同的类型。
3、 对象标识符
对象标识是一种数据类型,它指明一种授权命名的对象。对象标识是一个整数序列,以点分隔。这些整数构成一个树型结构,类似于DNS和文件系统。对象标识从顶部开始,顶部没有标识,以root表示。所有的MIB变量都从1.3.6.1.2.1这个标识开始。树上的每个节点还有文字名,例如1.3.6.1.2.1就和iso.org.dod.internet.memt.mib对应。
4、 管理信息库MIB
管理信息库就是所有代理进程包含的,并且能够被管理进程进行查询和设置的信息的集合。UDP组中包含几个变量和一个表格。变量为:udpInDatagram(1)、udpNoPorts(2)、udpInErrors(3)、udpOutDatagram(4),表格为udpTable(5)。
名称 | 数据类型 | R/W | 描述 |
udpInDatagram | Counter | R | UDP数据报输入数 |
udpNoPorts | Counter | R | 没有发送到有效端口的UDP数据报个数 |
udpInErrors | Counter | R | 接收到的有错误的UDP数据报个数 |
udpOutDatagram | Counter | R | UDP数据报输出数 |
在udpTable中有2个变量:
UDP监听表,索引=<udpLocalAddress>.<udpLocalPort> | |||
名称 | 数据类型 | R/W | 描述 |
udpLocalAddress | IpAddress | R | 监听进程的本地IP地址,0.0.0.0代表接收任何接口的数据报 |
udpLocalPort | [0..65535] | R | 监听进程的本地端口号 |
5、 实例标识
对MIB变量进行操作,必须对MIB的每个变量进行标识。只有叶子节点是可操作的SNMP没法处理表格的一整行或一整列。
(1) 简单变量:
对于简单变量的处理是通过在其对象标识后面添加".0"处理。例如对象标识是 1.3.6.1.2.1.7.1,则实例标识是1.3.6.1.2.1.7.1.0。
(2) 表格
每个MIB中的索引都包含一个以上的索引。对于UDP监听表来说,MIB定义了包含两个变量的联合索引。假定UDP监听表中有3行具体成员:
0.0.0.0 67
0.0.0.0 161
0.0.0.0 520
这表明系统将从端口67、161和520接收来自任何接口的UDP数据报。这三行数据处理后为:
行 | 对象标识 | 简称 | 值 |
1 | 1.3.6.1.2.1.7.5.1.1.0.0.0.0.67 1.3.6.1.2.1.7.5.1.2.0.0.0.0.67 | UdpLocalAddress.0.0.0.0.67 UdpLocalPort.0.0.0.67 | 0.0.0.0 67 |
2 | 1.3.6.1.2.1.7.5.1.1.0.0.0.0. 161 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 161 | UdpLocalAddress.0.0.0.0. 161 UdpLocalPort.0.0.0. 161 | 0.0.0.0 161 |
3 | 1.3.6.1.2.1.7.5.1.1.0.0.0.0. 520 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 520 | UdpLocalAddress.0.0.0.0. 520 UdpLocalPort.0.0.0. 520 | 0.0.0.0 520 |
(3) 字典式排序
MIB中按照对象标识进行排序有一个隐含规则,MIB表格是根据其对象标识按照字典的顺序进行排序的。上面表格排序后如下所示:
行 | 对象标识 | 简称 | 值 |
1 | 1.3.6.1.2.1.7.5.1.1.0.0.0.0.67 1.3.6.1.2.1.7.5.1.1.0.0.0.0.161 1.3.6.1.2.1.7.5.1.1.0.0.0.0.520 | UdpLocalAddress.0.0.0.0.67 UdpLocalAddress.0.0.0.0.161 UdpLocalAddress.0.0.0.0.520 | 0.0.0.0 0.0.0.0 0.0.0.0 |
2 | 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 67 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 161 1.3.6.1.2.1.7.5.1.2.0.0.0.0. 520 | UdpLocalPort.0.0.0. 67 UdpLocalPort.0.0.0. 161 UdpLocalPort.0.0.0. 520 | 67 161 520 |
在表格中,一个给定变量的所有实例都在下个变量的所有实例之前显示。这意味表格的操作顺序是先行后列的。
表格中对行的排序和表格中索引的值有关。
6、 管理信息库MIB(2)
(1) system组:
system组包含7个变量,没有表格,分别是:sysDescr、sysObjectID、sysUpTime、sysContact、sysName、sysLocation、sysServices。
(2) interface组
interface组只定义了一个简单变量,是系统的接口数量。该组还有一个表格变量,有22列。
(3) at 组
at组是地址转换组,在该组中仅有一个由3列组成的表格变量。
(4) ip组
ip组定义了很多简单变量和3个表格变量(地址表、路由表、地址转换表)。
(5) icmp组
icmp组包含4个普通计数器变量(ICMP报文的输出和输入数量以及ICMP差错报文的输入和输出数量)和22个其他ICMP报文数量的计数器,11个输出计数器,11个输入计数器。
(6) tcp组
tcp组包含14个简单变量,主要为TCP状态。还包含1个表格变量,即TCP连接表。
7、 Trap:
一共有6中trap PDU的格式,第7中类型是供应商自己定义的特殊类型。
二、Telnet:远程登陆
Telnet是标准的提供远程登陆功能的应用。它能够运行在不同的操作系统的主机之间。Telnet通过客户进程和服务器进程之间的选项协商机制,从而确定通信双方可以提供的功能特性。
(1) Telnet客户进程同时和终端客户及TCP/IP协议模块进行交互。通常我们所键入的任何信息的传输是通过TCP连接,连接的任何返回信息都输出到终端上。
(2) Telnet服务器进程经常要和"伪终端设备"打交道。
(3) 仅仅使用了一条TCP连接。
1、 协议介绍:
一种通用字符终端叫网络虚拟终端NVT,连接的客户机和服务器,都必须把他们的物理终端和NVT进行相互转换。不管客户进程终端是什么类型,操作系统必须把它转换NVT格式,同时,不管服务器进程的终端是什么类型,操作系统必须能够将NVT格式转换为终端所能够接收的格式。
(1) NVT ASCII:
NVT ASCII代表7位的ASCII字符集,网间协议族都使用NVT ASCII ,每个7位的字符都以8位格式发送,最高位为0。行结束符以两个字符CR(回车)和紧接着的LF(换行)这样的序列表示以/r/n表示。单独的一个CR表示为/r/0。
(2)Telnet命令:
命令以字节0xff开头,后面的一个字节是命令字节。如果要发送数据255,就必须连续发送两个255(设置选项才可以发送)。
名称 | 代码(10进制) | 描述 |
EOF | 236 | 文件结束符 |
SUSP | 237 | 挂起当前进程 |
ABORT | 238 | 异常终止进程 |
EOR | 239 | 记录结束符 |
SE | 240 | 子选项结束 |
NOP | 241 | 无操作 |
DM | 242 | 数据标志 |
BRK | 243 | 中断 |
IP | 244 | 中断进程 |
AO | 245 | 异常终止输出 |
AYT | 246 | 对方是否还在运行 |
EC | 247 | 转义字符 |
EL | 248 | 删除行 |
GA | 249 | 继续进行 |
SB | 250 | 子选项开始 |
WILL | 251 | 选项协商 |
WONT | 252 | 选项协商 |
DO | 253 | 选项协商 |
DONT | 254 | 选项协商 |
IAC | 255 | 数据字节255 |
(4) 协商选项
Telnet连接双方首先进行交互的信息是选项协商数据。选项协商是对称的,也就是说任何一方都可以主动发送选项协商请求给对方。
◆ WILL:发送方将激活enable选项。
◆ DO:发送方想叫接收端激活选项
◆ WONT:发送方本身想禁止选项
◆ DON''T:发送方想让接收端去禁止选项。
对于激活选项请求,有权同意或不同意。而对于使选项失效请求,必须同意。
选项协商需要3个字节,一个IAC字节(0xff),接着一个字节是 WILL、DO、WONT、DON''T四者之一,最后一个ID字节指明激活或禁止选项。
选项标识(10进制) | 名称 |
1 | 回显 |
3 | 抑制继续进行 |
5 | 状态 |
6 | 定时标记 |
24 | 终端类型 |
31 | 窗口大小 |
32 | 终端速率 |
33 | 远程流量控制 |
34 | 行方式 |
36 | 环境变量 |
(5) 子选项协商
以指定终端类型为例。首先连接的一方发送3个字节的字符序列来请求激活该选项:<IAC,WILL,24>,如果收端同意,那么响应数据就是<IAC,DO,24>,然后服务器进程再发送如下字符串<IAC,SB,24,1,IAC,SE>,该字符串询问客户进程的终端类型。SB是子选项协商的其实命令标记,24表示这是终端类型选项的子选项,1表示发送你的终端类型,子选项协商的结束命令标记也是IAC SE。如果终端类型是ibmpc,客户的响应将是<IAC,SB,24,0, ''I'',''B'',''M'',''P'',''C'',IAC,SE>,其中0表示我的终端类型是。
(6) 半双工、一次一字符、一次一行或行方式
◆ 半双工:NVT默认是一个半双工设备,在接收用户输入之前,它必须从服务器进程获得GA命令。用户的输入在本地回显,方向是从NVT键到NVT打印机,所以客户进程到服务器进程只能发送整行的数据。
◆ 一次一字符:每一个键入的字符都单独发送到服务器进程,服务器进程回显大多数的字符。
◆ 一次一行:准行方式,带远程回显的一次一个字符。
◆ 行方式:客户进程和服务器进程协商确定。
(7) 同步信号
Telnet以Data Mark(DM)命令作为同步信号,该同步信号是以TCP紧急数据形式发送的。DM命令是随数据流传输的同步标记,它告诉收端回到正常的处理进程上来。当一端收到随访已进入紧急方式的通知后,它将开始读数据,一边读一边丢弃数据,直到读到Telnet命令紧急数据的最后一个字节就是DM字节。
(8) 客户的转义符号
Telnet客户进程也可以使客户直接和客户进程进行交互,而不是发送到服务器进程。通常客户的转义字符是Ctrl+],这使得客户显示它的提示符,通常是telnet>。