计算机网络第6章:应用层
每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。
应用层的许多协议都是基于客户服务器方式。客户(client)和服务器(server)都是指通信中所涉及的两个应用进程。
客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。
1 域名系统 DNS
1.1 域名系统概述
域名系统 DNS (Domain Name System) :
- 互联网使用的命名系统。
- 用来把人们使用的机器名字(域名)转换为 IP 地址。
- 为互联网的各种网络应用提供了核心服务。
互联网的域名系统DNS被设计称为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大部分名字都在本地进行解析,仅少量解析需要在互联网上通信。
- 域名到 IP 地址的解析是由若干个域名服务器程序共同完成。
- 域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器。
解析过程如下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS的请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了较小开销)。
本地域名服务器在查找域名后,把对应的IP地址放在回答报文中。
如果本地域名服务器不能回答该请求,则此域名服务器暂时成为DNS中的另一个客户,并向其他域名服务器发出查询请求。
1.2 互联网的域名结构
- 命名方法:层次树状结构方法。
- 任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名 (domain name)。
- 域 (domain):
- 名字空间中一个可被管理的划分。
- 可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。
域名结构:层次结构。由标号 (label) 序列组成,各标号之间用点(.)隔开,各标号分别代表不同级别的域名。
原先的顶级域名共分为3大类:
在国家顶级域名下注册的二级域名均由该国家自行确定。
我国把二级域名划分为“类别域名”和“行政区域名”两大类。
用域名树来表示域名系统最清楚,域名树的树叶就是计算机的名字,它不能再继续往下划分子域了。
注意:互联网的名字空间是按照机构的组织来划分的,与物理的网络无关,与 IP 地址中的“子网”也没有关系。
1.3 域名服务器
实现域名系统使用分布在各地的域名服务器(DNS 服务器)。一个服务器所负责管辖的(或有权限的)范围叫做区 (zone)。
各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射。
DNS 服务器的管辖范围不是以“域”为单位,而是以“区”为单位。
1.3.1 区的不同划分方法举例
1.3.2 树状结构的 DNS 域名服务器
每个域名服务器都只对域名体系中的一部分进行管辖。
1.3.3 域名服务器类型
根据所起的作用,分为四种类型:
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器
- 本地域名服务器
1.3.3.1 根域名服务器
根域名服务器是最高层次,最为重要。所有根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。
若所有的根域名服务器都瘫痪了,整个互联网中的 DNS 系统就无法工作了。
全世界的根域名服务器共有 13 套装置,构成 13 组根域名服务器。根域名服务器总共只有 13 个不同 IP 地址的域名,但并非仅由13台机器所组成。
根域名服务器分布在全世界。为了提供更可靠的服务,在每一个地点的根域名服务器往往由多台机器组成。
根域名服务器采用任播 (anycast) 技术,当DNS 客户向某个根域名服务器发出查询报文时,路由器能找到离这个 DNS 客户最近的一个根域名服务器。
注意:根域名服务器并不直接把域名转换成 IP 地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
1.3.3.2 顶级域名服务器
顶级域名服务器(即 TLD 服务器)负责管理在该顶级域名服务器注册的所有二级域名。
当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。
1.3.3.3 权限域名服务器
- 负责一个区(zone)的域名服务器。
当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的 DNS 客户,下一步应当找哪一个权限域名服务器。
1.3.3.4 本地域名服务器
- 非常重要。
当一个主机发出 DNS 查询请求时,该查询请求报文就发送给本地域名服务器。
每一个互联网服务提供者 ISP 或一个大学,都可以拥有一个本地域名服务器。当所要查询的主机也属于同一个本地 ISP 时,该本地域名服务器立即就能将所查询的主机名转换为它的 IP 地址,而不需要再去询问其他的域名服务器。
本地域名服务器有时也称为默认域名服务器。
DNS 域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器。
当主域名服务器出故障时,辅助域名服务器可以保证 DNS 的查询工作不会中断。
主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行,保证了数据的一致性。
1.3.4 域名的解析过程
1.3.4.1 递归查询(比较少用)
- 通常,主机向本地域名服务器查询时使用。
- 若不知道,就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
1.3.4.2 迭代查询
- 本地域名服务器向根域名服务器查询时使用。
- 要么给出所要查询的 IP 地址,要么告诉下一个要查询的域名服务器的 IP 地址。
- 本地域名服务器继续后续查询。
1.3.5 高速缓存
也称为高速缓存域名服务器,用于存放最近用过的名字以及从何处获得名字映射信息的记录。
作用:大大减轻根域名服务器的负荷,使 DNS 查询请求和回答报文的数量大为减少。
域名服务器应为每项内容设置计时器,并处理超过合理时间的项。
当权限域名服务器回答一个查询请求时,在响应中指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。
2 文件传送协议
2.1 FTP概述
文件传送协议 FTP (File Transfer Protocol) 是互联网上使用得最广泛的文件传送协议。
- 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。
- 屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件。
- 是文件共享协议的一个大类。
2.1.1 文件共享协议
文件传送协议:FTP(使用TCP), TFTP(使用UDP) 等。
- 复制整个文件。对文件副本进行访问。
- 若要存取一个文件,就必须先获得一个本地文件副本。
- 若要修改文件,只能对文件副本进行修改,然后再将修改后的文件副本传回到原节点。
联机访问 (on-line access) 协议:NFS 等。
- 允许同时对一个文件进行存取。
- 远地共享文件访问,如同对本地文件的访问一样。
- 透明存取,不需要对该应用程序作明显的改动。
- 由操作系统负责。
2.2 FTP 的基本工作原理
网络环境下复制文件的复杂性:
- 计算机存储数据的格式不同。
- 文件的目录结构和文件命名的规定不同。
- 对于相同的文件存取功能,操作系统使用的命令不同。
- 访问控制方法不同。
只提供文件传送的一些基本服务,它使用 TCP 可靠的运输服务。
主要功能:减少或消除在不同操作系统下处理文件的不兼容性。使用客户服务器方式。
一个 FTP 服务器进程可同时为多个客户进程提供服务,FTP 的服务器进程由两大部分组成:
- 一个主进程,负责接受新的请求;
- 若干个从属进程,负责处理单个请求。
2.2.1 FTP 主进程的工作步骤
- 打开熟知端口(端口号为 21),使客户进程能够连接上。
- 等待客户进程发出连接请求。
- 启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
- 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行。
FTP 客户和服务器之间的两个从属进程和两个 TCP 连接,并且FTP 使用两个不同的端口号。
图中服务器有两个从属进程:控制进程和数据传送进程。为简单起见,服务器端的主进程没有画上。
在进程文件传输时,FTP的客户和服务器之间要建立两个并行的TCP连接:控制连接和数据连接。控制连接在整个会话期间一直保持打开,FTP客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。
由于FTP使用了一个分离的控制连接,因此FTP的控制信息是带外传送的。
lFTP 并非对所有的数据传输都是最佳的:仅能访问副本。
2.2.2 NFS
NFS 允许应用进程打开一个远地文件,并能在该文件的某一个特定的位置上开始读写数据。
NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。
NFS 在网络上传送的只是少量的修改数据。
2.3 简单文件传送协议 TFTP
TFTP (Trivial File Transfer Protocol) 是一个很小且易于实现的文件传送协议。使用客户服务器方式和使用 UDP 数据报,因此 TFTP 需要有自己的差错改正措施。
- 只支持文件传输,不支持交互。
- 没有庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。
优点:
- 可用于 UDP 环境;
- 代码所占的内存较小。
2.3.1 TFTP 的主要特点
- 每次传送的数据报文中有 512 字节的数据,但最后一次可不足 512 字节。
- 数据报文按序编号,从 1 开始。
- 支持 ASCII 码或二进制传送。
- 可对文件进行读或写。
- 使用很简单的首部。
2.3.2 TFTP 的工作很像停止等待协议
发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。
发完数据后在规定时间内收不到确认就要重发数据 PDU。
发送确认 PDU 的一方若在规定时间内未收到下一个文件块,需重发确认 PDU,保证文件的传送不致因某一个数据报的丢失而告失败。
2.3.3 TFTP 的工作过程
- 开始工作时,TFTP 客户进程发送一个读请求或写请求报文给 TFTP 服务器进程,其 UDP 熟知端口号码为 69。
- TFTP 服务器进程选择一个新的端口和 TFTP 客户进程进行通信。
- 若文件长度恰好为 512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只含首部而无数据的数据报文。
- 若文件长度不是 512 字节的整数倍,则最后传送数据报文的数据字段一定不满 512 字节,作为文件结束的标志。
2.4 远程终端协议 TELNET
TELNET是一个简单的远程终端协议,是互联网的正式标准。其允许用户在其所在地通过 TCP 连接注册(即登录)到远地的另一个主机上(使用主机名或 IP 地址)。
能将用户的击键传到远地主机,同时也能将远地主机的输出通过 TCP 连接返回到用户屏幕。服务是透明的,又称为终端仿真协议。
在本地系统运行 TELNET 客户进程,而在远地主机则运行 TELNET 服务器进程。服务器中的主进程等待新的请求,产生从属进程来处理每一个连接。
2.4.1 TELNET 使用网络虚拟终端 NVT 格式
TELNET 的选项协商 (Option Negotiation) 使客户和服务器可商定使用更多的终端功能,协商的双方是平等的。
2.4.2 NVT (Network Virtual Terminal )格式
3 万维网WWW
3.1 万维网概述
万维网 WWW (World Wide Web) 并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息储藏所。
万维网用链接的方法能非常方便地从互联网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。这种访问方式称为“链接”。
3.1.1 万维网是分布式超媒体 (hypermedia) 系统
是超文本 (hypertext) 系统的扩充。
- 超文本:由多个信息源链接成。是万维网的基础。
- 超媒体与超文本的区别:文档内容不同。
超文本文档仅包含文本信息。超媒体文档还包含其他信息,如图形、图像、声音、动画,甚至活动视频图像等。
是一个分布式系统,信息分布在整个互联网上。每台主机上的文档都独立进行管理。
3.1.2 万维网的工作方式
以客户服务器方式工作。
- 客户程序:浏览器。
- 服务器程序:在万维网文档所驻留的主机上运行。这个计算机也称为万维网服务器。
客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的万维网文档。在一个客户程序主窗口上显示出的万维网文档称为页面 (page)。
怎样标志分布在整个互联网上的万维网文档?
- 使用统一资源定位符 URL (Uniform Resource Locator) 。
- 使每一个文档在整个互联网的范围内具有唯一的标识符 URL。
用什么协议来实现万维网上的各种链接?
- 使用超文本传送协议 HTTP (HyperText Transfer Protocol)。
- HTTP 是一个应用层协议,使用 TCP 连接进行可靠的传送。
怎样使不同作者创作的不同风格的万维网文档都能在互联网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接?
- 使用超文本标记语言 HTML (HyperText Markup Language) 。
怎样使用户能够很方便地找到所需的信息?
- 使用各种的搜索工具(即搜索引擎)。
3.2 统一资源定位符 URL
URL是对互联网上资源的位置和访问方法的一种简洁表示。给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。
- 实际上就是在互联网上的资源的地址。
显然,互联网上的所有资源,都有一个唯一确定的URL。
- 资源:指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图像、声音等,以及与互联网相连的任何形式的数据。
URL 相当于一个文件名在网络范围的扩展。因此,URL 是与互联网相连的机器上的任何可访问对象的一个指针。
3.2.1 URL 的格式
由以冒号(:)隔开的两大部分组成,对字符大写或小写没有要求。
一般形式:
- 主机:存放资源的主机在互联网中的域名,也可以是用点分十进制的 IP 地址。
- 端口:端口号。省略时使用默认端口号。
- 路径:资源所在目录位置。区分大小写。省略时使用所定义的默认路径。后面可能还有一些选项。
3.2.2 使用 HTTP 的 URL
3.3 超文本传送协议 HTTP
HTTP 是面向事务的 (transaction-oriented) 应用层协议。使用 TCP 连接进行可靠的传送。其定义了浏览器与万维网服务器通信的格式和规则。是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
HTTP 不仅传送完成超文本跳转所必需的信息,而且也传送任何可从互联网上得到的信息,如文本、超文本、声音和图像等。
3.3.1 HTTP 的操作过程
HTTP 规定:在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即“类MIME (MIME-like)”的响应组成。HTTP 报文通常都使用 TCP 连接传送。
3.3.2 HTTP 的主要特点
- HTTP 使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输。
- HTTP 协议本身也是无连接的。
- HTTP 是无状态的 (stateless),同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同,简化了服务器的设计,使服务器更容易支持大量并发的 HTTP 请求。
3.3.3 协议 HTTP/1.0 的主要缺点
- 每请求一个文档就要有两倍 RTT 的开销。
- 客户和服务器每一次建立新的 TCP 连接都要分配缓存和变量。
- 这种非持续连接使服务器的负担很重。
3.3.4 协议 HTTP/1.1 使用持续连接
持续连接(persistent connection):服务器在发送响应后仍然在一段时间内保持这条连接(不释放),使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
只要文档都在同一个服务器上,就可以继续使用该 TCP 连接。
两种工作方式:
- 非流水线方式 (without pipelining)
- 流水线方式 (with pipelining)
3.3.4.1 非流水线方式
- 客户在收到前一个响应之后才能发出下一个请求
- 缺点:TCP 连接空闲状态
3.3.4.2 流水线方式
- 客户在收到响应报文之前就能够接着发送新的请求报文
- 连续的多个请求报文到达服务器后,服务器就可连续发回响应报文
- 下载效率提高
3.3.5 协议 HTTP/2
协议 HTTP/2 是协议 HTTP/1.1 的升级版本。
- 服务器可以并行发回响应(使用同一个 TCP 连接)。
- 允许客户复用 TCP 连接进行多个请求。
- 把所有的报文都划分为许多较小的二进制编码的帧,并采用了新的压缩算法,不发送重复的首部字段,大大减小了首部的开销,提高了传输效率。
- 向后兼容。
3.3.6 代理服务器
代理服务器 (proxy server) 又称为万维网高速缓存 (Web cache),它代表浏览器发出 HTTP 请求。
使用高速缓存可减少访问互联网服务器的时延。
不使用高速缓存的情况:
使用高速缓存的情况:
- 浏览器访问互联网的服务器时,先与校园网的高速缓存建立 TCP 连接,并向高速缓存发出 HTTP 请求报文。
- 若高速缓存已经存放了所请求的对象,则将此对象放入 HTTP 响应报文中返回给浏览器。
- 若未存放,高速缓存就代表浏览器与互联网上的源点服务器建立 TCP 连接,并发送 HTTP 请求报文。
- 源点服务器将所请求的对象放在 HTTP 响应报文中返回给校园网的高速缓存。
- 高速缓存收到对象后,先复制到本地存储器中(留待以后用),然后将该对象放在 HTTP 响应报文中,通过已建立的 TCP 连接,返回给请求该对象的浏览器。
以代理服务器构成的内容分发网络CDN(Content Distribution Network)在互联网应用中起到了很大的作用。
3.4 HTTP 的报文结构
HTTP有两类报文:
- 请求报文:从客户向服务器的请求
- 响应报文:从服务器到客户的回答
由于 HTTP 是面向正文的 (text-oriented),因此报文中每一个字段的值都是一些 ASCII 码串,每个字段的长度都是不确定的。
三个组成部分:
- 开始行:用于区分是请求报文还是响应报文。
- 首部行:说明浏览器、服务器或报文主体的一些信息。可以有多行,也可以不使用。
- 实体主体:请求报文中一般不用,响应报文中也可能没有该字段。
3.4.1 HTTP 的报文结构(请求报文)
- 方法:对所请求的对象进行的操作,实际上就是一些命令。请求报文的类型是由它所采用的方法决定的。
- URL:所请求的资源的 URL。
- 版本:HTTP 的版本。
HTTP 请求报文的一些方法
3.4.1.1 HTTP 请求报文举例
3.4.2 HTTP 的报文结构(响应报文)
- 状态码:都是三位数字,分为5大类
- 1xx 表示通知信息,如请求收到了或正在进行处理。
- 2xx 表示成功,如接受或知道了。
- 3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
- 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
- 5xx 表示服务器的差错,如服务器失效无法完成请求。
响应报文中常见到的三种状态行:
- HTTP/1.1 202 Accepted 接受
- HTTP/1.1 400 Bad Request 错误的请求
- Http/1.1 404 Not Found 找不到
3.4.3 在服务器上存放用户的信息
万维网使用 Cookie 跟踪在 HTTP 服务器和客户之间传递的状态信息。
3.5 万维网的文档
在一个客户程序主窗口上显示出的万维网文档称为页面(page)。
页面制作的标准语言:HTML
,分为:
- 静态万维网文档:内容不会改变。简单。
- 动态万维网文档:文档的内容由应用程序动态创建。
- 活动万维网文档:由浏览器端改变文档的内容。
3.5.1 超文本标记语言 HTML
超文本标记语言 HTML (HyperText Markup Language) 是一种制作万维网页面的标准语言,它消除了不同计算机之间信息交流的障碍,是万维网的重要基础 [RFC 2854]。
最新 HTML 5.0 增加了<audio>和<video>两个标签,实现对多媒体中的音频、视频使用的支持,增加了能够在移动设备上支持多媒体功能。
注意:HTML 不是应用层的协议,它只是万维网浏览器使用的一种语言。
HTML 定义了许多用于排版的命令(即标签)。把各种标签嵌入到万维网的页面中,构成了所谓的 HTML 文档。HTML 文档是一种可以用任何文本编辑器创建的 ASCII 码文件。HTML 文档的后缀:.html 或 .htm。
3.5.1.1 HTML 文档中标签的用法
3.5.1.2 XML
可扩展标记语言 XML(Extensible Markup Language) 和 HTML 很相似。
设计宗旨是:传输数据,而不是显示数据。
特点和优点:
- 可用来标记数据、定义数据类型;
- 允许用户对自己的标记语言进行自定义,并且是无限制的;
- 简单,与平台无关;
- 将用户界面与结构化数据分隔开来;
3.5.1.3 XHTML
可扩展超文本标记语言 XHTML (Extensible HTML) 与 HTML 4.01 几乎相同,是更严格的 HTML 版本。
作为一种 XML 应用被重新定义的 HTML,将逐渐取代 HTML。
3.5.1.4 CSS
层叠样式表 CSS (Cascading Style Sheets) 是一种样式表语言,用于为 HTML 文档定义布局。
CSS 与 HTML 的区别:HTML 用于结构化内容,而 CSS 则用于格式化结构化的内容。
例如:精确规定在浏览器上显示的字体、颜色、边距、高度、宽度、背景图像等。
3.5.2 动态万维网文档
静态文档:该文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。
动态文档:文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。
- 动态文档和静态文档之间的主要差别体现在服务器端:文档内容的生成方法不同。从浏览器的角度看,这两种文档并没有区别。
从上面的描述可以看出,要实现动态文档就要以下两个方面对万维网服务器的功能进行扩充:
- 增加一个应用程序:处理浏览器发来的数据,并创建动态文档。
- 增加一个机制:使万维网服务器把浏览器发来的数据传送给这个应用程序,然后万维网服务器能够解释这个应用程序的输出,并向浏览器返回 HTML 文档。
3.5.2.1 CGI
通用网关接口 CGI (Common Gateway Interface) :定义动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用的一种标准。
- 通用:CGI 标准所定义的规则对其他任何语言都是通用的。
- 网关:CGI 程序的作用像网关。
- 接口:有一些已定义好的变量和调用等可供其他 CGI 程序使用。
3.5.2.2 CGI 网关程序
正式名字:CGI 脚本 (script)。
- 脚本:指的是一个程序,它被另一个程序(解释程序)而不是计算机的处理机来解释或执行。
- 脚本语言 (script language):如 Perl, JavaScript,Tcl/Tk 等。也可用一些常用的编程语言写出,如 C,C++等。
脚本运行起来要比一般的编译程序要慢。脚本不一定是一个独立的程序,可以是一个动态装入的库,甚至是服务器的一个子程序。
CGI 程序又称为 cgi-bin 脚本,因为在许多万维网服务器上,将 CGI 程序放在 /cgi-bin 的目录下。
4 电子邮件
4.1 电子邮件概述
电子邮件 (e-mail):指使用电子设备交换的邮件及其方法。
优点:使用方便,传递迅速,费用低廉,可以传送多种类型的信息(包括:文字信息,声音和图像等)。
重要标准:
- 简单邮件发送协议:SMTP
- 互联网文本报文格式
- 通用互联网邮件扩充 MIME
- 邮件读取协议:POP3 和 IMAP
4.1.1 用户代理 UA(User Agent)
用户与电子邮件系统的接口。又被称为电子邮件客户端软件。
基本功能:撰写、显示、处理、通信。
4.1.2 邮件服务器(Mail Server)
- 被称为邮件传输代理。
- 功能:发送和接收邮件,同时还要向发信人报告邮件传送的情况。
- 按照客户服务器方式工作。
邮件发送和读取使用不同的协议。
- 简单邮件发送协议 SMTP:用于在用户代理向邮件服务器或邮件服务器之间发送邮件。
- 邮局协议 POP3:用于用户代理从邮件服务器读取邮件。
邮件服务器必须能够同时充当客户和服务器。SMTP 和 POP3(或 IMAP)都使用 TCP 连接可靠地传送邮件。
注意:邮件不会在互联网中的某个中间邮件服务器落地。
4.1.3 电子邮件的组成
电子邮件由信封 (envelope) 和内容 (content) 两部分组成。电子邮件的传输程序根据邮件信封上的信息来传送邮件。
用户在从自己的邮箱中读取邮件时才能见到邮件的内容。
4.1.4 电子邮件地址的格式
在邮件的信封上,最重要的就是收件人的地址。
TCP/IP 体系的电子邮件系统规定电子邮件地址的格式如下:
4.2 简单邮件传送协议 SMTP
SMTP 规定了在两个相互通信的 SMTP 进程之间交换信息的方法。
SMTP 是一个基于文本的(即 ASCII 码)的协议。SMTP 客户与服务器之间采用命令-响应方式进行交互。
SMTP 使用客户服务器方式。
- SMTP 基于 TCP 实现客户与服务器的通信。
4.2.1 SMTP 通信的三个阶段
- 连接建立:连接是在发送主机的 SMTP 客户和接收主机的 SMTP 服务器之间建立的。SMTP 不使用中间的邮件服务器。
- 邮件传送
- 连接释放:邮件发送完毕后,SMTP 应释放 TCP 连接。
4.2.2 连接建立
发件人的邮件送到发送方邮件服务器的邮件缓存后,SMTP客户就每隔一定时间对邮件缓冲扫描一次。如发现有邮件,就是用SMTP的熟知端口号25与接收方邮件服务器的SMTP服务器建立TCP连接。
如在一定时间内发送不了邮件,邮件服务器会把这个情况通知发件人。
SMTP不使用中间的邮件服务器,不管发送方和接收方的邮件服务器有多远,不管要经过多少个路由器,TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立。
4.2.3 邮件传送
邮件的传送从MAIL命令开始,MAIL命令后面有发件人的地址。若SMTP服务器已准备好接收邮件,则回答“250 OK”。否则,返回一个代码,指出原因。
下面跟着一个或多个RCPT命令,取决于把同一个邮件发送给一个或多个收件人。每发送一个RCPT命令,都应有相应的信息从SMTP服务器返回。
RCPT命令的作用是:先弄清楚接收方系统是否已做好接受邮件的准备,然后才发送邮件。这样做是为了避免浪费通信资源,不至于发送了很长的邮件以后才知道地址错误。
再下面就是DATA命令,表示要开始传送邮件的内容了。虽然SMTP使用TCP连接试图使邮件的传送可靠,但是“发送成功”不代表“收件人读取了这个邮件”,再往后的情况如何,有以下几种可能:
- 接受方的邮件服务器刚收到邮件后就出现故障,使收到的邮件全部丢失。
- 收件人未查看自己的邮件。
- 收件人的邮箱容量用尽,无法接受新的邮件。
- 被误判为垃圾邮件。
4.2.4 连接释放
邮件发送完之后,SMTP客户应发送QUIT命令。SMTP服务器返回的使“221 服务关闭”,表示SMTP同意释放TCP连接,邮件传送过程结束。
4.2.5 SMTP的缺点
- FROM命令后面的地址可以随便填写
- SMTP传送的邮件是明文,不利于保密
针对上述问题,提出ESMTP,即扩充的SMTP。
4.2.6 电子邮件的信息格式
一个电子邮件分为信封和内容两大部分。RFC 5322 只规定了邮件内容中的首部 (header) 格式。邮件的主体 (body) 部分则让用户自由撰写。
4.3 邮件读取协议 POP3 和 IMAP
两个常用的邮件读取协议:
- POP3:邮局协议 (Post Office Protocol) 第3个版本
- IMAP:网际报文存取协议 (Internet Message Access Protocol)
4.3.1 POP3协议
POP3 使用客户服务器方式,基于 TCP 实现客户与服务器的通信。
POP3 协议的一个特点是只要用户从 POP3 服务器读取了邮件,POP3 服务器就把该邮件删除。
4.3.2 IMAP 协议
lMAP 使用客户服务器方式,并且 lMAP 基于 TCP 实现客户与服务器的通信。lMAP 是一个联机协议。
4.3.2.1 IMAP 的特点
- 连接后只下载邮件首部(部分下载)。
- 用户直接在 IMAP 服务器上创建和管理文件夹。
- 用户可以搜索邮件内容。
- 用户可以在不同的地方使用不同的计算机随时上网阅读和处理自己的邮件。
- 允许收信人只读取邮件中的某一个部分。
缺点:要想查阅邮件,必须先联网。
4.3.3 IMAP 与 POP3 比较
必须注意:
- 邮件读取协议 POP 或 IMAP 与邮件传送协议 SMTP 完全不同。
- 发信人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件,都是使用 SMTP 协议。
- 而 POP 协议或 IMAP 协议则是用户从目的邮件服务器上读取邮件所使用的协议。
4.4 基于万维网的电子邮件
用户代理 (UA) 的缺点:
- 必须在计算机中安装用户代理软件。
- 收发邮件不方便。
万维网电子邮件优点:
- 不需要在计算机中再安装用户代理软件。
- 计算机能联网,就能非常方便地收发电子邮件。
- 界面非常友好。
- 发送、接收电子邮件时使用 HTTP 协议。
- 两个邮件服务器之间传送邮件时使用 SMTP。
使用 HTTP POST 方法提交要发送的邮件,使用 HTTP GET 方法读取邮件。
4.5 通用互联网邮件扩充 MIME
SMTP 缺点:
- 不能传送可执行文件或其他的二进制对象。
- 限于传送 7 位的 ASCII 码,无法传送非 ASCII 编码的信息。
- 服务器会拒绝超过一定长度的邮件。
- 某些 SMTP 的实现并没有完全按照 [RFC 821] 的 SMTP 标准。
4.5.1 MIME 概述
通用互联网邮件扩充 MIME 并没有改动 SMTP 或取代它。
意图:继续使用目前的 [RFC 822] 格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。
MIME 和 SMTP 的关系:
MIME 主要包括三个部分
- 5 个新的邮件首部字段。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
4.5.1.1 MIME 增加 5 个新的邮件首部
4.5.2 内容传送编码(Content-Transfer-Encoding)
4.5.2.1 Quoted-printable 编码
- 适用于所传送的数据中只有少量的非 ASCII 码的情况。
原来 1 个字节,现在需要 3 个字节,开销 = 200%
4.5.2.2 Base64 编码
- 适合任意长度的二进制数据。编码表如下:
用两个连在一起的二个等号“==”和一个等号“=”分别表示最后一组的代码只有 8 位或 16 位。
4.5.3 内容类型
MIME 标准规定:Content-Type 说明必须含有两个标识符:内容类型 (type) 和子类型 (subtype),中间用“/”分开。
MIME 标准原先定义了 7 个基本内容类型和 15 种子类型。
MIME 允许发件人和收件人自己定义专用的内容类型。但为避免可能出现名字冲突,标准要求为专用内容类型选择的名字要以字符串 X-开始。
4.5.3.1 MIME Content-Type 说明中的类型及子类型
Multipart 很有用,使邮件增加了相当大的灵活性。
4.5.3.2 MIME 举例
5 动态主机配置协议 DHCP
在协议软件中,给协议参数赋值的动作叫做协议配置。一个协议软件在使用之前必须是已正确配置的。具体的配置信息取决于协议栈。
连接到互联网的计算机的协议软件需要正确配置的参数包括:
- IP 地址
- 子网掩码
- 默认路由器的 IP 地址
- 域名服务器的 IP 地址
动态主机配置协议 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用连网 (plug-and-play networking) 的机制,允许一台计算机加入网络和获取 IP 地址,而不用手工配置。
DHCP 给运行服务器软件、且位置固定的计算机指派一个永久地址,给运行客户端软件的计算机分配一个临时地址。
需要 IP 地址的主机在启动时就向 DHCP 服务器广播发送发现报文(DHCPDISCOVER),这时该主机就成为 DHCP 客户。
本地网络上所有主机都能收到此广播报文,但只有 DHCP 服务器才回答此广播报文。
DHCP 服务器先在其数据库中查找该计算机的配置信息。若找到,则返回找到的信息。若找不到,则从服务器的 IP 地址池(address pool)中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文(DHCPOFFER)。
5.1 DHCP 工作方式
DHCP 使用客户服务器方式,采用请求/应答方式工作。
DHCP 基于 UDP 工作,DHCP 服务器运行在 67 号端口, DHCP客户运行在 68 号端口。
需要 IP 地址的主机向 DHCP 服务器广播发送发现报文 (DHCPDISCOVER) 。
DHCP 服务器回答提供报文 (DHCPOFFER) (单播),提供 IP 地址等配置信息。
5.2 DHCP 中继代理 (relay agent)
问题:每个网络上都需要有 DHCP 服务器吗?
- 不需要,因为会使 DHCP 服务器的数量太多。
问题:若没有 DHCP 服务器,如何自动获得地址?
- 每一个网络至少有一个 DHCP 中继代理,它配置了 DHCP 服务器的 IP 地址信息。
DHCP 中继代理以单播方式转发发现报文:
- DHCP 中继代理收到主机广播发送的发现报文后,就以单播方式向 DHCP 服务器转发此报文,并等待其回答。
- 收到 DHCP 服务器回答的提供报文后,DHCP 中继代理再将其发回给主机。
5.3 租用期 (lease period)
DHCP 服务器分配给 DHCP 客户的 IP 地址的临时的,因此 DHCP 客户只能在一段有限的时间内使用这个分配到的 IP 地址。DHCP 协议称这段时间为租用期。
租用期的数值应由 DHCP 服务器自己决定。
DHCP 客户也可在自己发送的报文中(例如,发现报文)提出对租用期的要求。
5.4 DHCP 协议的工作过程
- DHCP 服务器被动打开 UDP 端口 67,等待客户端发来的报文。
- DHCP 客户从 UDP 端口 68 发送 DHCP 发现报文 DHCPDISCOVER。
- 凡收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文 DHCPOFFER,因此 DHCP 客户可能收到多个 DHCP 提供报文 。
- DHCP 客户从几个 DHCP 服务器中选择其中的一个,并向所选择的 DHCP 服务器发送 DHCP 请求报文 DHCPREQUEST。
- 被选择的 DHCP 服务器发送确认报文 DHCPACK,DHCP 客户可开始使用得到的临时 IP 地址了,进入已绑定状态。
- DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,它们的超时时间分别是 0.5T 和 0.875T。当超时时间到时,就要请求更新租用期。
- 租用期过了一半(T1 时间到),DHCP 发送请求报文 DHCPREQUEST,要求更新租用期。
- DHCP 服务器若同意,则发回确认报文 DHCPACK。DHCP 客户得到了新的租用期,重新设置计时器。
- DHCP 服务器若不同意,则发回否认报 DHCPNACK。这时 DHCP 客户必须立即停止使用原来的 IP 地址,而必须重新申请 IP 地址(回到步骤2)。
- 若 DHCP 服务器不响应步骤 6 的请求报文 DHCPREQUEST,则在租用期过了 87.5% 时 (T2 时间到),DHCP 客户必须重新发送请求报文 DHCPREQUEST(重复步骤 6),然后又继续后面的步骤。