感兴趣的朋友可以去我的语雀平台进行查看更多的知识。
https://www.yuque.com/books/share/ffbf2b86-52af-4a4f-b144-507a890fb8dc?# 《木子Teng的计算机知识库》
6. 应用层
应用层概述
应用层对应用程序的通信提供服务。
应用层协议定义 :
- 应用进程交换的报文类型,请求还是响应?
- 各种报文类型的语法,如报文中的各个字段及其详细描述。
- 字段的语义,即包含在字段中的信息的含义。
- 进程何时、如何发送报文,以及对报文进行响应的规则。
应用层的功能
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
**应用层的重要协议 **
- FTP
- SMTP、POP3
- HTTP
- DNS
6.1 网络应用模式
6.1.1 客户/服务器(CS)模型
服务器: 提供计算服务的设备。
- 永久提供服务
- 永久性访问地址/域名
客户机: 请求计算服务的主机
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP地址
- 不与其他客户机直接通信
应用:Web,文件传输FTP,远程登录,电子邮件
6.1.2 P2P模型
- 在P2P模型中,各计算机没有固定的客户和服务器划分。相反,任意一对计算机称为
对等方(Peer)
, 直接相互通信。 - P2P 模型从本质上来看仍然使用客户/服务器方式,每个结点既作为客户访问其他结点的资源,也作为服务器提供资源给其他结点访问。
- 当前比较流行的P2P应用有PPlive、Bittorrent 和电驴等。
特点
- 不存在永远在线的服务器
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 每个主机既可以提供服务 ,也可以请求服务
- 可扩展性好
- 网络健壮性强
与C/S模型相比,P2P 模型的优点主要体现如下:
- 减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率(例如,播放流媒体时对服务器的压力过大,而通过P2P模型,可以利用大量的客户机来提供服务)。
- 多个客户机之间可以直接共享文档。
- 可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求。
- 网络健壮性强,单个结点的失效不会影响其他部分的结点。
P2P模型也有缺点。在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度。
例如,经常进行P2P下载还会对硬盘造成较大的损伤。据某互联网调研机构统计,当前P2P程序已占互联网50%~90%的流量,使网络变得
非常拥塞,因此各大ISP (互联网服务2提供商,如电信、网通等)通常都对P2P应用持反对态度。
6.2 🔥域名系统(DNS)
6.2.1 DNS系统
- **域名系统(Domain Name System, DNS)**是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名(如www.baidu.com)转换为便于机器处理的IP地址。
- 相对于IP地址,人们更喜欢使用具有特定含义的字符串来标识因特网上的计算机。
- DNS系统采用客户/服务器模型,其协议运行在UDP之上,使用53号端口。
- 从概念上可将DNS分为3部分:层次域名空间、域名服务器和解析器
DNS服务的作用: 将域名解析成 IP 地址 。
6.2.2 域名
因特网采用层次树状结构的命名方法
。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即域名(Domain Name)
。域(Domain)
是名字空间中一个可被管理的划分。- 域还可以划分为子域,而子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。
在域名系统中,每个域分别由不同的组织进行管理。每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管
理。
- 例如,管理CN域的中国将EDU.CN子域授权给中国教育和科研计算机网(CERNET)来管理。
- 比如我的域名ltaxy.com是一个二级域名,我可以任意分配三级域名,比如1001.ltaxy.com和1002.ltaxy.com,这两个网址是可以访问的,小项目。
域名空间的树状结构
每个域名都由标号
序列组.成,而各标号之间用点(“.”)
隔开。
关于域名中的标号有以下几点需要注意:
- 标号中的英文
不区分大小写
。. - 标号中除连字符(-) 外不能使用其他的标点符号。
- 每个标号不超过63个字符,多标号组成的完整域名最长不超过255个字符。
- 级别最低的域名写在最左边,级别最高的顶级域名写在最右边。
顶级域名(Top Level Domain, TLD)
分为如下三大类:
- 国家顶级域名(nTLD)。国家和某些地区的域名,如“.cn”表示中国,“.us”表示美国,.uk”表示英国。
- 通用顶级域名(gTLD)。 常见的有“.com” (公司)、“.net" (网络服务机构)、“.org”(非营利性组织)和“.gov" (国家或政府部门)等。
- 基础结构域名。
这种顶级域名只有一个,即arpa,用于反向域名解析
,因此又称反向域名。反向域名解析与通常的正向域名解析相反,提供IP地址到域名的对应
,反向域名格式如:X.X.X.in-addr.arpa。很多网络服务提供商要求访问的IP地址具有反向域名解析的结果,否则不提供服务。
6.2.3 域名服务器
因特网的域名系统被设计成一个联机分布式的数据库系统,并采用客户/服务器模型
。- 域名到IP地址的解析是由运行在域名服务器上的程序完成的,
一个服务器所负责管辖的(或有权限的)范围称为区(不以“域”为单位)
,各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有结点必须是能够连通的,每个区设置相应的权限域名服务器
,用来保存该区中的所有主机的域名到IP地址的映射
。 - 每个域名服务器不但能够进行一些域名到IP地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP地址的转换时,能够知道到什么地方去找其他域名服务器。
- DNS使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的DNS上。
- 采用分布式设计的DNS,是一个在因特网上实现分布式数据库的精彩范例。主要有4种类型的域名服务器。
6.2.3.1 根域名服务器
根域名服务器
是最高层次
的域名服务器,所有的根域名服务器
都知道所有
的顶级域名服务器的IP地址
。- 根域名服务器也是最重要的域名服务器,不管是哪个
本地域名服务器
,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器
。 - 因特网上有
13个根域名服务器
,尽管我们将这13个根域名服务器中的每个都视为单个服务器,但每个“服务器”实际上是冗余服务器的集群
,以提供安全性和可靠性。 - 需要注意的是,
根域名服务器
用来管辖顶级域(如.com)
, 通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器
下一步应当找哪个顶级域名服务器
进行查询。
6.2.3.2 顶级域名服务器
- 这些域名服务器负责
管理在该顶级域名服务器注册的所有二级域名
。 - 收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)。
6.2.3.3 权限域名服务器
每台主机
都必须在权限域名服务器
处登记。为了更加可靠地工作,一台主机最好至少有两个权限域名服务器。- 实际上,许多
权限域名服务器
都同时
充当本地域名服务器
和权限域名服务器
。 权限域名服务器
总能将其管辖的主机名
转换为该主机的IP地址
。
6.2.3.4 本地域名服务器
- 本地域名服务器对域名系统非常重要。
- 每个因特网服务提供者(ISP), 或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。
当一台主机发出DNS查询请求时,这个查询请求报文就发送给该主机的本地域名服务器
。- 事实上,我们在Windows系统中配置
“本地连接”
时,就需要填写DNS地址,这个地址就是本地DNS (域名服务器)的地址
。
6.2.4 域名解析过程
域名解析是指把域名映射成为IP地址或把IP地址映射成域名的过程。前者称为正向解析,后者称为反向解析。
- 当客户端需要域名解析时,通过本机的DNS客户端构造一个
DNS请求报文
,以UDP数据报
方式发往本地域名服务器
。 - 域名解析有两种方式:
递归查询
和递归与迭代
相结合的查询。
6.2.4.1 递归查询方式
递归查询的过程如下图所示, 由于该方法给根域名服务造成的负载过大,所以在实际中几乎不使用。
主机
向本地域名服务器
的查询采用的是递归
查询
- 也就是说,如果
本地主机
所询问的本地域名服务器
不知道被查询域名的IP 地址,那么本地域名服务器
就以DNS客户
的身份,向根域名服务器
继续发出查询请求报文
(即替该主机继续查询),而不是让该主机自己进行下一步的查询。 - 在这种情况下,
本地域名服务器
只需向根域名服务器查询
一次,后面的几次查询都是递归地在其他几个域名服务器之间进行的(上图3-6) - 在步骤⑦中,
本地域名服务器
从根域名服务器
得到了所需的IP地址
,最后在步骤⑧中,本地域名服务器
把查询结果告诉主机
m.xyz.com
6.2.4.2 递归与迭代相结合的查询方式
递归与迭代相结合的查询方式如下图所示,该方式分为两个部分。
本地域名服务器
向根域名服务器
的查询采用迭代
查询
- 当
根域名服务器
收到本地域名服务器
发出的迭代查询请求报文
时,要么给出所要查询的IP地址,要么告诉本地域名服务器
:“你下一步应当向哪个顶级域名服务器
进行查询”。 - 然后让
本地域名服务器
向这个顶级域名服务器
进行后续的查询。 - 同样,
顶级域名服务器
收到查询报文后,要么给出所要查询的IP地址,要么告诉本地域名服务器
下一步应向哪个权限域名服务器
查询。 - 最后,知道所要
解析的域名的IP地址
后,把这个结果返回
给发起查询的主机
。
假定某客户机想获知域名为y.abc.com主机的IP地址,域名解析的过程(共使用8个UDP报文)如下:
客户机
向其本地域名服务器
发出DNS请求报文
。本地域名服务器
收到请求后,查询本地缓存
,若没有该记录,则以DNS客户
的身份向根域名服务器
发出解析请求。根域名服务器
收到请求后,判断该域名属于.com域,将对应的顶级域名服务器
dns.com的IP地址返回给本地域名服务器
。本地域名服务器
向顶级域名服务器dns.com
发出解析请求报文
顶级域名服务器dns.com
收到请求后,判断
该域名属于abc.com域
,因此将对应的授权域名服务器dns.abc.com
的IP地址返回给本地域名服务器
。本地域名服务器
向授权域名服务器dns.abc.com
发起解析请求报文
。授权域名服务器dns.abc.com
收到请求后,将查询结果
返回给本地域名服务器
。本地域名服务器
将查询结果保存到本地缓存
,同时返回给客户机
。
- 为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了
高速缓存
。- 当一个DNS服务器接收到DNS查询结果时,它能将该DNS信息缓存在高速缓存中。这样,当另一个相同的域名查询到达该DNS服务器时,该服务器就能够直接提供所要求的IP地址,而不需要再去向其他DNS服务器询问。
- 因为
主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息
。
6.3 文件传输协议(FTP)
6.3.1 文件传输协议的功能
概述
- 文件传输协议( File Transfer Protocol, FTP)是因特网上使用得最广泛的
文件传输协议。
- FTP提供
交互式的访问
,允许客户指明文件的类型与格式,并允许文件具有存取权限
。 - 它屏蔽了各计算机系统的细节,因而适合于在异构网络中的
任意计算机之间传送文件
。
FTP提供以下功能:
- 提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。
以用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力
。- 以
匿名FTP
的方式提供公用文件共享
的能力。
6.3.2 FTP工作原理
- FTP采用客户/服务器(C/S)的工作方式,它使用TCP可靠的传输服务。
- 一个FTP服务器进程可同时为多个客户进程提供服务。
- 依照FTP协议提供服务,进行文件传送的计算机就是
FTP服务器
。 - 连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是
FTP客户端
。 FTP的服务器进程
由两大部分组成:一个主进程,负责接收新的请求;
若干从属进程,负责处理单个请求。
其工作步骤如下:
- 打开熟知端口21 (控制端口),使客户进程能够连接上。
- 等待客户进程发连接请求。
- 启动从属进程来处理客户进程发来的请求。主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止。
- 回到等待状态,继续接收其他客户进程的请求。
FTP服务器必须在整个会话期间保留用户的状态信息。特别是服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在
远程目录树上的当前位置。
控制连接和数据连接
-
FTP在工作时使用两个
并行的TCP连接
:一个是
控制连接(端口号21)
一个是
数据连接(端口号20)
-
使用两个不同的端口号可使协议更加简单和更容易实现。
FTP传输模式
- 文本模式:ASCII模式,以文本序列传输数据
- 二进制模式:Binary模式,以二进制序列传输数据
控制连接
- 服务器监听21号端口,等待客户连接,建立在这个端口上的连接称为控制连接,
控制连接用来传输控制信息(如连接请求、传送请求等)
,并且控制信息都以7位ASCII格式传送
。 - FTP客户发出的
传送请求
,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。
- 在传输文件时还可以使用控制连接(如客户在传输中途发一个中止传输的命令),因此控制连接在整个会话期间一直保持打开状态。
数据连接
服务器端的控制进程在接收到FTP客户发来的文件传输请求后,就创建“数据传送进程”和“数据连接”。
数据连接
用来连接客户端和服务器端的数据传送进程
,数据传送进程
实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。
因为FTP使用了一个分离的控制连接,所以也称FTP的控制信息是带外(Out-of-band) 传送的。
使用FTP时,若要修改服务器上的文件,则需要先将此文件传送到本地主机,然后再将修改后的文件副本传送到原服务器
。
网络文件系统(NFS)允许进程打开一个远程文件,并在该文件的某个特定位置开始读写数据。这样,NFS可使用户复制一个大文件中的
一个很小的片段,而不需要复制整个大文件。
6.4 电子邮件
6.4.1 电子邮件的信息格式
- 一个电子邮件分为
信封和内容
两大部分,邮件内容
又分为首部和主体
两部分。 - RFC 822规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。
- 用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息。
邮件内容的首部包含一些首部行
,每个首部行由一个关键字后跟冒号再后跟值组成。
有些关键字是必需的,有些则是可选的。最重要的关键字是To:和Subject。- To是必需的关键字,后面填入一个或多个收件人的电子邮件地址。电子邮件地址的规定格式为:收件人邮箱名@邮箱所在主机的域名
如abc@cskaoyan.com,其中收信人邮箱名即用户名,abc在cskaoyan.com这个邮件服务器上必须是唯一的 。这也就保证了abc@cskaoyan.com 这个邮件地址在整个因特网上是唯一的。 - Subject是可选关键字,是邮件的主题,反映了邮件的主要内容。
- 还有一个必填的关键字是From,但它通常由邮件系统自动填入。
- 首部与主体之间用一个空行进行分割。典型的邮件内容如下:
6.4.2 🔥电子邮件系统的组成结构
-
电子邮件是一种异步通信方式,通信时不需要双方同时在场。
-
电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网到自己使用的邮件服务器进行读取。
一个电子邮件系统应具有三个最主要的组成构件:
- 用户代理(User Agent)
- 邮件服务器
- 电子邮件使用的协议,如SMTP、POP3 (或IMAP)等。
用户代理(UA):
用户与电子邮件系统的接口。
- 用户代理使用户能够通过一个很友好的接口发送和接收邮件,用户代理至少应当具有撰写、显示和邮件处理的功能。
- 通常情况下,用户代理就是一个运行在PC上的程序,常见的有Outlook、Foxmail 和Thunderbird等。
邮件服务器:
组成电子邮件系统的核心。
- 邮件服务器的功能是发送和接收邮件,同时还要向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)。
- 邮件服务器采用客户/服务器方式工作,但它能够同时充当客户和服务器。
- 例如,当邮件服务器A向邮件服务器B发送邮件时,A就作为SMTP客户,而B是SMTP服务器;反之,当B向A发送邮件时,B就是SMTP客户,而A就是SMTP服务器。
邮件发送协议和读取协议:
邮件发送协议
用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,通常使用的是SMTP
;邮件读取协议
用于用户代理从邮件服务器读取邮件,如POP3
。- SMTP采用的是“推”(Push)的通信方式,即在用户代理向邮件服务器发送邮件及在邮件服务器之间发送邮件时,SMTP客户端主动将邮件“推”送到SMTP服务器端。
- POP3采用的是“拉”(Pull)的通信方式,即用户读取邮件时,用户代理向邮件服务器发出请求,“拉”取用户邮箱中的邮件。
6.4.3 🔥电子邮件协议
6.4.3.1 SMTP
SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。负责发送邮件的SMTP进程就是SMTP客户 ,负责接收邮件的进程就是
SMTP服务器。
SMTP规定了14条命令(几个字母)和21种应答信息(三位数字代码+简单文字说明)。
TCP连接 端口号25 C/S
SMTP通信的三个阶段
连接建立
-
发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定时间对邮件缓存扫描一次。如发现有邮件,就使用SMTP的熟知端口号(25) 与接收方邮件服务器的SMTP服务器建立TCP连接。
-
连接建立后,接收方SMTP服务器发出220 Service ready (服务就绪)。然后SMTP客户向SMTP服务器发送HELLO命令,附上发送方的主机名。
-
SMTP不使用中间邮件服务器。
-
TCP连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远。接收方的邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。
邮件传送
- 连接建立后,就可开始传送邮件。邮件的传送从MAIL命令开始,MAIL 命令后面有发件人的地址。如MAIL FROM: hoopdog@hust.edu.cn
- 若SMTP服务器已准备好接收邮件,则回答250 OK。
- 接着SMTP客户端发送一个或多个RCPT (收件人recipient的缩写)命令,格式为RCPT TO: <收件人地址>。
每发送一个 RCPT命令,都应有相应的信息从SMTP服务器返回,如250 OK或550 No such user here (无此用户)。
RCPT命令的作用是,先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件,以便不至于发送了很长的邮件后才知道地址错误,进而避免浪费通信资源。 - 获得0K的回答后,客户端就使用DATA命令,表示要开始传输邮件的内容。
正常情况下,SMTP服务器回复信息是354 Start mail input; end with . 。表示回车换行。此时SMTP客户端就可开始传送邮件内容,并用. (两个回车,中间一个点)表示邮件内容的结束。
连接释放
- 邮件发送完毕后,SMTP客户应发送QUIT命令。
- SMTP服务器返回的信息是221 (服务关闭),表示SMTP同意释放TCP连接。邮件传送的全部过程就此结束。
MIME—多用途网络邮件扩充
- 由于SMTP只能传送一定长度的ASCII码,许多其他非英语国家的文字(如中文、俄文,甚至带重音符号的法文或德文)就无法传送,且无法传送可执行文件及其他二进制对象,因此提出了多用途网络邮件扩充( Multipurpose Internet MailExtensions,MIME)。
- MIME并未改动SMTP或取代它。MIME的意图是继续使用目前的格式,但增加了邮件主体的结构,并定义了传送非ASCII码的编码规则。也就是说,MIME邮件可在现有的电子邮件程序和协议下传送。
MIME与SMTP的关系如图
MIME主要包括以下三部分内容:
- 5个新的邮件首部字段,包括MIME版本、内容描述、内容标识、内容传送编码和内容类型。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
6.4.3.2 POP3
- 邮局协议( Post Office Protocol, POP) 是一个非常简单但功能有限的邮件读取协议,现在使用的是它的第3个版本POP3。
- POP3 采用的是“拉”(Pull)的通信方式,当用户读取邮件时,用户代理向邮件服务器发出请求,“拉”取用户邮箱中的邮件。
- POP也使用客户/服务器的工作方式,在传输层使用TCP,端口号为110。接收方的用户代理上必须运行POP客户程序,而接收方的邮件服务器上则运行POP服务器程序。
- POP有两种工作方式:
“下载并保留”和“下载并删除”。
在“下载并保留”
方式下,用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件;
使用“下载并删除”
方式时,邮件一旦被读取,就被从邮件服务器上删除,用户不能再次从服务器上读取。
IMAP—因特网报文存取协议
IMAP协议比POP协议复杂。当用户PC上的IMAP客户程序打开IMAP服务器的邮箱时,用户可以看到邮箱的首部,若用户需要打开某个邮
件,该邮件才上传到用户的计算机上。
IMAP可以让用户在不同的地方使用不同的计算机随时上网阅读处理邮件,还允许只读取邮件中的某一个部分(先看正文,有WiFi的时候
再下载附件)。
6.4.3.3 万维网的电子邮件
- 随着万维网的流行,目前出现了很多基于万维网的电子邮件,如Hotmail、Gmail 等。
- 这种电子邮件的特点是,用户浏览器与Hotmail或Gmail的邮件服务器之间的邮件发送或接收使用的是HTTP,而
仅在不同邮件服务器之间传送邮件时才使用SMTP
6.5 万维网(WWW)和HTTP协议
6.5.1 www万维网
什么是万维网?
万维网(World Wide Web, WWW)是一个资料空间,在这个空间中:一样有用的事物称为一样“资源”,并由一个全域“统一资源定位符”(URL)标识。这些资源通过超文本传输协议(HTTP)传送给使用者,通过单击链接来获取资源。
- 万维网使用链接的方法能让用户非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
- 超文本标记语言(HyperText Markup Language,HTML)使得万维网页面的设计者可以很方便地用一个超链接从本页面的某处链接到因特网上的任何一个万维网页面,并能够在自己的计算机屏幕上显示这些页面。
万维网的组成
万维网的内核部分是由三个标准构成的:
统一资源定位符(URL)
。 负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内具有唯一的标识符URL。超文本传输协议(HTTP)
。 一个应用层协议,它使用TCP连接进行可靠的传输,HTTP是万维网客户程序和服务器程序之间交互所必须严格遵守的协议。超文本标记语言(HTML)
。 一种文档结构的标记语言,它使用一些约定的标记对页面上的各种信息(包括文字、声音、图像、视频等)、格式进行描述
URL—统一资源定位符
万维网工作流程
- 万维网以
客户/服务器
方式工作。 浏览器
是在用户计算机上的万维网客户程序
,而万维网文档所驻留的计算机
则运行服务器程序
,这台计算机称万维网服务器
。- 客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的文档。工作流程如下:
- Web 用户使用浏览器(指定URL)与Web服务器建立连接,并发送浏览请求。
- Web服务器把URL转换为文件路径,并返回信息给Web浏览器。
- 通信完成,关闭连接。
6.5.2 🔥HTTP协议
HTTP定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。
从层次的角度看,HTTP是面向事务的(Transaction-oriented) 应用层协议,它规定了在浏览器和服务器之间的请求和响应的格式与规则,
是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
6.5.2.1 HTTP的操作过程
在浏览器和服务器之间的请求与响应的交互,必须遵循规定的格式和规则,这些格式和规则就是HTTP。
过程
-
从协议执行过程来说,浏览器要访问WWW服务器时,首先要完成对www服务器的
域名解析
。 -
一旦获得了服务器的IP地址,
浏览器
就通过TCP向服务器发送连接建立请求
。万维网的大致工作过程如图所示
- 每个万维网站点都有一个服务器进程,它不断地监听TCP的端口
80
(默认),当监听到连接请求后便与浏览器建立连接
。 - TCP连接建立后, 浏览器就向服务器发送请求
获取某个Web页面的HTTP请求
。 - 服务器收到HTTP请求后,将
构建所请求Web页的必需信息
,并通过HTTP响应返回给浏览器。 - 浏览器再将信息进行
解释
, .然后将Web页显示
给用户。 - 最后,TCP连接
释放
。
用户单击鼠标后所发生的事件按顺序如下(以访问清华大学的网站为例):
- 浏览器分析链接指向页面的URL (http://www.tsinghua edu.cn /chn/index.htm)。
- 浏览器向DNS请求解析www.tsinghua.edu.cn的IP地址。
- 域名系统DNS解析出清华大学服务器的IP地址。
- 浏览器与该服务器建立TCP连接(默认端口号为80)。
- 浏览器发出HTTP请求: GET /chn/index.htm。
- 服务器通过HTTP响应把文件index.htm 发送给浏览器。
- TCP连接释放。
- 浏览器解释文件index.htm,并将Web页显示给用户。
6.5.2.2 HTTP特点
HTTP是无状态的。
也就是说是没有记忆的,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同。因
为服务器并不记得曾经访问过的这个客户,也不记得为该客户曾经服务过多少次。HTTP的无状态特性简化了服务器的设计,使服务器更
容易支持大量并发的HTTP请求。
在实际应用中,通常使用
Cookie 加数据库的方式来跟踪用户的活动
(如记录用户最近浏览的商品等)。Cookie 是一个存储在用户主机中的文本文件,里面含有一串“识别码”,如“123456”,用于Web服务识别用户。
Web服务器根据Cookie就能从数据库中查询到该用户的活动记录,进而执行一些个性化的工作,如根据用户之前浏览过的商品向其
推荐新产品等。
HTTP采用TCP作为运输层协议,保证了数据的可靠传输
。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP本身是无连接
的
。也就是说,虽然HTTP使用了TCP连接,但通信的双方在交换HTTP报文之前不需要先建立HTTP连接
。
HTTP既可以使用非持久连接,也可以使用持久连接(HTTP/1.1支持)
。
对于非持久连接
,每个网页元素对象(如JPEG图形、Flash 等)的传输都需要单独建立一个TCP连接
,如图下图所示(第三次握手的报文段中捎带
了客户对万维网文档的请求)。也就是说,请求一个万维网文档所需的时间是该文档的传输时间
(与文档大小成正比)加上两倍往返时间RTT
(一个
RTT用于TCP连接,另一个RTT用于请求和接收文档)。
对于持久连接
,是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和服务器可以继续在这条连接上传送后续的HTTP请求与
响应报文。
持久连接
又分为非流水线
和流水线
两种方式。
对于非流水线
方式,客户在收到前一个响应后才能发出下一个请求,如上图所示;
HTTP/1.1 的默认方式是使用流水线
的持久连接。这种情况下,客户每遇到一个对象引用就立即发出一个请求,因而客户可以逐个地连
续发出对各个引用对象的请求。如果所有的请求和响应都是连续发送的,那么所有引用的对象共计经历1个RTT延迟,而不是像非流水线
方式那样,每个引用都必须有1个RTT延迟。
6.5.2.3 HTTP报文结构
HTTP是面向文本的(Text-Oriented), 因此报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。有两类HTTP报
文:
- 请求报文: 从客户向服务器发送的请求报文
- 响应报文: 从服务器到客户的回答
- HTTP请求报文和响应报文都由三个部分组成。这两种报文格式的区别是开始行不同。
开始行:用于区分是请求报文还是响应报文。
在请求报文
中的开始行称为请求行
;响应报文中
的开始行称为状态行
;开始行的三个字段之间都以空格分隔,最后的“CR"和“LF”
分别代表“回车”和“换行”
。
请求报文的“请求行”有三个内容:方法、请求资源的URL及HTTP的版本
其中,“方法”是对所请求对象进行的操作
,这些方法实际上也就是一些命令。HTTP请求报文中常用的几个方法:
首部行
:用来说明浏览器、服务器或报文主体的一些信息。首部可有几行,但可不使用。在每个首部行都有首部字段名和它的值,每行在结束的地方都要有“回车”和"换行”。整个首部结束时,还有一空行将首部行和后面的实体主体分开。实体主体
:在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。
6.5.2.4 WireShark捕获HTTP报文实例
请求报文
响应报文