计网/自顶向下/应用层...

计算机网络:自顶向下方法...

--- 第二章:应用层

应用层协议原理

网络应用程序体系结构

从应用程序研发者的角度看,网络体系结构是固定的,并为应用程序提供了特定的服务集。在另一方面,应用程序体系结构由应用程序开发者设计,规定了如何在各种端系统上组织该应用程序。目前有两大主流体系结构:C/S和P2P。

  • C/S体系结构:存在一个总是打开的主机称为服务器(或服务器集群),服务于来自许多其他客户主机的请求。客户之间不直接通信,而服务器具有固定的、周知的IP地址,客户总能钩通过向该服务器的IP地址发送分组来与其联系;服务器还可配备由大量主机构成的数据中心。
  • P2P体系结构:应用程序在间断连接的主机对之间使用直接通信,即各个主机地位均为对等方。P2P最重要的是自扩展性,但也设计到成本效率,因为它们通常不需要庞大的服务器基础设施和服务器带宽。但因为高度非集中式结构,会在安全性、性能、可靠性上遇到挑战。

进程通信

不同端系统上的进程,通过跨越计算机网络交换报文而相互通信,发送进程生成并向网络发送报文,接收进程负责接收并响应。

不管是C/S还是P2P模型,在一对进程之间的通信会话场景中,发起通信的进程被表识为客户;在会话开始时等待联系进程表识为服务器。

进程通过套接字的软件接口向网络发送报文和从网络接收报文。套接字是同一台主机内应用层与传输层之间的接口。套接字是建立网络应用程序的可编程接口,因此也称为应用程序和网络之间的应用程序编程接口。应用程序开发者可以控制套接字在应用层端的一切,但对套接字的控制权仅限于选择运输层协议和设置部分运输层参数。
进程寻址需要两种信息:主机地址和接收进程的表识符;即IP地址和端口号。

供应用层使用的运输层服务

根据应用的不同要求,可分为:

  • 数据传输:应用是否容忍丢失(可靠)
  • 吞吐量:带宽敏感的应用与弹性应用
  • 定时
  • 安全性

应用层协议

应用层协议定义了如下信息:

  • 交换的报文类型,如请求、响应报文
  • 各种交换类型的语法
  • 字段的语义
  • 确定一个进程何时以及如何发送报文,对报文进行响应的规则

Web与HTTP

HTTP概况

Web的应用层协议是超文本传输协议HTTP,由两个程序实现:客户程序和服务器程序,分别运行在不同的端系统,通过HTTP报文进行会话。

Web页面由对象组成,对象是一个文件(HTML、JPEG等),且可通过URL地址寻址。多数Web页面含有一个HTML基本文件以及数个引用对象。Web浏览器实现了HTTP客户端;而Web服务器实现了HTTP的服务器端,它用于存储Web对象,每个对象由URL寻址。

流行的Web服务器有Apache、Microsoft Internet Information Server。

HTTP定义了Web客户向服务器请求Web页面和服务器向客户传送Web页面的方式。HTTP与客户如何解释一个Web页面毫无关系,HTTP规范(【RFC945】和【RFC266】)仅定义了在HTTP客户程序与HTTP服务器程序间的通信协议,而解释Web页面是浏览器的任务。
HTTP使用TCP。HTTP客户首先发起一个与服务器的TCP连接,一旦建立,浏览器与服务器进程即可通过对应的套接字接口访问TCP。服务器端默认端口号80。
Web服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息,因此HTTP是一个无状态协议,并且是C/S模式的。

非持续连接与持续连接

对于一个特定的客户与服务器之间的交互,其每一个请求/响应对是经过一个单独的TCP连接进行发送的,则是非持续连接;若所有的请求/响应对经过相同的TCP连接发送,则是持续连接。

非持续连接的TCP连接在服务器发送一个对象后即关闭,即只传输一个请求报文和一个响应报文。但浏览器可以同时建立多个TCP连接以增加并行度,但大量的TCP连接均需要在服务器中分配TCP缓冲区和保持TCP变量,给服务器带来负担;此外,每一个对象都需要经受两倍RTT的交付时延(创建TCP连接、请求和接收一个对象)。

持续连接可以解决此类问题,甚至同一服务器的多个Web页面发送给同一个客户时可以在一个TCP连接上进行。一般而言,如果一条连接经过一定时间仍未被使用,HTTP会关闭。HTTP的默认模式是使用带流水线的持续连接。

HTTP报文格式

HTTP规定有两种报文:请求报文与响应报文。

请求报文

请求报文第一行叫做请求行,随后的称为首部行。

请求行有三个字段:方法字段、URL字段、HTTP版本字段。方法字段包括GET、POST、HEAD、PUT、DELETE。其中版本字段是自解释的。

  • 使用GET方法时,实体体为空。最常用。
  • 使用POST方法时,实体体存在。常用于客户提交表单。
  • HEAD方法类似于GET,但不返回请求对象。常用于开发者调试跟踪。
  • PUT方法常与Web发行工具联合使用,允许用户上传对象到Web服务器上的指定路径。
  • DELETE方法允许用户删除Web服务器上的对象。

首部行包括了HTTP中众多的内容协商首部。Host指明了对象所在的主机、Connection表示连接方式(close和keep-alive)、User-agent指明用户代理(发送请求的浏览器的类型)、Accept-language指明了希望的得到的人类语言。

响应报文

响应报文包括:初始状态行、首部行、实体体。

状态行有三个字段:协议版本字段、状态码、相应状态信息。常见状态码和相关短语包括:

  • 200 OK:请求成功,信息在返回的响应报文中。
  • 301 Moved Permanently:请求的对象已被永久转移,新的URL定义在响应报文的Location:首部行中。客户软件将自动获取新的URL。
  • 400 Bad Request:通用差错代码,表示请求无法被服务器理解。
  • 404 Not Found:被请求的文档不在服务器上。
  • 505 HTTP Version Not Surpported:服务器不支持使用此版本。

首部行包含了连接方式Connection、发送日期和时间Date、服务方Server、最后修改日期Last-Modified、被发送对象的字节数Content-Length、实体体对象类型Content-Type。

实体体是报文的主要部分,包含了所请求的对象本身。

用户与服务器的交互:cookie

为了简化设计和减轻负担,HTTP服务器是无状态的;而为了使服务器可以识别用户,就需要使用cookie【RFC6265】。
cookie允许站点对用户进行跟踪,包含了4个组件:

  • HTTP响应报文的一个cookie首部行
  • HTTP请求报文的一个cookie首部行
  • 用户端系统保留的cookie文件,由浏览器管理
  • 位于Web站点的后端数据库

用户使用浏览器首次访问一个Web页面时,该Web站点将产生一个唯一识别码,并一次作为索引在后端数据库中产生一个表项,接着Web服务器用一个包含Set-cookie:首部的HTTP响应报文对用户浏览器进行响应,其中首部包含相应的识别码。紧接着,浏览器识别到Set-cookie:首部,将其添加到其管理的特定cookie文件中。

因此,cookie可以在无状态的HTTP之上建立一个用户会话层。

Web缓存

Web缓存也叫代理服务器,它能够代表初试Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在其中保存最近请求过的对象的副本。可以配置用户的浏览器使得用户的所有HTTP请求首先指向Web服务器。如此会发生以下情况:

浏览器创建TCP连接到Web缓存器,并由缓存器检查本地是否存储了所申请的对象的副本,若有则用响应报文返回该对象。否则,Web缓存会与初始服务器进行TCP连接,并申请所需的对象;之后再由Web缓存转交给用户,并存储一个副本。

Web缓存通常由ISP购买并安装,可以减少Web流量并降低时延,进而改善了性能。

条件GET方法

Web缓存中的内容可能是陈旧的(在初始服务器上被修改但未在缓存上更新)。HTTP协议中的机制——条件GET方法,允许缓存器证实它的对象是最新的。条件GET请求报文的特征如下:

  • 请求报文使用GET方法
  • 请求报文包含一个If-Modified-Since:首部行

Web缓存在转交浏览器时,会保存一个副本,存储了最后修改日期字段Last-Modified:。在下次访问时缓存器会向初始服务器发送一个条件GET执行最新检查;通过对比最后修改时间,初始服务器响应报文的状态行中为304 Not Modified来表明可以使用此副本。

电子邮件

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务