搜档网
当前位置:搜档网 › 网络应用层协议

网络应用层协议


15.3 网络应用层协议
15.3.1 网络应用与应用层协议

在过去的20多年中,人们已经发明了许多非常富有创造性的和奇妙的应用。例如,Web、文件传输、电子邮件、网络新闻和远程存取等等,以及现在正在构思和开发的应用,例如声音点播、网际多目标网络广播(IP multicasting)、影视点播和因特网电话等等,这些叫做网络应用(networking applications)。

这些网络应用通过相应的应用层协议(application-layer protocol)来支持。例如,HTTP,FTP,SMTP,网络新闻传输协议(Network News Transfer Protocol,NNTP)和Telnet等等。这些应用层协议的主要职责是把文件从一台主机传送到另一台主机,协议的主要内容是定义:

(1) 消息的内容,例如请求消息和响应消息。

(2) 各种消息类型的语法结构,也就是消息中的域(field)以及如何描述消息中的域。

(3) 域的语义,也就是域所包含的信息的含义。

(4) 确定通信程序何时发送消息和接收消息的规则。

表15-03列出了流行的部分应用层协议。这些应用层协议留驻在协议堆的最高层(层5),它们依赖传输层(层4)提供两种类型的服务,一种是使用TCP的面向连接服务,另一种是使用用户数据包(User Datagram Protocol,UDP)的无连接服务。例如,HTTP使用TCP协议提供可靠的面向连接的服务,而为多媒体应用制定的协议一般都使用UDP协议提供不可靠的服务,所谓不可靠是指不保证在传输过程不丢失信息包,出现的错误数据既不纠正也不重传。

表15-03 流行的部分应用层协议


网络应用
应用层(层5)协议
传输层(层4)协议

电子邮件(e-mail)
SMTP(RFC 821)
TCP

远程存取 
Telnet(RFC 854)
TCP

万维网(WWW)
HTTP(RFC 2068)
TCP

文件传输
FTP(RFC 959)
TCP

流式多媒体
(streaming multimedia)
(如Real Network公司的)
专用协议
UDP或者TCP

因特网电话
(Internet telephony)
(如Vocaltec公司的)
专用协议
UDP



网络应用和网络应用层协议是两个不同的概念。例如,万维网(Web,World Wide Web,WWW)是环球超媒体信息网,是网络应用的典范,它可让用户从Web服务器上得到文档资料,它所运行的模式叫做客户机/服务机(Client/Server)模式,如图15-12所示。Web应用主要由下面几个部分组成:①文档格式标准(如HTML),②Web浏览器(如Netscape Navigator,Internet Explorer),③Web服务器(如Microsoft公司和Netscape公司的服务器),④应用层上的协议HTTP。Web系统是负责把以HTML语言编写的多媒体文件从运行Web服务器的服务机上传送到运行Web浏览器的客户机,而Web的超文本传输协议(Hypertext Transfer Protocol,HTTP)是网络应用的一小部分。又如电子邮件系统是负责把电子邮件从源端电子邮件服务器(mail ser

ver)传送到终端电子邮件服务器,而简单邮件传输协议(Simple Message Transfer Protocol,SMTP)是该应用系统的一部分。



图15-12 客户机/服务机模式

因特网的许多协议都定义在征求评议文件(Request For Comments,RFC)中。例如,应用层协议HTTP/1.1定义在RFC 2068中,简单邮件传输协议SMTP定义在RFC 821中。随着技术的不断更新,RFC也在不断修改。RFC经过讨论和实践之后就成为标准,并用“STD XXXX”来命名。

执行应用层协议的软件有两个单独的部分:一部分在服务机上运行,通常称为server(服务器),另一部分在客户机上运行。例如,执行HTTP协议的软件,在服务机上的软件叫做HTTP服务器或者叫做WWW服务器,在客户机上的软件通常称为浏览器(browser)。

许多软件包都组合了执行多种协议的应用程序。例如Microsoft公司的Internet Explorer和Netscape公司的Netscape Communicator就有Web浏览器、电子邮件读写器、新闻阅读器等应用程序,这样就把用户、应用程序、应用层协议和传输层协议链在一起,如图15-13所示。



图15-13 “用户-应用程序包-协议”链

 

15.3.2 超文本传送协议HTTP

1989年~1991年在欧洲粒子物理研究所(Conseil Européen pour la Recherche Nucléaire,the European Laboratory for Particle Physics,CERN)由Tim Berners-Lee构思了万维网(Web),它的4个核心部分是HTML,HTTP,Web服务器和Web浏览器。超文本传输协议(Hypertext Transfer Protocol,HTTP)是应用层协议,它定义Web页面如何从Web服务器传送到Web浏览器。直到1997年,几乎所有Web浏览器和Web服务器都使用HTTP/1.0,该协议定义在RFC 1945中。从1998年开始Web浏览器和Web服务器开始执行HTTP/1.1,该协议定义在RFC 2068中。

1. HTTP的执行过程

在服务机向客户机传送文档之前,客户机和服务机需要建立TCP连接(参考下一节的介绍)。TCP连接由客户机上的Web浏览器使用URL中的域名地址(如https://www.sodocs.net/doc/cb16801481.html,)或者叫做服务器的地址来启动(编者已注意到URL中的这个域的英文名称很多,因此中文的名称也很多,但它们的含义都相同)。与TCP的连接一旦建立,Web浏览器就发送一个HTTP请求消息(HTTP Request Message)到这个连接上,服务器接收到请求之后就给Web浏览器回送一个HTTP响应消息(Response Message),在服务器发送响应信息之后就断开TCP连接。Web服务器和Web浏览器之间的通信如图15-14所示。



图15-14 Web服务器和Web浏览器之间的通信

一个典型的Web页面(Web page)由许多Web对象组成,这些对象通常存储在服务机的文件系统中。所谓Web对象是指用URL标识的HTML文件、GIF图象文件、JPEG图象文件、电视图象、声音文件或者Java小应用程序等等,Web网页本身也是Web对象。例如,Web页面

可由HTML格式的文本、JPEG格式的图象和Java小应用程序组成。在传送Web网页时,传送一个对象需要建立一次TCP连接,如图15-15。



图15-15 使用TCP连接传送对象

当客户机接收到Web页面之后,Web浏览器就显示该网页。但不同公司开发的浏览器解释Web页面时,在客户机上显示出的格式可能会有些不相同。HTTP对如何在客户机上显示Web页面不做任何事情,HTTP仅仅定义在客户机和服务机之间如何传送数据。

2. HTTP请求消息

HTTP协议(RFC 1945和RFC 2068)定义了两种消息格式:HTTP请求消息(HTTP Request Message)格式和HTTP响应消息(HTTP Response Message)格式。HTTP消息请求格式如图15-16所示,如前所述,当用户点击超链接以请求Web页面时,首先与相应的Web服务器建立TCP连接,然后经TCP连接把HTTP请求消息发送给Web服务器。



图15-16 HTTP请求消息格式

请求消息由请求行、标题行中的各种标题域和实体主体(entity body)组成。请求行和标题行由ASCII字符组成。图中的sp域、cr域和if域分别代表空格(space)字符、回车-换行(carriage-return)字符和换行(line-feed)字符。我们先看请求行中的那些域:

(1) 统一资源地址域是用户请求访问的Web页面的路径和文件名,而服务器的名称和应用层协议的名称(如http://)是系统自动设置的。如域包含
chinese/internet/search.html

(2) 版本域是客户机使用的HTTP的版本号。1997年是使用HTTP/1.0(RFC 1945),1998年开始使用HTTP/1.1(RFC 2068),它向后兼容HTTP/1.0。

(3) 方法域有很重要的意义,它的值描述请求的方法,两个普通的值是GET和POST:

① GET:如果客户请求一个Web页面就把GET写入域,在这种情况下实体主体域是空的。

② POST:如果客户已经填写了一张表单,例如填写了一个搜索关键字“多媒体”或者“multimedia”,就把POST填入域,然后把这表单送给给服务器,再由服务器交给检索软件(如Yahoo)。如果方法域中的值是POST,实体主体域就包含用户写入表单域中的内容。

在消息请求格式中的其余行是标题行。尽管标题行是可选择的,但客户一般都要在请求消息时插入许多标题行。每一标题行都包含两个部分:标题域名

和相关的值。下面是一个使用GET方法向Web服务器请求对象的一个例子。

****************************************

GET normal/html_design.html HTTP/1.1

Connection:close

User-agent:Netscape Communicator/4.5

Accept:text/html, image/gif, image/jpeg

Accept-language:cn

(extra carriage return, line feed)

****************************************

这个请求消息包含一行请求行和4行标题行,整个消息共有5行ASCII文本。 请

求行(GET normal/html_design.html HTTP/1.1)用来告诉服务器:浏览器使用GET方法想要得到的对象是“normal/html_design.html”,使用的应用层协议是HTTP/1.1。

标题行共有4行,分别是:

① 标题行“Connection:close”用来告诉服务器:浏览器不想采用持续连接,在发送请求对象之后服务器就可断开连接。

② 标题行“User-agent:Netscape Communicator/4.5”用来告诉服务器用户代理的类型,也就是用户使用的浏览器的类型,在这个例子中的用户代理是Communicator/4.5。

③ 标题行“Accept:text/html, image/gif, image/jpeg”用来告诉服务器浏览器准备接收对象的类型。

④ 标题行“Accept-language:cn”用来告诉服务器如果有中文版的对象就发送中文版的对象,没有就发送服务器默认的对象。

3. HTTP响应消息

服务器接收到客户的HTTP请求消息(HTTP Request Message)之后进行分析,将分析和操作结果返回给客户机,具体做法就是发送一条HTTP响应消息(HTTP Response Message),然后断开相应的TCP连接。响应消息的一般格式如图15-17所示。



图15-17 HTTP响应消息格式

从图中可以看到,除了状态行之外,响应消息的格式与请求消息的格式相同。实体主体(entity body)包含有请求消息要求获得的对象,即文件。

除了HTTP的版本号之外,状态行还包含状态码和短语,它们组合起来表示客户请求所获得的结果。例如,如果请求文件存放在Web服务器的文件系统中,而且可发送给客户机,状态码和短语就分别包含“200”和“Document follows”(文档如下)或“OK”。如果客户机请求的文件没有得到的授权,这两个域中的值就分别为“403”和“Forbidden”(禁止),而实体主体可能有一个解释,例如“your client does not have permission to get this URL”(你的客户没有得到允许去访问这个URL)。

一般情况下,3位状态码中的第1位包含一般信息。“1”表示信息码,“2”表示访问成功,“3”表示重定向(即URL已经改变),“4”表示你的请求有误,“5”Web服务器出错。当你存取某个文件时有可能看到下面的一些信息:

200:
表示你的请求得到满足,信息在响应消息中返回。

301:
表示请求的对象已经被删除;新的URL放在响应消息标题中,客户的软件将自动转到新的URL.。

400:
表示服务器不能理解你的请求。

404:
表示服务器没有找到请求的文件,请求的文件不存在。

505:
表示服务器不支持浏览器请求使用的的HTTP版本号。



一个HTTP响应消息的例子如下:

****************************************

HTTP/1.1 200 OK

Connection: close

Date: Thu, 08 Jan 1999 12:00:15 GMT

Server: XXXX

Last-Modified: Mon, 22 Jun 1998 09

:23:24 GMT

Content-Length: 3456

Content-Type: text/html

data data data ...

****************************************

在这个例子中,除了状态行之外还包含6行标题行,而且大多数都自含解释。最后一行标题行的“data data data ……”是传送的实际对象。

服务器一旦发送响应消息,就断开TCP连接。如果HTML文件包含其他对象(如GIF图,JPG图象,AVI文件等),HTTP就对每个对象分别打开一个TCP连接进行传送。HTTP服务器软件不保留任何客户机的状态信息,它只是简单地接收在TCP连接上的对象请求,从文件系统中获取对象,把响应消息中的对象传送给同一TCP连接,然后断开TCP连接。由于HTTP服务器不保留客户的状态信息,所以把HTTP协议称为无状态协议(stateless protocol)。

4. 条件获取

使用过Web浏览器的用户可能已经知道,Web浏览器有一个功能可供用户进行设置,即把客户访问过的Web对象存放在高速缓存(cache)中,Web的高速缓存留驻在客户机上或者留驻在网络上的代理服务机(proxy server)中。浏览器的这种功能是减少已经阅读的对象的时延和减轻Web网络交通负担的一种非常重要的手段,这也是用户(特别是调制解调器用户)省钱的好办法,尤其是对网络速度很低的国家和地区显得更为重要。

使用Web页面缓存有一个危险,就是留驻在缓存中的对象副本会过时,因此用户对一些经常会作修改的网页(如公告栏)需要使用浏览器界面上的刷新操作(如IE浏览器的或者网景公司的)重新获取。幸运的是HTTP有一种措施来保证递送给Web浏览器的页面是最新的,这个措施叫做条件获取(conditional GET)。如果请求消息使用GET方法并且包含If-Modified-Since(如果从…之后修改)标题行,这个HTTP请求就是条件获取。

例如,一个Web浏览器希望得到一个对象,Web浏览器首先检查本机Web浏览器的缓存中是否有此对象。如果请求的对象不在缓存中,Web浏览器就使用标准的GET方法,即不包含If-Modified-Since的标题行;如果对象已经在缓存中,Web浏览器就发送一条带标题行的条件GET消息到原来的Web服务器,如,
If-Modified-Since: Wed, 27 May 1998 10:15:30 GMT
这行标题行表示缓存中的对象是在1998年5月27日格林尼治标准时间10:15:30存储的。当Web服务器接收到这个条件获取消息(conditional GET message)时,如果对象已经修改,就发送这个对象的拷贝给客户机,否则就给客户机发送一条对象没有被修改的响应消息。

5 HTTP/1.0与HTTP/1.1

如前所述,Web服务器和Web浏览器从1998年开始执行新的协议——HTTP/1.1。它是向后兼容HTTP/1.0的协议,即执行HTTP/1.0的Web浏览器能够与执行HTTP/1.1的服务器进行通信,而执行HTTP/1.1的Web浏览器能够与执行HTTP/

1.0的服务器进行通信。

HTTP/1.0和HTTP/1.1都有非持续连接(non-persistent connection)和持续连接(persistent connection)功能。非持续连接是指启动一次TCP连接服务机就向客户机传送一个对象,而持续连接是指服务机可在相同的TCP连接上向客户机发送多个对象。HTTP/1.0的默认设置是非持续连接,而HTTP/1.1的默认设置是持续连接。

在使用HTTP/1.0的情况下,如果打开一个包含一个HTML文件和10个内联图象对象的网页时,HTTP就要建立11次TCP连接才能把文件从服务机传送到客户机。而使用HTTP/1.1的情况下,如果打开同样的文件时,HTTP建立一次TCP连接就可把文件从服务机传送到客户机。使用一次TCP连接传送一个对象的效率比较低,这体现在下列几个方面:

(1) 每次TCP连接必需要建立和断开。客户机和服务机建立一次连接需要执行三向沟通连接法(three-way handshake),服务机在对象递送之后要断开TCP连接。在建立和断开连接时要占用CPU的资源。如果使用一次连接代替11次连接的话,占用客户机和服务机的CPU时间可大大减少。

(2) 对每次连接,客户机和服务机都必须分配发送和接收缓存。这就意味着要影响客户机和服务机的存储器资源,这同样要占用CPU的时间。

(3) 对由大数量对象组成的文件,TCP的低速启动算法(slow start-up algorithm)会限制服务机向客户机传送对象的速度。使用HTTP/1.1之后,大多数对象都可以尽最大的速率传送。

由于HTTP/1.1允许持续连接,文件中的所有对象都可在相同的TCP连接上传送。HTTP/1.1也允许在客户机接收到服务机的消息响应之前发送多个消息请求,这叫做流水线式请求(pipelined request)。