本part重点:
- 电子邮件系统相关协议
- 动态主机配置协议DHCP
- 简单网络管理协议SNMP
- 应用进程跨越网络的通信
6.5 电子邮件
简单邮件传送协议(只能传送可打印的7位ASCII码):SMTP
邮件读取协议:POP3 和 IMAP
通用因特网邮件扩充:MIME 在其邮件首部中说明了邮件的数据类型(如文本、声音、图像、视像等),使用 MIME 可在邮件中同时传送多种类型的数据。
用户代理 UA (User Agent)
用户代理 UA 就是用户与电子邮件系统的接口,是电子邮件客户端软件。
如Foxmail和Outlook Express
邮件服务器:
用户代理负责和邮件服务器之间的通信。
一个邮件服务器既可以作为客户,也可以作为服务器。
===
6.5.2 简单邮件传送协议 SMTP
SMTP 所规定的就是在两个相互通信的 SMTP 进程之间应如何交换信息。
SMTP 通信的三个阶段 :
1. 连接建立:连接是在发送主机的 SMTP 客户和接收主机的 SMTP 服务器之间建立的。SMTP不使用中间的邮件服务器。端口是25。
2. 邮件传送。虽然SMTP是建立在TCP上的,但是发送成功不能保证目标用户就能收到邮件。因为此时邮件还存在接收方的邮件服务器上。可能会发生各种意外情况。
3. 连接释放:邮件发送完毕后,SMTP 应释放 TCP 连接。
===
6.5.3 电子邮件的信息格式
抄送和发送的区别:
邮件给A,抄送给B,内容是让A去帮忙办一些事,而且这件事需要让B知道,所以需要抄送给B,但信件内容是不需要B去执行的。
===
6.5.4 邮件读取协议
POP3 和 IMAP
IMAP 协议(Internet Message Access Protocol)
IMAP 是一个联机协议。当用户 PC 机上的 IMAP 客户程序打开 IMAP 服务器的邮箱时,用户就可看到邮件的首部。若用户需要打开某个邮件,则该邮件才传到用户的计算机上。
IMAP最大的好处就是用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件。
IMAP 的缺点是如果用户没有将邮件复制到自己的 PC 上,则邮件一直是存放在 IMAP 服务器上。因此用户需要经常与 IMAP 服务器建立连接。
※
不要将邮件读取协议 POP 或 IMAP 与邮件传送协议 SMTP 弄混。
===
6.5.5 基于万维网的电子邮件
注意使用的协议
===
6.5.6 通用因特网邮件扩充 MIME
MIME 并没有改动 SMTP 或取代它。
MIME 的意图是继续使用目前的[RFC 822]格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。
MIME 主要包括三个部分 :
- 5 个新的邮件首部字段,它们可包含在[RFC 822]首部中。这些字段提供了有关邮件主体的信息。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
MIME 增加 5 个新的邮件首部 :
6.6 动态主机配置协议 DHCP
一台计算机和另一台计算机的区别,都可通过一些不同的参数来体现。
在协议软件运行之前,必须给每一个参数赋值。
需要配置的项目
(1) IP 地址
(2) 子网掩码
(3) 默认路由器的 IP 地址
(4) 域名服务器的 IP 地址
动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)
DHCP 提供了即插即用连网(plug-and-play networking)的机制。
这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。
DHCP 使用客户-服务器方式:
- 需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文(DHCPDISCOVER),这时该主机就成为 DHCP 客户。
- 本地网络上所有主机都能收到此广播报文,但只有 DHCP 服务器才回答此广播报文。
- DHCP 服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的 IP 地址池(address
pool)中取一个地址分配给该计算机。DHCP 服务器的回答报文叫做提供报文(DHCPOFFER)。
当 DHCP 中继代理收到主机发送的发现报文后,就以单播方式向 DHCP 服务器转发此报文,并等待其回答。收到 DHCP 服务器回答的提供报文后,DHCP 中继代理再将此提供报文发回给主机。
- DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。
- DHCP 客户从 UDP 端口 68 发送 DHCP 发现报文。
- 凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文,因此 DHCP 客户可能收到多个 DHCP 提供报文。
- DHCP 客户从几个 DHCP 服务器中选择其中的一个,并向所选择的 DHCP 服务器发送 DHCP 请求报文。
- 被选择的 DHCP 服务器发送确认报文DHCPACK,进入已绑定状态,并可开始使用得到的临时 IP 地址了。DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的超时时间分别是 0.5T 和0.875T。当超时时间到就要请求更新租用期。
- 租用期过了一半(T1 时间到),DHCP 发送请求报文 DHCPREQUEST 要求更新租用期。
- DHCP 服务器若同意,则发回确认报文DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。
- DHCP 服务器若不同意,则发回否认报文DHCPNACK。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址(回到步骤2)。
若DHCP服务器不响应步骤的请求报文DHCPREQUEST,则在租用期过了 87.5% 时,DHCP 客户必须重新发送请求报文 DHCPREQUEST(重复步骤6),然后又继续后面的步骤。 - DHCP 客户可随时提前终止服务器所提供的租用期,这时只需向 DHCP 服务器发送释放报文 DHCPRELEASE 即可。
6.7 简单网络管理协议 SNMP
6.7.1 网络管理的基本概念
网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制。
被管设备有时可称为网络元素或网元。
在每一个被管设备中都要运行一个程序以便和管理站中的管理程序进行通信。这些运行着的程序叫做网络管理代理程序,或简称为代理。
网络管理协议:
网管协议就是管理程序和代理程序之间进行通信的规则。
管理程序运行 SNMP 客户程序,向某个代理程序发出请求(或命令),代理程序运行 SNMP 服务器程序,返回响应(或执行某个动作)。
SNMP 的指导思想:
- SNMP 最重要的指导思想就是要尽可能简单。
- SNMP 的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。
- 在网络正常工作时,SNMP 可实现统计、配置、和测试等功能。当网络出故障时,可实现各种差错检测和恢复功能。
- 虽然 SNMP 是在 TCP/IP 基础上的网络管理协议,但也可扩展到其他类型的网络设备上。
SNMP 的管理站和委托代理:
整个系统必须有一个管理站。
管理进程和代理进程利用 SNMP 报文进行通信,而 SNMP 报文又使用 UDP 来传送。
若网络元素使用的不是 SNMP 而是另一种网络管理协议,SNMP 协议就无法控制该网络元素。这时可使用委托代理(proxy agent)。委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。
SNMP 的网络管理由三个部分组成 :
SNMP 本身:SNMP 定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。SNMP 负责读取和改变这些数值。
管理信息结构 SMI(Structure of Management Information):SMI 定义了命名对象和定义对象类型(包括范围和长度)的通用规则,以及把对象和对象的值进行编码的规则。
管理信息库 MIB(Management Information Base):MIB 在被管理的实体中创建了命名对象,并规定了其类型。
===
6.7.2 管理信息结构 SMI
用 TLV 方法进行编码
T 字段定义数据的类型
L 字段定义 V 字段的长度
V 字段定义数据的值
例如,INTEGER 15,其 T 字段是02, INTEGER 类型要用 4 字节编码。最后得出 TLV 编码为 02 04 00 00 00 0F。 (为什么这里要补充0?)
又如 IPAddress 192.1.2.3,其 T 字段是 40,V 字段需要 4 字节表示,因此得出 IPAddress 192.1.2.3 的 TLV 编码是 40 04 C0 01 02 03。
===
6.7.3 管理信息库 MIB(Management Information Base)
被管对象必须维持可供管理程序读写的若干控制和状态信息。这些信息总称为管理信息库 MIB 。
===
6.7.4 SNMP的协议数据单元和报文
SNMP的操作只有两种基本的管理功能,即:
“读”操作,用 get 报文来检测各被管对象的状况;
“写”操作,用 set 报文来改变各被管对象的状况。
探询操作——SNMP 管理进程定时向被管理设备周期性地发送探询信息。
探询的好处是:
- 可使系统相对简单。
- 能限制通过网络所产生的管理信息的通信量。
SNMP 不是完全的探询协议,它允许不经过询问就能发送某些信息。这种信息称为陷阱,表示它能够捕捉“事件”。当被管对象的代理检测到有事件发生时,就检查其门限值。代理只向管理进程报告达到某些门限值的事件(即过滤)。
使用探询(至少是周期性地)以维持对网络资源的实时监视,同时也采用陷阱机制报告特殊事件,使得 SNMP 成为一种有效的网络管理协议。
SNMP 使用无连接的 UDP,因此在网络上传送 SNMP 报文的开销较小。但 UDP 不保证可靠交付。
在运行代理程序的服务器端用熟知端口 161 来接收 get 或 set 报文和发送响应报文(与熟知端口通信的客户端使用临时端口)。
运行管理程序的客户端则使用熟知端口 162 来接收来自各代理的 trap 报文。
6.8 应用进程跨越网络的通信
6.8.1 系统调用和应用编程接口
有些应用程序需要因特网的支持,但这些应用又不能直接使用已经标准化的因特网应用协议,那么——
大多数操作系统使用系统调用(system call)的机制在应用程序和操作系统之间传递控制权。
系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口 API。
API从程序设计的角度定义了许多标准的系统调用函数。应用进程只要使用标准的系统调用函数就可以得到操作系统的服务。
几种使用TCP/IP的应用编程接口 API:
Berkeley UNIX 操作系统定义了一种 API,它又称为套接字接口(socket interface)。
微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket。
AT&T 为其 UNIX 系统 V 定义了一种 API,简写为 TLI (Transport Layer Interface)。
- 当应用进程需要使用网络进行通信时就发出系统调用,请求操作系统为其创建“套接字”,以便把网络通信所需要的系统资源分配给该应用进程。
- 操作系统为这些资源的总和用一个叫做套接字描述符的号码来表示,并把此号码返回给应用进程。应用进程所进行的网络操作都必须使用这个号码。通过该号码,操作系统可以识别出应该使用哪些资源来完成应用进程所请求的服务。
- 通信完毕后,应用进程通过一个关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。
===
6.8.2 几种常用的系统调用
当套接字被创建后,它的端口号和 IP 地址都是空的,因此应用进程要调用 bind(绑定)来指明套接字的本地地址。在服务器端调用 bind 时就是把熟知端口号和本地IP地址填写到已创建的套接字中。这就叫做把本地地址绑定到套接字。
服务器在调用 bind 后,还必须调用 listen(收听)把套接字设置为被动方式,以便随时接受客户的服务请求。UDP服务器由于只提供无连接服务,不使用 listen 系统调用。
服务器紧接着就调用 accept(接受),以便把远地客户进程发来的连接请求提取出来。系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。
调用accept要完成的动作较多,因为一个服务器必须能够同时处理多个请求。要实现并发。上图既是一种并发的实现方式。
每次调用accept,就为每一个新的连接请求传建一个新的套接字,并把新套接字的描述符发给客户端。同时还要创建一个从属服务器进程来处理新建立的连接。原来的套接字还是用来监听请求。