随着网络技术的发展和网络应用的普及,各方面的网络应用也不断涌现。每类网络应用都需要对应的应用服务支持,“应用层”要解决的问题就是为用户提供所需的应用服务。
前面各篇文章介绍的内容主要完成了两方面的功能,一是网络连接的建立(或者说是网络通信平台的搭建),二是数据传输通道(包括数据链路层构建的局域网内部点对点数据传输通道和传输层构建的不同网络间端对端数据传输通道)的建立。
它们的最终目的只有一个,那就是为运行的网络应用搭建有效的平台,这就是本文将要介绍的内容,即OSI/RM和TCP/IP体系结构的最高层—“应用层”所提供的应用服务。
应用层通过使用下面各层所提供的服务,直接向用户提供服务,是计算机网络与用户之间的界面或接口。就像其他各层所提供的服务一样,应用层的各种服务功能也是通过具体的通信协议来实现的。
但要注意的是,应用层提供的同样是服务,而不是提供具体的网络应用软件。但与其他各层一样,在网络体系结构中,每一层都有一个服务作用实体,“应用层”的实体(AE)就是各种正在运行的用户网络应用进程。
网络应用软件之间最常用、最重要的交互模型是C/S(Client/Server,客户端/服务器)模型。例如,Web服务、E-mail服务、DNS服务、DHCP服务、FTP服务等都是以这种模型为基础工作的。这里所说的“客户端”和“服务器”分别是指通信双方主机上安装的对应应用程序。
网络上的应用程序之间为了能够顺利通信,一方通常需要处于守候状态,等待另一方请求的到来。首先服务器需要时刻守候各种应用服务(通常是通过监听各个传输端口来实现),然后客户端向服务器发出对应的应用会话请求,最后服务器对客户端的会话请求做出响应。
C/S模型不但很好地解决了互联网应用程序之间的同步问题(何时开始通信、何时发送信息、何时接收信息等),而且C/S模型的这种非对等相互作用的特点很好地适应了互联网资源分配不均的客观事实,因此成为互联网应用程序相互作用的主要模型。
在互连网络中,客户发起请求完全是随机的,有可能出现多个请求同时到达服务器的情况。因此,服务器必须具备处理多个并发请求的能力,可以使用以下两种方案。
在迭代服务器解决方案中,服务器程序中包含一个请求队列,客户请求到达后首先进入队列中等待,服务器按照先进先出的原则对这些客户端请求一个个做出响应,即服务器只有处理完前一个请求后才会处理下一个请求。
并发服务器是一个守护进程,在没有请求到达时它处于等待状态。一旦客户端请求到达,服务器立即再为之创建一个子进程,然后回到等待状态,由子进程响应请求。当下一个子进程到达时,服务器再为之创建一个子进程。其中,并发服务器称做主服务器,子进程称做从服务器。
目前网络应用中普及度最高、应用频次最多的是通常所说的万维网(World Wide Web,WWW)服务,或者称为Web服务。Web服务的核心应用层协议是HTTP(Hypertext Transfer Protocol,超文本传输协议),也可以把HTTP看成是Web服务的“幕后英雄”。
❏Web服务注册中心:指互联网注册、管理中心和提供网站域名解析的ISP(Internet服务提供商),是一个可选部分,而在仅用于局域网内部的网站访问中无须使用此部分。它负责互联网网站的注册和管理,并向用户提供互联网域名解析服务。因为它主要涉及域名解析服务—DNS,所以在后面介绍DNS服务时再进行详细介绍。
❏Web服务提供者:指Web服务器,或者称做Web网站,是HTTP服务器端。它是由一些Web服务器程序(如IIS、Apache等)开发的,除了要对网站本身进行描述,并向注册中心注册外,更重要的职责是为Web访问用户提供所需的网页信息。
❏Web服务请求者:指Web用户在访问网站时所用的HTTP客户端程序,如各种浏览器(如IE、Chrome浏览器等)。在Web浏览器中输入网站的域名或IP地址,或者在其他网站或文档上单击该网站的链接即可进入到对应的网站,然后再单击相应的页面链接访问所需要的文字、图片、音/视频等页面。
如果没有一个基于全球范围的唯一标识,那么要在互联网中找到你需要访问的那一个网站或网页,是无法想象的。在万维网中,存在3种全球统一标识,分别是URL(Uniform Resoure Locator,统一资源定位器)、URI(Uniform Resource Identifier,统一资源标识符)和URN(Uniform Resource Name,统一资源名称)。
URL和URN都是URI的子集,在应用上可视为URL、URN或两者兼备。但这两种统一标识实际上使用频率并不高,现在主要用的还是URL。
URL是用来定位资源的,标识的是访问对应资源的路径,
<协议>://<主机名>:<端口>/<路径>
http://www.baidu.com
URI是用来标识资源的
<方案名>:<主机名>/<路径>
mailto:mbox@domain
ftp://user:pass@server/file
URN则是用来为资源命名的。
URN仅是指资源的名称,如国际书号、互联网电子邮箱账户、RFC文档等。URN如同一个人的名称,而URL代表一个人的住址,
注意,URI中的标识符可以是资源的名称,也可以是资源的地址。
HTML是一种万维网的标记语言(不是一种开发语言),用来结构化信息,如标题、段落和列表等,也可用来在一定程度上描述文档的外观和语义
HTML使用一套标签(tag)来标记网页内容的格式并进行排版。HTML标记标签通常称为HTML标签(HTML tag)。
1.静态HTML文档:网页内容是静态分配的,用户每次访问时所看到的内容是一样的。
2.动态HTML文档:动态HTML文档不是由管理员事先制作好的网页,而是即时由服务器应用程序或者脚本程序,根据当前应用和用户提交的表单数据自动生成的,其显示的内容是在不断变化的。
既然动态HTML文档不是事先制作并保存在服务器磁盘上的,就需要有专门的网络应用程序来生成。当用户在网站上单击选择了某类应用时,Web服务器就会调用对应的应用程序,然后把控制权交给该应用程序。而该应用程序接收用户在表单中输入的数据,用户确认提交表单后应用程序就会对所提交的数据根据对应的网络应用程序功能进行处理,然后在用户浏览器中输出处理的结果。由于用户每次提交的数据,或者应用环境不一样,所以可能每次最终从Web服务器端返回的页面内容都是不一样的
3.逻辑接口—CGI(Common Gateway Interface,公共网关接口)
CGI是一种基于浏览器的输入,并可在Web服务器上运行应用程序(统称CGI程序)的方法。它允许Web服务器与后端程序及脚本进行通信,同时后端程序和脚本又可接收用户的输入信息(主要是来自表单),最后还能以HTML页面作为用户进行表单提交后的响应
“超文本”(HyperText)其实也是一种文本格式,只是它可用下面将要介绍的“超链接”的方法,将保存在不同位置的文档或者文本信息组织在一起,构成一个相互关联的网状文本
“超媒体”(HyperMedia)其实可以看成是前面“超文本”属性的扩展,把“超文本”中的文本媒体保存格式扩展到其他所有格式。除了传统的文本信息、静态图片外,还有动态图像、动画、音/视频等各种媒体格式。
“超链接”(HyperLink)是HTML文档的最重要属性,是指从一个网页指向一个目标的连接关系。这个目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是一个图片、一个电子邮件地址、一个文件,甚至是一个应用程序。
一个网站包括多级网页层次结构,如主页、次主页(主要是一些主要栏目)和普通网页,它们共同构成一个多层次的网站结构。访问网站时,首先看到的是一个网站的主页,而在网站主页中又会把下一级的次主页以超链接的方式显示出来,这样用户就可以从网站主页上直接打开次主页,在次主页下面又可以有次次主页。
HTTP是一个面向文本(text-oriented)的应用层协议,所使用的服务端口是TCP的80端口(这就是HTTP服务的传输层地址),通信双方就是在这个端口上进行通信的。当然,这个端口是可以更改的,但目前互联网上的Web服务器都是使用这个默认的80端口。
每个Web服务器都有一个应用进程,时刻监听着80端口的用户访问请求。当有用户请求(以HTTP请求报文方式)到来时,它会尽快做出响应(以HTTP响应报文方式),返回用户访问的页面信息。当然,这一切都建立在传输层创建好对应的TCP连接基础之上。
HTTP允许在同一个TCP连接基础上访问同一网站服务器上的多个不同页面,仅当用户关闭对应的网站时,对应的网站TCP传输连接才关闭
经历每一个请求-应答过程后就会关闭所使用的TCP连接,单击新的链接后又会重新建立新的TCP连接。
(1)客户端/服务器(C/S)模式
(2)无连接
在进行Web应用前无须建立专门的HTTP应用层会话连接,仅需要直接利用传输层已为它建立好的TCP传输连接即可
(3)高可靠性
虽然HTTP本身是不可靠的无连接协议,但它使用了可靠的TCP传输层协议,在进行HTTP传输之前,已建立了可靠的TCP连接,因此,从数据传输角度来讲,HTTP的报文传输仍是可靠的。
(4)无状态
这里所说“无状态”是指同一客户第二次访问同一Web服务器上的同一页面时,服务器给客户端的响应与第一次是一样的(当然,这是假设Web服务器上的对应页面没有更新),Web服务器不会记住这个客户端曾经访问过这个页面,而做出任何其他响应。
(5)简单快速
客户端通过HTTP访问Web服务器时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST等
在建立好TCP传输连接后,Web客户端首先要进行的是向Web服务器发送HTTP请求报文,请求打开指定的网站或页面。一个HTTP请求报文包括请求行(request line)、请求头部(request header)行、空行和实体主体(entity body)行4个部分
方法:
典型的请求头:
HTTP响应报文也是由四部分组成,分别是响应行(Response)、响应头部(Response Header)行、空行和实体主体行
状态码类型:
典型的http响应头:
DNS(Domain Name System,域名系统)是一种把计算机主机名称解析为对应的IP地址的服务。
当一个应用进程需要把主机名解析为IP地址时,首先该应用程序就调用一个解析器(resolver),使它成为DNS客户,将该主机名作为DNS请求报文参数,以UDP用户数据报方式发送给本地DNS服务器。然后,本地DNS服务器查找该主机名,并且将找到的IP地址放在响应报文中返回给解析器。解析器再将IP地址返回给调用解析器的应用进程,这样应用进程就可以根据所得到的目的IP地址进行通信了。
当然,可能会存在本地DNS服务器不能解析所请求的主机名的情况,这时本地DNS服务器就仅为一个DNS代理角色,然后它可以把这个解析工作交给在本地服务器上配置的其他相关联的DNS服务器。以上就是DNS服务器的“转发器”功能。
从大的范围上讲,整个互联网是一个DNS名称空间,这个空间是由当时可以注册的各级域名共同构成的。
目前,互联网上注册的DNS域名主要有以下3个级别:顶级域名、二级域名和三级域名,其中只有二级及其以下级别的域名才可由用户自己申请,用户不能直接申请顶级域名。
申请的DNS域名是不包括NetBIOS计算机名部分的,如microsoft.com是微软公司所申请的一个二级域名。在这个域名下,可以有许多不同用途的主机,如Web服务器、FTP服务器、E-mail服务器等,而且它们都可以有多个同类服务器。这时,像www.microsoft.com、ftp.microsoft.com、mail.microsoft.com之类的DNS名称中的www、ftp、mail是服务器的NetBIOS计算机名,不包括在DNS域名之内。因此,以上DNS名称都属于二级域名,而不是三级域名,当然,如果确实申请了像www、ftp、mail之类的三级域名,则另当别论。
前面介绍的DNS系统仅是从服务器命名角度来讲的一项技术,但真正担当DNS域名解析任务的还是那些配置了DNS服务的服务器,就是DNS服务器,专业名称为“名称服务器”(或者“域名服务器”)。在DNS名称服务器中,要特别注重两个方面:一是DNS服务器的分区管理,二是DNS服务器的不同类型以及它们之间的关系。
为了提高每台DNS名称服务器的运行效率和利用率,在DNS技术中为此专门提出了“区域”(zone)的概念,就是可以让一台或多台DNS名称服务器负责一个区域的计算机域名解析,而这个“区域”可以包括一个DNS域名树(或者说“DNS域名空间”)的一部分(通常是包括多级域名)或全部,但是绝对不可能大于一个域名树,也就是不能把几个完全不同的域配置为一个区域
如不能把gz.lycb.com和sh.lycb.net划分为一个DNS区域。假设只划分一个区域,则这个区域名只能是lycb.com,因为这才是整个区域中的公共部分。
为了有效地管理整个互联网的DNS域名解析工作,DNS系统开发者设计了一个与分层的DNS域名结构类似的层次化DNS名称服务器结构,把所有DNS名称服务器自高到低分成4个级别:根名称服务器、顶级名称服务器、权威名称服务器和本地名称服务器
(1)根名称服务器
“根名称服务器”(root name server)是由互联网管理机构配置建立的,是最高层次的名称服务器,负责对互联网上所有“顶级名称服务器”进行管理,有全部的顶级名称服务器的IP地址和域名映射。
根名称服务器的作用是仅当用户本地名称服务器解析不了某个顶级域名时,告诉本地名称服务器去找哪个顶级名称服务器。
(2)顶级名称服务器
“顶级名称服务器”(top level name server)是各顶级域名自己的名称服务器,负责它们各自所管理的二级域名解析。
(3)权威名称服务器
“权威名称服务器”(authoritative name server)是针对前面所说的DNS区域提供名称解析服务而专门配置、建立的名称服务器,可为用户提供最权威的DNS域名解析。每一个域名在互联网上都可找到一台权威名称服务器,ISP也可为用户的每一个DNS域名区域配置一台权威名称服务器。
(4)本地名称服务器
这里所说的“本地名称服务器”不是指用户局域网中的名称服务器,而是用户端操作系统所配置的、由本地ISP提供的名称服务器(也就是本地DNS服务器)。它是离用户最近的互联网名称服务器。用户发出的DNS域名解析请求,首先到达的就是本地名称服务器。
如果本地名称服务器解析不了用户所请求的域名,那么这个本地名称服务器就会直接向所配置的根名称服务器发出解析请求,由根名称服务器告知它该向哪个顶级名称服务器查询。如果顶级名称服务器还不能解析,则顶级名称服务器会向本地名称服务器告知要向哪个权威名称服务器发出请求,然后本地名称服务器继续向对应权威名称服务器请求解析。如果权威名称服务器还不能解析的话,则这次DNS域名解析请求失败
DNS服务同样也是C/S工作模式,分为DNS服务器和DNS客户端。其中,DNS客户端以DNS请求报文向DNS服务器发出域名解析请求,DNS服务器以DNS应答报文对客户端的DNS请求做出应答。
❏当DNS数据(包括报头和数据部分)大于512字节时,只能采用TCP进行数据传输,因为UDP中传输的数据最长不能超过512字节。至于是否会分段,取决于具体网络中数据链路层的MTU值。如果被分段,则在DNS报头的TC标志位置1。
❏在区域传输过程中,也就是在从主DNS服务器向辅助DNS服务器传输数据时必须使用TCP,因为这样传输更可靠。
❏当DNS数据小于512字节时(这类情况比较少)是使用TCP,还是UDP,取决于DNS解析器,但请求和应答均使用相同的协议
DNS域名解析其实很多是查找对应域名权威名称服务器,除非在本地名称服务器缓存中已有对应域名的记录。但事实上,名称服务器上的缓存容量和可以缓存的时间都有限,因此,绝大多数情况下是需要向权威名称服务器来求助解析的。
DNS有两种名称解析方式:一种称为“递归解析”(Recursive Solution,RS),另一种称为“迭代解析”(Iterative Solution,IS),也称“反复解析”
“递归解析”是最常见的默认的解析方式。在这种解析方式中,如果客户端配置的本地名称服务器不能解析的话,则后面的查询全由本地名称服务器代替DNS客户端进行查询,直到本地名称服务器从权威名称服务器得到了正确的解析结果,然后由本地名称服务器告诉DNS客户端查询的结果。
DNS迭代解析的所有查询工作全部是由DNS客户端自己完成的(以“DNS客户端”自己为中心)。
DHCP(动态主机配置协议)是一种用于简化主机IP配置管理的服务。通过采用DHCP服务,可以使用DHCP服务器为网络上安装了DHCP服务客户端程序的客户端进行动态IP地址分配和其他相关设置,而不需要管理员对各个客户端进行一一配置,减轻了许多管理负担。
DHCP服务之所以能为DHCP客户端自动分配IP地址,其根本原因是在DHCP服务器中已准备好了用来为客户端分配IP地址的IP地址池。这个IP地址池就像装满了可用于分配的许多IP地址的池子一样,而且这些IP地址是属于一个网段的一部分或者全部的IP地址。
DHCP服务不仅提供简单的IP地址自动分配功能,还可以提供以下附加功能:
❏通过IP地址与MAC地址绑定功能实现静态IP地址的分配。
❏配置客户端的DNS服务器、WINS服务器(仅限Windows操作系统中的DHCP服务器)和默认网关。
❏利用IP地址排除功能,使已静态分配给其他主机(特别是各种服务器)的IP地址不再分配给其他DHCP客户端。
❏通过DHCP中继功能,一个DHCP服务器可以为多个网段(或VLAN)中的DHCP客户端分配不同地址池中的IP地址,进一步简化了网络中的IP地址配置工作。
在下列场合,通常利用DHCP服务来完成IP地址的分配。
❏网络规模较大,手工配置需要很大的工作量,并难以对整个网络进行集中管理。当然,像各种服务器、网络设备节点都是需要采用静态IP地址分配的,否则用户可能无法访问你的服务器,网络设备也无法进行正常的数据转发和路由。
❏网络中主机数目大于该网络支持的IP地址数量,无法给每个主机分配一个固定的IP地址。例如,Internet接入服务提供商限制同时接入网络的用户数目,大量用户必须动态获得自己的IP地址。
❏网络中只有少数主机需要固定的IP地址,大多数主机没有固定的IP地址需求。
在DHCP服务器为DHCP客户端初次提供IP地址自动分配的整个过程中,一共经过了以下4个阶段:
发现阶段(DHCP客户端在网络中广播发送DHCP DISCOVER请求报文,发现DHCP服务器,请求IP地址租约)
提供阶段(DHCP服务器通过DHCP OFFER报文向DHCP客户端提供IP地址预分配)
选择阶段(DHCP客户端通过DHCP REQUEST报文确认选择第一个DHCP服务器为它提供IP地址自动分配服务)
确认阶段(被选择的DHCP服务器通过DHCP ACK报文把在DHCP OFFER报文中准备的IP地址租约给对应DHCP客户端)。
如果采用动态IP地址分配策略,则DHCP服务器分配给客户端的IP地址都是有一定的租约期限的,当租约期满后,DHCP服务器又会收回原来分配的这个IP地址。如果DHCP客户端希望继续使用该地址,则需要向DHCP服务器提出更新IP地址租约的申请,也就是前面所说的“续约”。
步骤如下:
1)在DHCP客户端的IP地址租约期限达到1/2时,由DHCP客户端向为它分配IP地址的DHCP服务器以单播方式发送DHCP REQUEST请求报文,以期进行IP租约的更新。
2)如果DHCP服务器同意续约,则DHCP服务器向客户端以单播方式返回DHCP ACK报文,通知DHCP客户端已经获得新IP租约,可以继续使用此IP地址;相反,如果DHCP服务器不同意续约,则DHCP服务器以单播方式返回DHCP NAK报文,通知DHCP客户端不能获得新的租约,此IP地址不可以再分配给该客户端。
3)如果上面的续约申请失败,则DHCP客户端还会在租约期限达到7/8时,再次以广播方式发送DHCP REQUEST请求报文进行续约。DHCP服务器的处理方式同上,不再赘述。
如果第二次续约请求还是失败的,则原来租约的IP地址将被释放。
并不是每个网络上都有 DHCP 服务器,这样会使 DHCP 服务器的数量太多。现在是每一个网络至少有一个 DHCP 中继代理,它配置了 DHCP 服务器的 IP 地址信息。
当 DHCP 中继代理收到主机发送的发现报文后,就以单播方式向 DHCP 服务器转发此报文,并等待其回答。收到 DHCP 服务器回答的提供报文后,DHCP 中继代理再将此提供报文发回给主机。
其实这里的DHCP中继代理相当于网关,DHCP广播报文都是通过这个网关来进行转发的。DHCP中继代理服务的典型应用环境就是一个DHCP服务器为所连接的交换机上的多个VLAN分配IP地址。这时因为DHCP服务器只能属于一个VLAN,所以要为多个VLAN同时分配IP地址的话,就必须在这些VLAN与DHCP服务器之间设置一个DHCP中继代理,那就是需要在三层交换机上开启DHCP中继代理服务,让三层交换机充当DHCP中继代理角色。
电子邮件(e-mail)是因特网上使用得最多的和最受用户欢迎的一种应用。
电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可随时上网到自己使用的邮件服务器进行读取。
发送邮件的协议:SMTP
读取邮件的协议:POP3 和 IMAP
MIME 在其邮件首部中说明了邮件的数据类型(如文本、声音、图像、视像等),使用 MIME 可在邮件中同时传送多种类型的数据。
整个电子邮件系统包括“用户代理”(user agent)和“消息传输代理”(message transfer agent)两大部分。
“用户代理”负责电子邮件书写、发送、接收和阅读电子邮件,是安装在用户端上的各种电子邮件客户端软件,是用户与电子邮件系统间交互的本地程序。
“消息传输代理”负责电子邮件在发件方的客户端和收件方的服务器端之间,以及在发件方的服务器端与收件方的服务器端之间的传输,是安装在ISP或者本地网络中的各种电子邮件服务器软件。
要书写和阅读电子邮件,必须先规定标准的电子邮件消息格式。
在“信封”部分包括多个消息头,每个消息头占一行,每行包括一个关键字(keyword)和一个对应的值(value),中间用冒号(:)分隔。
常用的关键字包括:Date(邮件发送日期)、From(发件人)、Subject(邮件标题)、Sender(写信人)、To(收件人)、Cc(抄送)、Bcc(密送)、Reply-To(回信地址)等。
在Subject关键字后,每次回复都在前面加上一个“Re”,从中可以看出这是第几次回复;
前面介绍的RFC2822电子邮件消息格式只能传输ASCII码格式的数据,一些非英语字符消息,像二进制文件、图像、声音等非文字消息都不能在电子邮件中传输。
MIME消息可以包含ASCII文本、图像、音频、视频以及其他应用程序专用的数据,大大扩展了电子邮件消息的数据类型。当然,目前MIME消息格式不仅应用于电子邮件中,还在各种浏览器中普遍应用。
每个MIME类型由两部分组成,前面是数据的大类别,如audio(音频)、image(图像)、video(视频)等,后面定义具体的子类。
在电子邮件格式方面,MIME也继承了RFC2822的格式,分为“信封”和“邮件正文”两部分。在“信封”部分除了仍支持RFC2822中的消息头外,另外新增了如图所示的消息头。
MIME 和 SMTP 的关系
SMTP 所规定的就是在两个相互通信的 SMTP 进程之间应如何交换信息。
由于 SMTP 使用客户服务器方式,因此负责发送邮件的 SMTP 进程就是 SMTP 客户,而负责接收邮件的 SMTP 进程就是 SMTP 服务器。
1. 连接建立:连接是在发送主机的 SMTP 客户和接收主机的 SMTP 服务器之间建立的。SMTP不使用中间的邮件服务器。
2. 邮件传送
3. 连接释放:邮件发送完毕后,SMTP 应释放 TCP 连接。
上面介绍的SMTP服务采用“推”的方式可以把邮件发送到发件方自己的电子邮件服务器,然后由发件方的电子邮件服务器转发到收件方的电子邮件服务器上。
但是,收件方的电子邮件服务器不会通过SMTP服务再把邮件推送到收件人主机上,因为收件人并不知道什么时候有人发邮件给他,也不可能24小时在线,即不可能随时接收。我们希望的是像发件人发送邮件那样,在需要的时候随时进行接收。这时就得靠POP3这样具有“拉”(pull)功能的邮件服务了。
从理论上来讲,也可以把整个POP3邮件接收过程分为“连接建立”、“邮件接收”和“连接释放”这3个阶段。POP3客户端必须与POP3服务器的指定端口建立传输连接(POP3服务器会时刻监听TCP 110端口,一旦有连接请求马上做出应答)。
连接建立阶段其实就是POP3客户端向POP3服务器发出身份验证请求,给出用户名和密码的阶段
邮件接收阶段是用户在进行邮件接收时进行的各种操作
连接释放阶段是POP3客户端在接收完全部邮件,或者进行完所有需要的操作后释放本次POP3应用会话连接的过程
在接收邮件方面,除了前面介绍的POP3外,目前还有一种功能更强大,但也更复杂的协议—IMAP4(Internet Message Access Protocol 4,互联网消息访问协议第4版)
与POP3类似,IMAP4(对应RFC3501)也是为用户提供邮件接收服务的(发送邮件同样是使用SMTP)。IMAP4改进了POP3的不足,具体来说,它有以下几方面的特性:
(1)支持服务器端邮件副本存储
在默认情况下,POP3客户端程序在将电子邮件下载到计算机上后,会从服务器上删除所有已下载的电子邮件。而IMAP4却可以在电子邮件服务器上保留下载的邮件的副本,这样就可以从多台计算机访问保存在服务器上的同一封电子邮件。
(2)支持离线、在线和断线3种访问方式
POP3仅支持离线访问方式,客户端只会与POP3服务器连接一段时间,直到它下载完所有新信息,客户端即断开连接,而IMAP4可以同时支持离线、在线和断线3种访问方式。
(3)支持多个客户同时连接到一个邮箱
POP3在同一时间只能允许一个用户活动连接,而IMAP4允许同一时间不同用户对同一邮箱的多个用户活动连接,并且提供了一种机制能让客户感知当前连接到这个邮箱的其他用户的操作。
(4)支持选择性获取
如果用户的IMAP客户端软件完整支持IMAP4 rev1的话,则用户还可以享受选择性下载附件的服务,既可以只下载正文,也可以下载部分附件或全部附件。
(5)支持在用户邮箱上创建、管理多个文件夹功能
在POP3中,每个用户邮箱只能有几个默认的文件夹(如草稿箱、发件箱、收件箱、垃圾箱等),不可新建其他文件夹,也不可删除原来的这些默认文件夹,但在IMAP4服务器上,可以在每个默认文件夹下创建多个新的子文件夹,并且可以对各个邮箱文件夹进行重命名,或进行删除操作。这样,用户就可以对接收或者发送的邮件分门别类地进行管理,就像本地磁盘的文件夹管理一样。
(6)支持服务器搜索
IMAP4提供了一种可以使客户端在服务器上搜索符合多个标准的信息的机制,相当于在本地磁盘中进行文件搜索。IMAP4的搜索功能很强大,不仅可以基于邮件标题进行搜索,还可基于邮件信封中其他部分,甚至邮件正文内容进行搜索。
(7)支持客户端和服务器间的拖动操作
一般的IMAP4客户端软件都支持邮件在本地文件夹和服务器文件夹的随意拖动,这样可以让用户轻松地把本地硬盘中的文件存放到服务器上,然后在需要的时候同样方便地取回来,所有的功能仅需要一次鼠标拖放的操作就可以实现,就像在网络中不同主机间的文件操作一样简单。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。