3.因特网运输协议所不提供的服务
我们已经从四个方面组织了运输协议服务:可靠数据传输、吞吐量、定时、安全性。TCP和UDP提供了这些服务中的哪些呢?TCP提供了可靠的端到端数据传送,TCP在应用层可以很容易地用SSL来加强以提供安全服务,但我们在对TCP和UDP的简要描述中,明显的缺少了对吞吐量或者定时保证的讨论,即这些服务目前的因特网运输协议并没有提供。今天的因特网通常能够为时间敏感应用提供满意的服务,但它不能提供任何定时或者带宽的保证。
2.1.5应用层协议
我们刚刚学习了通过把报文发送进套接字使用网络进程间实现相互通信。但是如何构造这些报文?在这些报文中的各个字段的含义是什么?进程何时发送这些报文?这些问题都将我们带进应用层协议的范围。应用层协议定义了运行在不同端系统上的应用程序进程如何互相传递报文,特别是应用层协议定义了:
1.交换的报文类型,例如请求报文和响应报文。
2.各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
3.字段的语义,即这些字段中包含的信息的含义。
4.一个进程何时以及如何发送报文。对报文进行响应的规则。
有些应用层协议是由RFC文档定义的,因此它们位于公共域中,例如,web的应用层协议HTTP,就作为一个RFC可供使用。如果浏览器开发者尊从HTTP RFC规则,所开发的浏览器就能访问任何尊从该文档标准的web服务器并获取相应web页面。还有很多别的应用层协议是专用的,有意不为公共域使用,例如Skype使用了专用的应用层协议。
区分网络应用和应用层协议是很重要的,应用层协议只是网络应用的一部分。我们来看一些例子,Web是一种客户--服务器应用,它允许客户按照需求从web服务器获得文档,该web应用有很多组成部分。包括文档格式的标准(即HTML)、Web浏览器、web服务器,以及一个应用层协议。web的应用层协议是HTTP,它定义了在浏览器和web服务器之间传输的报文格式和序列。因此,HTTP只是web应用的一个部分。举另外一个例子,因特网电子邮件应用也有很多组成部分,包括能容纳用户邮箱的邮件服务器,允许用户读取和生产邮件的邮件客户程序、定义邮件报文结构的标准、定义报文如何在服务区之间以及如何在服务器与邮件客户程序之间的传递的应用层协议,定义如何对报文收不的内容进行解释的应用层协议,用于电子邮件的主要应用层协议就是SMTP。因此,电子邮件的首要应用层协议SMTP也只是电子邮件应用的一个部分。
2.2Web和HTTP
2.2.1HTTP概况
Web的应用层协议是超文本传输协议,它是web的核心。在【RFC 1945】和【RFC2919】中进行了定义,HTTP由两个程序实现:一个客户程序和一个服务器程序,客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。
Web页面(web page)是由对象组成的。一个对象只是一个文件,例如HTML文件,一个JPGE图片,一个Java小程序或一个视频片段这样的文件,且它们可以通过一个url地址寻址,多是Web页面含有一个HTML基本文件以及几个引用对象。
HTTP定义了web客户向web服务器请求web页面的方式,以及服务器向客户传送web页面的方式,我们稍后详细讨论了客户和服务器的交互过程。
HTTP使用TCP作为他的运输协议。(不是在UDP上运行)HTTP客户首先发起了一个与服务器的TCP连接,一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP,如同之前描述的那样,客户端的套接字接口是客户进程与TCP连接之间的门,在服务器端的套接字接口则是服务器进程与TCP连接之间的门,客户向他的套接字接口发送HTTP请求报文并从他的套接字接口接受HTTP响应报文。类似地,服务器从它的套接字接口接受HTTP请求和向他的套接字接口发送HTTP响应报文。一旦客户向他的套接字接口发送了一个请求报文,该报文就脱离了客户控制并进入TCP控制。TCP是面向连接,以及可靠的,这里我们看到了分层体系结构的最大优点,即HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节,那是TCP以及协议栈较低层的协议工作。
注意到下列现象很重要:服务器向客户发送请求的文件,而不存储任何关于该客户的状态信息,假如某个特定的客户在短短几秒钟两次请求同一个对象,服务器并不会因为刚刚为该客户提供了该对象就不再作出反应,而是重新发送该对象,就像服务器已经完全忘记不久之前做过因为HTTP服务器并不保存关于客户的任何信息,所以说我们说HTTP是一个无状态协议,我们同时也注意到Web使用了客户-服务器应用程序体系结构。Web服务器总是打开的,具有一个固定的IP地址,且他服务于可能来自数以百万计的不同浏览器的请求。
2.2.2非持续连接和持续连接
在许多因特网应用程序中,客户和服务器在一个相当长的时间范围内通信,其中客户发出一系列请求并且服务器对每个请求进行响应,依据应用程序以及该应用程序的使用方式,这一系列请求可以以规则的间隔周期性低或者间断性的一个接一个发出。当这种客户
-服务器的交互式经TCP连接进行的,应用程序的研制者就需要做一个重要决定,即每个请求/响应对是经一个单独的TCP连接发送。还是所有的请求及其响应经相同的TCP连接发送呢?采用前一种方法,该应用程序被称为使用非连续连接;采用后一种方法,该应用程序被称为连续连接。为了深入的理解该设计问题,我们研究在特定的应用长袖即HTTP的情况下持续连接的优点和缺点。HTTP既能够使用非持续连接,也能使用持续连接,尽管HTTP在其默认方式下使用持续连接,HTTP客户和服务器也能配置称使用非持续连接。
2.2.2.1采用非持续连接的HTTP
我们看看在非持续连接情况下,从服务器像客户传送一个web页面的步骤。假设该页面含有一个HTML基本文件和10哥JPEG图形,并且这11个对象位于同一台服务器上。
该HTML文件URL为:http://www.someSchool.edu/someDepartment/home.index
让我们看看发生了什么?
1.HTTp客户进程在端口号80发起一个到服务器www.someSchool.edu 的TCP连接,该端口号是HTTP的默认端口。在客户和服务器上分别有一个套接字与该连接相关联。
2.HTTP客户经它的套接字向该服务器发送一个HTTP请求报文,请求报文中包含了路径名/someDepartment/home.index
3.HTTP服务器进程经它的套接字接受该请求报文,从其存储器中检索出对象,在一个HTTP响应报文中封装对象,并通过其套接字向客户发送响应报文。
4.HTTP服务器进程通知TCP断开该TCP连接(但是直到TCP确认客户已经完整的收到响应报文位置,它才会实际中断连接
5.HTTP客户接受响应报文,TCP连接关闭,该报文指出封装的对象是一个HTML文件,客户从响应报文中提取出该文件,检查该HTML文件,得到对10个JPEG图形的引用)
6.对每个引用的JPEG图形对象重复前4个步骤。
当浏览器收到web页面后,显示给用户,两个不同的浏览器也许会以不同的方式解释该页面。HTTP与客户如何解释一个Web页面毫无滚袭,仅定义了在HTTP客户程序与HTTP服务器程序之间的通信协议。
上面的步骤详细说明了非持续连接的步骤。其中每个TCP连接在服务器发送一个对象后关闭,即该连接并不为其他对象而持续下来,值得注意的是每个TCP连接只传输一个请求报文和响应报文,因此在本例中,一共要产生11个TCP连接。
在上面的描述中,我们有意没有明确客户获得这10个JPEG图形对象是使用10个串行的TCP连接,还是某些JPEG对象使用了一些并行的TCP连接。实际上,用户能够配置浏览器以控制并行度。使用并行连接可以缩短响应时间。
2.2.2.2采用持续连接的HTTP
非持续连接有一些特点。首先,必须为每一个请求的对象建立和维护一个全新的连接。对于每一个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量,这就给Web服务器带来了严重的负担,因为一台web服务器可能同时服务于数以百计不同的客户的请求,第二,就像我们刚刚描述的那样,每一个对象经受两倍RTT的交付延时。即一个RTT用于创建TCP,另一个RTT用于请求接收一个对象。
在采用持续连接的情况下,服务器在发生响应后保持该TCP连接打开,在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的TCP连接进行传送,更有甚者,位于同一台服务器的多个web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行。可以一个接一个地发出对对象的这些请求,而不必等待对未决请求的回答。
2.2.3HTTP报文格式
2.2.3.1请求报文
下面提供了一个典型的HTTP请求报文:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
报文时用普通的ASCII文本书写的,这样有一定计算机知识的人都能够阅读它,其次,我们看懂该报文由5行组成。美航由一个回撤和换行符结束,最后一行后再附加一个回车换行符
2.2.3.2HTTP响应报文
HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Typr: text/html
(data data data data data)
2.2.3.3状态码
200 OK:请求成功,信息在返回的响应报文中
301 Moved Permanently:请求的对象已经被永久转移了,新的URL定义在响应报文中的Location:首部行中,客户软件将自动获取新的URL。
400 Bad Request: 一个通用的差错代码,指示该请求不能被服务器理解。
404 Not Found: 被请求的文档不再服务器上,
505 HTTP Version Not Supported: 服务器不支持请求报文使用的HTTP协议版本。
2.2.4 用户与服务器的交互:cookie
我们前面提到了HTTP服务器时无状态的,这简化了服务器的设计,并且允许工程师们去开发可以同时处理数以千计的TCP连接的高性能Web服务器,然而一个Web站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来,为此,HTTP使用了cookie。
cookie技术有四个组件:1.在HTTP响应报文中的一个cookie首部行;2.在HTTP请求报文中的一个cookie首部行;3.在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;4.位于Web站点的一个后端数据库。
2.2.5Web缓存
web缓存器,也叫代服务器,它是能够代表初始Web服务器来满足HTTP请求的网络实体,Web缓存器有自己的磁盘存储空间。并在存储空间保存最近请求过的对象的副本。
假设浏览器正在请求对象。将会发生如下情况:
1.浏览器建立一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送HTTP请求。
2.Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,web缓存器就像客户浏览器用HTTP响应报文返回该对象。
3.如果Web缓存器中没有该对象,他就打开一个与该对象的初始服务器的TCP连接。web缓存器则在这个缓存器到服务器的TCP连接上发送一个对该对象的HTTP请求,在收到该请求后,初始服务器向该Web缓存器发送具有该对象的HTTP响应。
4.当Web缓存器接收到该对象时,他在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本。
page = 76