第九章
应用层协议
TCP/IP详解卷 1,CH25,CH26,CH27,CH28
谢希仁计算机网络第四版 P330-343
主要内容
? 9.1 简单网络管理协议,SNMP
? 9.2 远程登录,Rlogin和 Telnet
? 9.3 文件传输协议,FTP
? 9.4 简单邮件传输协议,SMTP
9.1 简单网络管理协议,SNMP
? 9.1.1 网络管理的基本概念
? 9.1.2 简单网络管理协议 SNMP
? 9.3 管理信息结构 SMI
? 9.1.4 管理信息库 MIB
? 9.1.5 SNMPv2 和 SNMPv3
9.1.1 网络管理的基本概念
? 网络管理 包括对硬件、软件和人力的使用、综合
与协调,以便对网络资源进行监视、测试、配置、
分析、评价和控制,这样就能以合理的价格满足
网络的一些需求,如实时运行性能,服务质量等。
网络管理常简称为 网管 。
? 我们可以看到,网络管理并不是指对网络进行行
政上的管理。
网络管理的一般模型
管理站
因特网
网络
管理员
被管设备
—— 管理程序(运行 SNMP 客户程序)
—— 代理程序(运行 SNMP 服务器程序)
A
A
AA
M
被管设备
被管设备
被管设备
M
A
A
被管设备
管理进程和代理进程之间的通信
可以有两种方式
? 管理进程向代理进程发出请求,询问一个具体的参
数值。
? 代理进程主动向管理进程报告有某些重要的事件发

当然,管理进程除了可以向代理进程询问某些参数
值以外,它还可以按要求改变代理进程的参数值
基于 T C P / I P的网络管理
包含 3个组成部分
? 一个管理信息库 M I B,包含所有代理进程的所有
可被查询和修改的参数。 RFC 1213 MIB-II
? 管理信息结构 S M I,是关于 M I B的一套公用的
结构和表示符号。 RFC 1155
? 管理进程和代理进程之间的通信协议,叫简单网
络管理协议 S N M P。 RFC 1157
客户服务器方式
? 管理程序和代理程序按 客户服务器方式 工作。
? 管理程序运行 SNMP 客户程序,向某个代理
程序发出请求(或命令),代理程序运行
SNMP 服务器程序,返回响应(或执行某个动
作)。
? 在网管系统中往往是一个(或少数几个)客户
程序与很多的服务器程序进行交互。
OSI 的五个管理功能域 FCAPS
(1) 故障管理 ——对网络中被管对象故障的检测、定位和排
除。
(2) 配置管理 ——用来定义、识别、初始化、监控网络中的
被管对象,改变被管对象的操作特性,报告被管对象状态
的变化。
(3) 计费管理 —— 记录用户使用网络资源的情况并核收费
用,同时也统计网络的利用率。
(4) 性能管理 ——用最少网络资源和最小时延的前提下,网
络能提供可靠、连续的通信能力。
(5) 安全管理 ——保证网络不被非法使用。
9.1.2 简单网络管理协议 SNMP
? 网络管理的基本原理:
若要管理某个对象,就必然会给该对象添加一
些软件或硬件,但这种, 添加, 必须对原有对
象的影响尽量小些。
? SNMP 发布于 1988 年。 IETF 在 1990 年制
订的网管标准 SNMP 是因特网的正式标准。
? 以后有了新版本 SNMPv2 和 SNMPv3,因此
原来的 SNMP 又称为 SNMPv1。
SNMP 的指导思想
? SNMP 最重要的指导思想就是要尽可能简单。
? SNMP 的基本功能包括监视网络性能、检测分析网络差
错和配置网络设备等。
? 在网络正常工作时,SNMP 可实现统计、配置、和测试
等功能。当网络出故障时,可实现各种差错检测和恢复
功能。
? 虽然 SNMP 是在 TCP/IP 基础上的网络管理协议,但
也可扩展到其他类型的网络设备上。
? 用 轮询 +中断 的方式工作
SNMP 的典型配置
SNMP
UDP
IP
管理进程
网络接口
网络
管理员 MIB
管理站
路由器
SNMP
UDP
IP
代理进程
网络接口
TCP
FTP 等
用户进程
主机
因特网
SNMP
UDP
IP
代理进程
网络接口
TCP
FTP 等
用户进程
主机
SNMP
UDP
IP
代理进程
网络接口
SNMP 的管理站和委托代理
? 整个系统必须有一个 管理站
? 管理进程和代理进程利用 SNMP 报文进行通信,
而 SNMP 报文又使用 UDP 来传送。
? 若网络元素使用的不是 SNMP 而是另一种网络
管理协议,SNMP 协议就无法控制该网络元素。
这时可使用 委托代理 (proxy agent)。委托代理
能提供如协议转换和过滤操作等功能对被管对象
进行管理。
SNMPv1 的五种协议数据单元
? SNMPv1 规定了五种协议数据单元 PDU(即 SNMP 报
文),用来在管理进程和代理之间的交换。
? SNMP的操作只有两种基本的管理功能,即:
(1)“读, 操作,用 get报文来检测各被管对象的状况;
(2)“写, 操作,用 set报文来改变各被管对象的状况。
SNMP 的探询操作
? 探询操作 ——SNMP 管理进程定时向被管理设备周期性
地发送探询信息。
? 探询的好处是:
? 可使系统相对简单
? 能限制通过网络所产生的管理信息的通信量
? 但探询管理协议不够灵活,而且所能管理的设备数目不
能太多。探询系统的开销也较大。如探询频繁而并未得
到有用的报告,则通信线路和计算机的 CPU 周期就被
浪费了。
陷阱 (trap)
? SNMP 不是完全的探询协议,它允许不经过询问就能发
送某些信息。这种信息称为 陷阱,表示它能够捕捉, 事
件, 。
? 这种陷阱信息的参数是受限制的。
? 当被管对象的代理检测到有事件发生时,就检查其门限
值。代理只向管理进程报告达到某些门限值的事件(即
过滤 )。过滤的好处是:
? 仅在严重事件发生时才发送陷阱
? 陷阱信息很简单且所需字节数很少
SNMP 是有效的网络管理协议
? 使用 轮询 (至少是周期性地)以维持对
网络资源的实时监视,同时也采用 陷阱
机制报告特殊事件,使得 SNMP 成为一
种有效的网络管理协议。
SNMP 使用的端口
? SNMP 使用无连接的 UDP,因此在网络上传送 SNMP
报文的开销较小。但 UDP 不保证可靠交付。
? 在运行代理程序的服务器端用熟知端口 161 来接收 get
或 set 报文和发送响应报文(与熟知端口通信的客户端
使用临时端口)。
? 运行管理程序的客户端则使用熟知端口 162 来接收来自
各代理的 trap 报文。
SNMPv1 定义的协议数据单元类型
PDU PDU名称 用途
编号
0 get-request 用来查询一个或多个变量的值
1 get-next-request 允许在 MIB 树上检索下一个变
量,此操作可反复进行
2 get-reponse 对 get/set 报文作出响应,并提
供差错码、差错状态等信息
3 set-request 对一个或多个变量值进行设置
4 Trap 向管理进程报告代理中发生的
事件
SNMP的 5种操作
SNMPv1 的报文格式
UDP 数据报
IP 数据报
SNMP 报文
get/set 报文
IP
首部
UDP
首部 SNMP PDU 版本 共同体
PDU 类型
(0~3) 差错索引
差错状态
(0~5)请求标识符 名 名值 值

trap 首部 变量绑定
20字节 8字节
PDU 类型
(4) 名 值 …企业
代理的
IP 地址
trap类型
(0 ~6)
特定
代码 时间戳 值 名
get/set 首部 变量绑定
trap 报文
? 版本 SNMP版本号减去 1,显然 SNMP v1该字
段是 0。
? 共同体 是管理进程和代理进程之间的口令,是
明文格式,默认值是 public
? PDU类型 显示各种 PDU对应的值
? 请求标识 对于 g e t,g e t - n e x t和 s e t操作,
由管理进程设置,然后由代理进程在 g e t -r e s
p o n s e中返回。这个字段的作用是使客户进程
(即管理进程)能够将服务器进程(即代理进程)
发出的响应和客户进程发出的查询进行匹配。这
个字段允许管理进程对一个或多个代理进程发出
多个请求,并且从返回的众多应答中进行分类
? 差错状态 是一个整数,它是由代理进程标注的,
指明有差错发生。
? 差错索引 是一个整数偏移量,指明当有差错发
生时,差错发生在哪个参数。它是由代理进程标
注的,并且只有在发生 noSuchName、
readOnly和 badValue差错时才进行标注。
? 在 get,get-next和 set的请求数据报中,包含 变
量名称和变量值 的一张表。对于 get和 get-next
操作,变量值部分被忽略,也就是不需要填写。
? 对于 trap操作符( PDU类型是 4),SNMP报文
格式有所变化。
Trap
? 代理进程也可以主动发送 trap到管理进程,以告
诉管理进程在代理进程侧有某些管理进程所关心
的事件发生,trap发送到管理进程的 162号端口。
? 现在已经定义了 6种特定的 trap类型,第 7种 trap
类型是由供应商自己定义的特定类型。
trap 报文
trap 首部 变量绑定
PDU 类型
(4) 名 值 …企业
代理的
IP 地址
trap类型
(0 ~6)
特定
代码 时间戳 值 名
?企业 填入产生陷阱报文的网络设备的对象标识符
?代理的 IP地址
trap类型
? 特定代码 指名代理自定义的事件(若陷阱
类型为 0),否则为 0。
? 时间戳 指明自代理进程初始化到陷阱报告
的事件发生所经历的时间
9.3 管理信息结构 SMI
(Structure of Management
Information)
? SMI 定义了所有的 MIB 变量的数据结构
数据类型
? INTEGER 有些整型变量没有范围限制,有些整
型变量定义为特定的数值,有些整型变量定义为
一个特定的范围。
? OCTER STRING 0或多个 8 bit字节,每个字
节值在 0~ 255之间。
? DisplayString 0或多个 8 bit字节,但是每个字
节必须是 ASCII码,在 MIB-II中,所有该类型的
变量不能超过 255个字符( 0个字符是可以的)
? OBJECT IDENTIFIER 指明一种, 授权, 命名
的对象,它是由一些权威机构进行管理和分配的。
对象标识是一个整数序列,以点(,,”)分隔,
这些整数构成一个树型结构。
? N U L L 代表相关的变量没有值。
? I p A d d r e s s 4字节长度的 OCTER
STRING,以网络序表示的 I P地址。
? P h y s A d d r e s s OCTER STRING类型,
代表物理地址
? Co u n t e r 非负的整数,可从 0递增到 232-1
( 4294976295),达到最大值后归 0。
? G a u g e 非负的整数,取值范围为从 0到
4294976295(或增或减 )。达到最大值后锁定,直到复
位。例如,M I B中的 t c p C u r r E s t a b就是这种类
型的变量的一个例子,它代表目前在 E S TA B L I S H E
D或 C L O S E _ WA I T状态的 T C P连接数。
? T i m e T i c k s 时间计数器,以 0, 0 1秒为单位递增,
但是不同的变量可以有不同的递增幅度。所以在定义这种
类型的变量的时候,必须指定递增幅度。
? S E Q U E N C E 这一数据类型与 C程序设计语言中的
,s t r u c t u r e”类似。一个 S E Q U E N C E包括 0个
或多个元素,每一个元素又是另一个 A S N, 1数据类型。
例如,M I B中的 U d p E n t r y就是这种类型的变量。
它代表在代理进程侧目前, 激活, 的 U D P数量(, 激活,
表示目前被应用程序所用)。在这个变量中包含两个元素:
? I p A d d r e s s类型中的 u d p L o c a l A d d r e s s,
表示 I P地址。
? I N T E G E R类型中的 u d p L o c a l P o r t,从 0到 6
5 5 3 5,表示端口号。
? SEQUENDE OF 这是一个向量的定义,其所有元素具有
相同的类型。如果每一个元素都具有简单的数据类型,例
如是整数类型,那么我们就得到一个简单的向量(一个一
维向量)。但是我们将看到,S N M P在使用这个数据类
型时,其向量中的每一个元素是一个 S E Q U E N C E
(结构)。因而可以将它看成为一个二维数组或表。例如,
名为 u d p T a b l e的 U D P监听表 ( l i s t e n e r )就是
这种类型的变量。它是一个二元的 S E Q U E N C E变量。
每个二元组就是一个 U d p E n t r y。如下图所示。
表格形式的 u d p T a b l e 变量
? SMI 标准指明了所有的 MIB 变量必须使用 抽象
语法记法 1( ASN.1)来定义。
? ASN.1 有两个主要特点:一个是人们阅读的文档
中使用的记法,另一个是同一信息在通信协议中
使用的紧凑编码表示。这种记法使得数据的含义
不存在任何可能的二义性。
1,局部语法、传送语法与抽象语法
?,语法, 实际上就是, 符号串解释方法, 。
? 局部语法 用于数据在端系统中的存储。
? 传送语法 用于数据在线路上的传输。
? 抽象语法 是协议设计者所使用的工具,用于将设计者
的思想记录下来,便于交流和讨论。
? 计算机通信的最终目的是传递数据的语义。因此一个
数据无论采用何种表示方式,其语义不应改变。
两次转换语法
? OSI 采用两次转换语法的方法,即由发送方和接收方共同
协作完成语法转换。为此,定义了, 传送语
法, (transfer syntax)。
? 发送方把符合自己局部语法的比特串转换为符合传送语法
的比特串,接收方再把此比特串转换为符合自己局部语法
的比特串。
? 在采用这种标准的传送语法时,不仅要传送数据对象的
,值信息,,还需要传送关于该对象的, 类型信息, 。
ASN.1
(Abstract Syntax Notation One)
? ASN.1 是一种数据类型描述语言,具有类似于面向对象
程序设计语言中所提供的类型机制。
? ASN.1 可定义任意复杂结构的数据类型,而不同的数据
类型之间还可以有继承关系。
? 实际上到目前为止并没有第二个抽象语法记法出现。因
此 ASN.1 似应写为 ASN。
? 抽象语法只描述数据的结构形式且与具体的编码格式无
关,同时也不涉及这些数据结构在计算机内如何存放。
基本编码规则 BER
(Basic Encoding Rule)
? ISO 在制订 ASN.1 语言的同时也为它定义了一种
标准的编码方案,即 基本编码规则 BER。
? BER 指明了每种数据类型中每个数据的值的表示
? 发送端用 BER 编码,可将用 ASN.1 所表述的报
文转换成惟一的比特序列。接收端用 BER 进行解
码,得到该比特序列所表示的 ASN.1 报文。
ASN.1 的两个标准
(1) 抽象语法记法 1 (ASN.1)
ISO 8824 ITU-T X.208
(2) ASN.1的基本编码规则 BER
ISO 8825 ITU-T X.209
? ASN.1 和 ASN.1 基本编码规则的区别就是,ASN.1 是
用来定义各种应用协议数据单元的数据类型的工具,是
描述抽象语法的一种语言。 ASN.1 基本编码规则用于描
述各应用协议数据单元类型所代表的数据值。
2,抽象语法记法 ASN.1 的要点
(1) 标识符(即值的名或字段名)、数据类型名和模
块名由大写或小写字母、数字、以及连字符组成。
(2) ASN.1 固有的数据类型全部由大写字母组成
(3) 用户自定义的数据类型名和模块名的第一个字母
用大写,后面至少要有一个非大写字母。
抽象语法记法 ASN.1 的要点
(4) 标识符 (identifier)的第一个字母用小写,后面
可用数字、连字符以及一些大写字母以增加可读性。
(5) 多个空格或空行都被认为是一个空格
(6) 注释由两个连字符 (--)表示开始,由另外两个连
字符或行结束符表示结束。
? ASN.1 把数据类型分为 简单类型 和 构造类型 两种
ASN.1 的部分类型
分类 标记 类型名称 主要特点
简 UNIVERSAL 2 INTEGER 取整数值
单 UNIVERSAL 4 OCTET STRING 取八位位组序列值
类 UNIVERSAL 5 NULL 只取空值的
型 UNIVERSAL 6 OBJECT IDENTIFIER 与信息对象相关联
的值的集合
构 UNIVERSAL 16 SEQUENCE 取值为多个数据类型
的按序组成的值
造 UNIVERSAL 16 SEQUENCE-OF 取值为同一数据类型
的按序组成的值
类 无标记 CHOICE 可选择多个数据类型
中的某一个数据类型
型 无标记 ANY 可描述事先还不知道
的任何类型的任何值
标记 (tab)
? ASN.1 规定每一个数据类型应当有一个能
够惟一被识别的标记,以便能无二义性地
标识各种数据类型。
? 标记有两个分量,一个分量是标记的 类
(class),另一个分量是 非负整数 。
标记共划分为以下的四类 (class)
(1) 通用类 (Universal)——由 ASN.1 分配给所定义的最常
用的一些数据类型,它与具体的应用无关。
(2) 应用类 (Application-wide)——与某个特定应用相关联
的类型(被其他标准所定义)。
(3) 上下文类 (Context-specific)——上下文所定义的类型,
它属于一个应用的子集。
(4) 专用类 (Private)——保留为一些厂家所定义的类型,
在 ASN.1 标准中未定义。
3,ASN.1 的基本编码规则
? TLV 方法进行编码 ——把各种数据元素表示为以下三个字
段组成的八位位组序列:
(1) T 字段,即标识符八位位组 (identifier octet),用于标
识 标记 。
(2) L 字段,即长度用八位位组 (length octet),用于标识
后面 V 字段的 长度 。
(3) V 字段,即内容八位位组 (content octet),用于标识数
据元素的 值 。
用 TLV 方法进行编码
T(标记)
标识符八位位组
L(长度)
长度八位位组
V(值)
内容八位位组
比特 8 7 6 5 4 3 2 1
通用类 0 0 0 简 单 类 型
应用类 0 1 1 构 造 类 型
上下文类 1 0
专用类 1 1
类 别 P/C 标 记 编 号
SNMP 的 Get-request 报文 ASN.1 编码
V
2B 06 01 02 01 01 01 00
L
08
T
OBJECT IDENTIFIER
T
NULL
L
00
L
01
T
SEQUENCE
L
0C name value
T
OCTET STRING
T
INTEGER
L
01
V
00
V
70 75 62 6C 69 63
T
A0
L
1C Get-request-PDU-V
L
06
L
0E
L
04
T
INTEGER
L
01
Message-T
SEQUENCE
Message-L
29 Message-V
Version Community Get-request-PDU
request-id error-status error-index variable-bindings
T
INTEGER
V
05 AE 56 02
V
00
T
SEQUENCE OF
T
INTEGER
V
00 VarBind
request-ID
“public”
1.3,6,1,2,1,1,1,0
SNMP get-request 报文的编码
30 29 {类型 SEQUENCE,长度 2916 = 4110}
02 01 00 {类型 INTEGER,长度 0116,版本 = 0}
04 06 70 75 62 6C 69 63
{类型 OCTET STRING,长度 616,,public” }
A0 1C {类型, 上下文结构类型,,长度 1C16}
02 04 05 AE 56 02
{类型 INTEGER,长度 0416,request-id = 05 AE 56 02}
02 01 00
{类型 INTEGER,长度 0116,error status = 0016}
02 01 00
{类型 INTEGER,长度 0116,error index = 0016}
30 0E {类型 SEQUENCE OF,长度 0E16}
30 0C {类型 SEQUENCE,长度 0C16}
06 08 2B 06 01 02 01 01 01 00
{类型 OBJECT IDENTIFIER,长度 0816,sysDescr}
05 00 {类型 NULL,长度 0016}
几点说明
(1) 编码一律用 十六进制数来表示。
(2) 要特别注意在 V 字段中出现的嵌套。
(3) 顶级和二级结点合并成子标识符。算法是:
若顶级结点和二级结点的值分别为 X 和 Y,子网得出的子
标识符的值为 40X ? Y。这样就得出 sysDescr 在进行编
码时的对象标识符为 43.6.1.2.1.1.1.0 (即占两个字符的
1.3 压缩为占一个字符的 43),节省了一个字符的空间。
几点说明
(4) 最后得到的用十六进制表示的编码如下所示:
30 29 02 01 00 04 06 70 75 62 6C 69 63
A0 1C 02 04 05 AE 56 02 02 01 00 02 01
00 30 0E 30 0C 06 08 2B 06 01 02 01 01
01 00 05 00
? 这就是作为 UDP 用户数据报的数据部分的一个
完整的 SNMP 报文。
9.1.4 管理信息库 MIB
? RFC1213
? 管理信息库就是所有代理进程包含的、并且能够
被管理进程进行查询和设 置的信息的集合。
? 只有在 MIB 中的对象才是 SNMP 所能够管理的。
? SNMP 的管理信息库采用和域名系统 DNS 相似的树形结
构,它的根在最上面,根没有名字。
管理信息库的对象命名树举例

iso (1)ccitt (0) joint-iso-ccitt (2)
member body (2)
dod (6)
internet (1) 1.3.6.1
mgmt (2)directory (1) experimental (3) private (4)
enterprises(1) 1.3.6.1.4.1mib-2 (1) 1.3.6.1.2.1
system(1) interface(2) at(3) ip(4) icmp(5) tcp(6) udp(7) egp(8)
… … … … … … ……

standard (0) registration authority (1) identified organization (3)
snmpv2 (6)security (5)


? 企业 (enterprise)
? 陷阱类型
? 特定代码 (specific-code)
? 时间戳 (timestamp)
9.1.5 SNMPv2 和 SNMPv3
SNMP 的主要缺点是:
(1) 不能有效地传送大块的数据
(2) 不能将网络管理的功能分散化
(3) 安全性不够好
SNMPv2
? 1996 年发布 IETF 发布了 8 个 SNMPv2 文档 [RFC
1901~1908]。但 SNMPv2 在安全方面的设计过分复
杂,使得有些人不愿意接受它。
? SNMPv2 增加了 get-bulk-request 命令,可一次从路
由器的路由表中读取许多行的信息。
? SNMPv2 的 get 命令允许返回部分的变量值,这就提高
了效率,减少了网络上的通信量。
? SNMPv2 采用了分散化的管理方法。在一个网络中可以
有多个顶级管理站,叫做管理服务器。
SNMPv2
? 增加了一个 inform 命令和一个管理进程到管理
进程的 MIB (manager-to-manager MIB)。
? 使用这种 inform 命令可以使管理进程之间互相
传送有关的事件信息而不需要经过请求。这样的
信息则定义在管理进程到管理进程的 MIB中。
SNMPv3
? 1998 年 1 月 IETF 发表了 SNMPv3 的有关文
档 [RFC 2271-2275]。
? 仅隔 15 个月后就更新为 [RFC 2571-2575]。
? SNMPv3 最大的改进就是安全特性。也就是说,
只有被授权的人员才有资格执行网络管理的功
能(如关闭某一条链路)和读取有关网络管理
的信息(如读取一个配置文件的内容)。
9.2 远程登录,Rlogin和 Telnet
? 9.1.1 Rlogin
? 9.2.2 Telnet
9.3 文件传输协议,FTP
9.4 简单邮件传输协议,SMTP
必做作业
? 查资料:网络管理
参考书,网管员必读.网络管理
网管员必读:服务器与数据存储
网管员必读:超级网管经验谈
? 基于 SNMP的网络拓扑发现
选做作业
? 编程实现 SNMP协议,获取路由器中的相
关信息。要求:
? 采用 VC进行编程
? 根据某路由器的 IP地址及共同体名,获取该路由
器的系统信息。
? 获取路由器的 IP地址信息以及路由表信息
? 以此路由器为源结点,采用深度优先依次
得到其他路由器的信息,从而实现网络拓
扑发现。