应用层

发布时间 2023-03-23 13:04:42作者: 青子Aozaki

网络应用模型

客户端/服务器模型

客户端服务器模型(C/S模型)中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求。其工作流程如下:

  1. 服务器处于接收请求的状态
  2. 客户机发送服务请求,并等待接收结果
  3. 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机

客户程序必须知道服务器的地址,客户机上一般不需要特殊的硬件和复杂的硬件系统,而服务器上运行的软件则是通过专门用来提供某种服务的程序,可同时处理多个远程或本地客户的要求。
服务器程序不需要知道客户程序的地址,启动后就自动调用并一直不断地运行,被动地等待客户的请求。
C/S最主要的特征:客户是服务请求方,服务器是服务提供方。
常见使用C/S模型的应用包括Web、文件传输协议FTP、远程登录和电子邮件。
C/S的其他特点:

  • 网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的,使它们不能随意存储/删除数据,或进行其他受限的网络活动。整个网络的管理工作由少数服务器相当,因此网络的管理非常集中和方便。
  • 客户机相互之间不直接通信。
  • 可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数量有限。

P2P模型

在C/S模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。
P2P模型的思想是整个网络中的传输内容不再被保存在中心服务器上,每个结点都同时具有下载、上传的功能,其权利和义务都是大体相等的。
在P2P模型中,各计算机没有固定的客户和服务器划分。相反,任意一对计算机——称为对等方(Peer),直接相互通信。实际上,P2P模型从本质上来看仍然使用客户/服务器模式,每个结点既作为客户访问其他结点的资源,也作为服务器提供资源给其他结点访问。
当前比较流行的P2P应用包括PPlive、Bittorrent、电驴等。
与C/S模型相比,P2P模型的优点主要体现如下:

  • 减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率(例如,播放流媒体时对服务器的压力过大,而通过P2P模型,可以利用大量的客户机来提供服务)
  • 多个客户机之间可以直接共享文档
  • 可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求
  • 网络健壮性强,单个结点的失效不会影响其他部分的结点

P2P模型也有缺点。在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。

经常使用P2P会对硬盘造成较大损伤(又上传又下载)
据统计,当前P2P程序已经占用了互联网50%~90%的流量,使网络变得非常拥塞,因此各大ISP(互联网提供商,如电信、网通等)通常对P2P持反对态度。

域名系统DNS

域名系统是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(如www.baidu.com)转换为便于机器处理的IP地址。
DNS系统采用C/S模型,运行在UDP协议之上,使用53号端口。
DNS从概念上可分为三部分:

  • 层次域名空间
  • 域名服务器
  • 解析器

层次域名空间

因特网采用层次树状结构的命名方法。
任何一个连接到因特网上的主机或路由器,都有一个唯一的层次结构名称,即域名(Domain Name)。域(Domain)还可以划分为子域,之后还可继续划分,于是形成了二级域、三级域等。每个域名都由标号序列组成,各标号之间用点(.)隔开。例如,com是顶级域名,baidu是二级域名,www是三级域名。
关于域名中的标号:

  • 标号中的英文不区分大小写
  • 标号中除连接字符(-)外不能使用其他标点符号
  • 每个标号不能超过63个字符,多标号组成的完整域名最长不超过255个字符
  • 级别最低的域名写在最左边,级别最高的顶级域名写在最右边

顶级域名(Top Level Domain,TLD)分为如下三大类:

  • 国家(地区)顶级域名(nTLD)。国家和某些地区的简称,如“.cn”中国、“.us”美国
  • 通用顶级域名(gTLD)。如“.com”公司,“.net”网络服务机构,“.org”非营利性组织,“.gov”国家或政府部门
  • 基础结构域名。只有一个“.arpa”,用于反向域名解析,因此又称为反向域名。

在域名系统中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再进一步分成一定数目的子域,并将这些子域委托给其他组织去管理。例如,管理“cn”域的中国将“edu.cn”子域授权给中国教育和科研计算机网(CERNET)来管理。

域名服务器

因特网的域名系统被设计为一个联机分布式的数据库系统,并采用C/S结构。
域名到IP地址的解析是由运行在域名服务器上的应用程序完成的。一个服务器所管辖的(或有权限的)范围称为(不以为单位)。各单位根据情况来划分自己管辖范围的区,但在一个区内,所有结点都必须是连通的。每个区设置相应的权限域名服务器,用来保存该区中所有主机的域名到IP地址的映射。
每个域名服务器不但能完成域名-IP地址的映射,还必须具有连接其他域名服务器的信息,当自己不能独立完成映射时,知道到什么地方去找其他的域名服务器。
DNS使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反该映射分布在所有的DNS上。采用分布式设计的DNS,是一个在因特网上实现分布式数据库的精彩反例。
主要有4种类型的域名服务器:

  • 根域名服务器

是最高层次的域名服务器,所有根域名服务器都知道所有的顶级域名服务器的IP地址。
根域名服务器也是最重要的域名服务器,不管哪个本地域名服务器,如果自己无法独立完成解析,都要首先求助于根域名服务器。
互联网上有13个根域名服务器,尽管我们将这13个服务器都视为单个服务器,但每个服务器实际上是冗余服务器的集群,以提供安全性和可靠性。
根域名用来保存顶级域(如“.com”),通常它并不直接把待查询的域名直接转换为IP地址,而是告诉本地域名服务器下一步要到哪个顶级域名服务器求助。

  • 顶级域名服务器

负责管理在该服务器注册的所有二级域名。收到DNS查询请求时,就给出相应的回答(可能是最后的回答,也可能是下一步应当查找的域名服务器的IP地址)。

  • 授权域名服务器(权限域名服务器)

每台主机都必须在授权域名服务器处登记。为了更加可靠的工作,一台主机最好至少有两个授权域名服务器。实际上许多域名服务器都同时充当本地域名服务器和授权域名服务器,授权域名服务器总能将其管辖的主机名转换为该主机的IP地址

  • 本地域名服务器

本地域名服务器对域名系统非常重要,每个因特网服务提供者(ISP),或一所大学,甚至一所大学的各个系都可以拥有一个本地域名服务器。当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。我们在Windows系统中配置本地连接时就需要填写DNS地址,这个地址就是本地域名服务器的地址。

域名解析过程

域名解析是把域名映射为IP地址(正向解析)或把IP地址映射为域名(反向解析)的过程。
当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报方式发往本地域名服务器。
域名解析有两种方式:

  • 递归查询

本地域名服务器只需向根域名服务器查询一次,后面几次查询都是在递归地在其他几个域名服务器之间进行的。

在步骤7中,本地域名服务器从根域名服务器得到了所需的IP地址。最后在步骤8中,本地域名服务器把查询结果告诉发起查询的主机。
由于该方法给根域名服务器造成的负载过大,所以实际中不使用。

  • 递归与迭代相结合的查询。

该方式分为两部分:

  1. 本机向本地域名服务器的查询采用的是递归查询

如果本地主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。

  1. 本地域名服务器向根域名服务器的查询采用迭代查询

当根域名服务器收到本地域名服务器发出的迭代请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪个顶级域名服务器进行查询。
同样顶级域名服务器收到查询报文后,要么给出要查询的IP地址,要么告诉本地域名服务器下一步应该向哪个权限域名服务器查询,最后知道所要解析的域名的IP地址后,把这个结果返回给发起查询的主机。

以上图为例,域名解析的过程:

  1. 客户机向本地域名服务器发出DNS请求报文(递归查询)。
  2. 本地域名服务器收到请求后,查询本地缓存,如果没有该记录,则以DNS客户的身份向根域名服务器发出解析请求报文(迭代查询)。
  3. 根域名服务器收到请求后,判断该域名属于.com域,将对应顶级域名服务器dns.com的IP地址返回给本地域名服务器。
  4. 本地域名服务器向顶级域名服务器dns.com发出请求解析请求报文(迭代查询)。
  5. 顶级域名服务器dns.com收到请求后,判断该域名属于abc.com域,因此将对应授权域名服务器dns.abc.com的IP地址返回给本地域名服务器。
  6. 本地域名服务器向授权域名服务器dns.abc.com发起解析请求报文(迭代查询)。
  7. 授权域名服务器dns.abc.com收到请求后,将查询结果返回给本地域名服务器。
  8. 本地域名服务器将查询结果保存到本地缓存,同时返回给客户机。

为了提高DNS的查询效率,减少因特网上DNS查询报文的数量,在域名服务器中广泛使用了高速缓存。当一个DNS服务器收到DNS查询结果时,将该信息保存在高速缓存中。但因为主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息。

文件传输协议FTP

文件传输协议FTP是因特网上使用地最广泛的文件传输协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存储权限。它屏蔽了各计算机系统的细节,因而适用于在异构网络中的任何计算机之间传送文件。
FTP具有以下功能:

  • 提供不同种类主机系统(硬、软件体系都可以不同)之间的文件传输能力。
  • 以用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力。
  • 以匿名FTP的方式提供公用文件共享的能力。

FTP采用C/S工作方式,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务。
FTP服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干个从属进程,负责处理单个请求。
FTP服务器进程的工作步骤如下:

  1. 打开熟知端口21(控制端口),使客户进程能够连接上。
  2. 等待客户进程发起连接请求。
  3. 启动从属进程来处理客户进程发来的请求。主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后终止。
  4. 回到等待状态,继续接收其他客户进程的请求。

FTP服务器必须在整个会话期间保留用户的状态信息,特别是必须把指定的用户账户与控制连接联系起来,必须追踪用户在远程目录树上的位置。

控制连接与数据连接

FTP在工作时使用两个并行的TCP连接:

  • 控制连接(端口号21)

服务器监听21号端口,等待客户连接,建立在这个端口上的连接称为控制连接。控制连接用来传输控制信息,如连接请求,连接传送等。
控制信息都以7位ASCII格式传送。
FTP客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。在传送文件时还可能会使用控制连接( 如客户在传输过程中发一个终止传输的命令),因此控制连接在整个会话期间一直保持打开状态。

  • 数据连接(端口号20)

服务器端的控制进程在接收到客户发来的文件传输请求后,就创建数据传送进程和数据连接。数据连接用来连接客户端和服务端的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭。
数据连接有两种传输方式:

  - 主动模式PORT

客户端连接到服务器的21号端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令给服务器。服务器收到命令和端口号后,通过(服务器)20号端口和客户开放的端口连接发送数据。

  - 被动模式PASV

与PORT模式的不同点是,客户端要读数据时,发送PASV命令到服务器,服务器在本地随机开放一个端口,并告知客户端,客户端再连接到服务器开放的端口(而不是20号端口)进行数据传输。
使用PORT模式还是PASV模式,选择权在客户端。
因为FTP使用了一个分离的控制连接,因此也称FTP的控制信息是为带外(Out-of-band)传送的。使用FTP时,若要修改服务器上的文件,需要先将此文件传送到本地主机,然后再将修改后的文件副本传送到原服务器,来回传送耗费很多时间。网络文件系统FTS采用另一种思路:它允许进程打开一个远程文件,并能在该文件中的某个特定位置开始读写数据,这样可使用户仅复制一个大文件中的一个很小片段,而不需要复制整个大文件。

电子邮件

电子邮件系统的组成结构

电子邮件是一种异步通信方式。
一个电子邮件系统最主要的三个组成构件:

  • 用户代理(User Agent,UA)

用户与电子邮件系统的接口。用户代理向用户提供一个很友好的接口来发送和接收邮件,用户代理至少应当具有撰写显示和邮件处理的功能。通常情况下,用户代理就是一个运行在PC上的程序,如Outlook、Foxmail等。

  • 邮件服务器

它的功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等),邮件服务器采用C/S方式工作,但它必须能够同时充当客户和服务器。

  • 电子邮件使用的协议。

_邮件发送协议_用于用户代理向邮件服务器发送邮件,邮件服务器之间发送邮件,如SMTP。
_邮件读取协议_用于用户代理从_邮件服务器_读取邮件,如POP3。
SMTP用推(Push)的通信方式,即用户代理向邮件服务器发送邮件及在邮件服务器之间发送邮件时,SMTP客户端将邮件“推”到SMTP服务器。
POP3用拉(Pull)的通信方式,即用户代理向邮件服务器发送请求,“拉”取用户邮箱中的邮件。

电子邮件的简单收发过程:

  1. 发信人调用用户代理来撰写和编辑要发送的邮件。用户代理用SMTP把邮件发送给邮件服务器。
  2. 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送。
  3. 运行在发送端邮件服务器的SMTP客户进程,发现有邮件缓存中有待发送的邮件,就向运行在接收端邮件服务器的服务器进程发起建立TCP连接。
  4. TCP连接建立后,SMTP客户进程就开始向远程SMTP服务器进程发送邮件。当所有待发送的邮件发完后,SMTP就关闭所建立的TCP连接。
  5. 运行在接收端邮件服务器的SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱,等待收信人在方便时进行读取。
  6. 收信人打算收信时,调用用户代理,使用POP3协议(或IMAP协议),将自己的邮件从接收端邮件服务器的用户邮箱中取回。

电子邮件格式

一个电子邮件分为信封和内容两大部分,邮件内容又分为首部和主体两部分。
RFC 822规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。用户写好首部后,邮件系统自动将信封所需要的信息提取出来,并写在信封上,用户不需要亲自填写信封上的信息。
邮件内容的首部包含一些首部行,每个首部行={关键字:值}。有些关键字是必需的,有些是可选的,最重要的关键字是ToSubject
To是必需的关键字,后面填入一个或多个收信人的电子邮箱地址。邮箱名在邮件服务器上必须是唯一的,也就保证了这个邮件地址在整个因特网上是唯一的,如abc@email.com,需要保证abc在email.com这个邮件服务器上是唯一的。
Subject是可选关键字,是邮件的主题,反映了邮件的主要内容。

还有一个必需关键字是From,它通常由邮件系统自动填入。

多用途国际邮件扩充MIME

由于SMTP只能传送一定长度的ASCII码邮件,许多其他非英语国家的文字就无法传送,且无法传送可执行文件及其他二进制对象。因此提出了多用途网络邮件扩充MIME
MIME并未改动或取代STMP,而是继续使用目前的格式,但增加了邮件主体的结构,并定义了传送非ASCII码的编码规则,MIME邮件仍然是在SMTP协议下传送。
MIME主要包括三部分内容:

  • 5个新的邮件首部字段包括MIME版本、内容描述、内容标识、传送编码和内容类型。
  • 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
  • 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。

SMTP

简单邮件传输协议STMP是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的STMP进程交换信息。由于STMP使用C/S方式,因此负责发送邮件的进程就是客户,负责接收邮件的进程就是服务器。STMP使用的是TCP连接,端口号为25。
STMP通信分以下三个阶段:

  1. 连接建立

发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定时间对邮件缓存扫描一次,如发现有邮件就通知熟知端口号25与接收方邮件服务器的服务器建立TCP连接。
连接建立后,接收方STMP服务器发出220 Service ready(服务就绪)。然后SMTP客户向SMTP服务器发送HELO命令,并附上发送方的主机名。
SMTP不使用中间的邮件服务器,TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管他们相隔多远,不管在传送过程中要经过多少个路由器。当接收方邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。

  1. 邮件传送

连接建立后,就可开始传送文件,邮件的传送从MAIL命令开始,MAIL命令后面有发件人的地址,如MAIL FROM:abc@email.com
若SMTP服务器已准备好接收邮件,则回答250 OK。
接着客户端发送一个或多个RCPT(收件人recipient缩写)命令,格式为RCPT:TO<收件人地址>。每发送一个RCPT命令,都应具有相应的信息从SMTP服务器返回,如250 OK或550 No such user here(没有该用户)。
RCPT命令的作用是先弄清接收方系统是否已经做好接收邮件的准备,然后才开始发送邮件。以便不至于发送了很长的邮件后才知道地址错误,浪费通信资源。
获得OK的回答后,客户端就使用DATA命令,表示要开始传输邮件的内容。正常情况下,SMTP服务器回复的是354 Start mail input; end with .。此时SMTP客户端就可以开始传输邮件内容,并用.表示邮件的结束。

  1. 连接释放

邮件发送完毕后,SMTP客户应发送QUIT命令。SMTP服务器返回的信息是221(服务关闭),表示同意释放连接,邮件传送结束。

POP3

邮局协议POP是一个非常简单但功能有限的邮件读取协议,现在使用它的第三个版本POP3。
POP3使用的是C/S工作方式,在传输层使用TCP,端口号为110。
接收方的用户代理必须运行POP客户程序。而接收方的邮件服务器上则运行POP服务器程序。
POP有两种工作方式:

  • 下载并保留

用户从邮件服务器上读取邮件后,邮件仍然会保存在邮件服务器上。用户可再次从服务器上读取该邮件。

  • 下载并删除

邮件一旦被读取就被从邮件服务器上删除。

IMAP

另一个邮件读取协议是因特网报文存取协议IMAP,它比POP复杂的多,IMAP为用户提供了创建文件夹,在不同文件夹之间移动邮件以及在远程文件夹中查询邮件等联机命令,为此IAMP服务器维护了会话用户的状态信息。
IMAP的另一特性是允许用户代理只获取报文的某些部分,例如可以只读取一个报文的首部,或多部分MIME报文的一部分。这非常适用于低带宽的情况,用户可能并不想取回邮件中的所有邮件,尤其是包含很多音频或视频的大邮件。

随着万维网的流行,出现了很多基于万维网的电子邮件,如Hotmail、Gmail等。
这种电子邮件的特点是,用户浏览器与邮件服务器之间的邮件发送或接收使用的是HTTP,仅在不同邮件服务器之间传输邮件时才使用SMTP。

万维网

万维网(WWW)是一个分布式、联机式的信息存储空间。在这个空间中,资源由一个全域统一资源定位符URL标识。这些资源通过超文本传输协议HTTP传送给客户端,客户端通过点击链接来获取资源。
万维网使用链接的方式能够非常方便地从因特网上的一个站点访问另一个站点,从而主动按需获取信息。
超文本标记语言HTML使得万维网页面的设计者可以很方便的用一个超链接从本页面的某处连接到因特网上的任何一个万维网页面,并在计算机屏幕上显示这些页面。
万维网的内核部分是由三个标准构成的:

  • 统一资源定位符URL。负责标识万维网上的各种文档,每个文档在整个万维网的范围内具有唯一的标识符,不区分大小写。URL一般形式为<协议>://<主机>:<端口>/<路径>。
  • 超文本传输协议HTTP。一个应用层协议,它使用TCP连接进行可靠的传输,HTTP是万维网客户端和服务器程序之间交互所必须遵守的协议。
  • 超文本标记语言HTML。一种文档结构的标记语言,它使用一些约定的标记对页面上的各种信息格式进行描述。

万维网以C/S方式工作。浏览器是在用户主机上的万维网客户程序,而万维网文档所驻留的主机则运行服务器程序,这台主机称为万维网服务器。客户程序向服务器程序发出请求。服务器程序向客户程序送回客户所要的万维网文档。
万维网是有无数个网络站点和网页的集合,它们在一起构成了因特网的最主要部分(因特网还包括电子邮件、Usenet和新闻组)。

超文本传输协议HTTP

HTTP定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
从层次的角度来看,HTTP是面向事务(Transaction-oriented)的应用层协议,规定了在浏览器和服务器之间的请求和响应的格式规则,是万维网上能够可靠地交换文件(包括文本、声音、图像等多种多媒体文件)的重要基础。

HTTP的请求响应过程

从协议执行的过程来说,浏览器要访问WWW服务器时,首先要完成对WWW服务器的域名解析。一旦获得了服务器的IP地址,浏览器就通过TCP向服务器发送连接建立请求。
每个万维网站点都有一个服务器进程,不断地监听TCP的端口80(默认),当监听到连接请求时,便与浏览器建立TCP连接。然后浏览器就向服务器发送请求获取某个web网页的请求,服务器收到请求后将构建请求web页必需的信息,并通过HTTP响应返回给浏览器。浏览器将信息进行解释处理,然后显示给用户。最后TCP连接释放。
在浏览器和服务器之间建立请求和响应的交互,必须遵循规定的格式和规则,这些格式和规则就是HTTP协议。
HTTP有两种报文:请求报文和响应报文。

HTTP特点

HTTP使用TCP作为运输层协议,保证了数据的可靠传输。但是HTTP本身是无连接的,也就是说虽然HTTP使用了TCP协议,但通信双方在发送HTTP报文之前不需要先建立HTTP连接。
HTTP是无状态的,也就是说同一个客户的第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时是相同的,因为服务器并不记得这个客户,也不记得为该客户曾经访问过多少次。
HTTP的无连接特性简化了服务器的设计,使得服务器更容易支持大量并发的HTTP请求,在实际应用中,通常使用Cookie加数据库的方式来跟踪用户的活动,如记录用户最近浏览的商品等。

Cookie的工作原理,当用户浏览某个使用Cookie的网站时,该网站服务器就为用户产生一个唯一的标识码。接着在给用户的响应报文中添加一个Set-Cookie的首部行。用户收到响应后,就在它管理的特定Cookie文件中添加这个服务器的主机名和Cookie识别码,并在用户继续浏览这个网站时,将主机名和Cookie识别码放入请求报文的Cookie首部行。服务器根据请求报文的Cookie识别码就能从数据库中查询到该用户的活动记录,进而执行一些个性化的操作。

HTTP可以使用:

  • 非持久连接

对于非持久连接,每个网页元素对象(如jpg图形)的传输都需要单独建立一个TCP连接。
请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比),再加上两倍的往返时间RTT(一个往返时间用于建立TCP连接,另一个往返时间用于请求和接收文档)。
(TCP第三次握手的报文段中捎带了客户对万维网文档的请求报文)

每个网页对象引用都得都将导致两倍往返时间RTT的开销,此外每次建立新的TCP连接也都需要分配缓存和变量,使得服务器负担很重。

  • 持久连接(HTTP/1.1支持)

所谓持久连接是指万维网服务器在发送响应后仍然保持这条链接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的请求和响应报文。
持久连接又分非流水线方式和流水线方式。
对于非流水线方式,客户在收到前一个响应后才能发出下一个请求,服务器发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。
HTTP/1.1的默认方式是使用流水线的持久连接,该情况下,客户每遇到一个对象引用就立即发出一个请求,因而客户可以逐个连续的发出对各个引用对象的请求,如果所有请求和响应都是连续发送的,那么所有的引用对象共计一个往返时间RTT的延迟,而不是像非流水线方式那样,每个引用都需要一个往返时间延迟,这种方式减少了TCP连接中的空闲时间,提高了效率。

HTTP报文结构

HTTP报文是面向文本的(Text-Oriented),因此报文的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的,有两类报文:

  • 请求报文。从客户向服务器发送的请求报文。
  • 响应报文。从服务器到客户端的回答。


HTTP请求报文和响应报文都由三部分组成,它们的区别就只有开始行不同。
开始行:用于区分是请求报文还是响应报文。在请求报文的开始行称为请求行,而在响应报文的开始行称为状态行。请求行包含三个内容:方法、请求资源和版本。其中方法是对所请求对象进行的操作,这些方法实际上就是一些命令。
首部行:用来说明浏览器、服务器和报文主体的一些信息。首部也可以不使用。每个首部行中都有首部字段和值,每一行在结束的地方都要有回车和换行,整个首部行结束时还有一个空行,将首部行和后面的实体主体分开。
实体主体:在请求报文中一般不使用这个字段,而在响应报文中可能也没有这个字段。