第六章 应用层
应用层概述
应用层对应用程序的通信提供服务。
- 应用层的功能:
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
- 应用层的重要协议
- FTP
- SMTP、POP3
- HTTP
- DNS
网络应用模型
客户/服务器模型C/S
- 客户是服务请求方,服务器是服务提供方
- Web、FTP、远程登录、电子邮件
- 网络中各计算机地位不平等
- 网络的管理非常集中和方便
- 客户机之间不直接通信
- 可扩展性不佳
- 服务器的性能决定了整个系统的性能
P2P模型
特点:
-
典型的分布式计算模型
-
每个节点都同时具有上传、下载的功能,权利和义务大体对等
-
任意一对计算机(对等方)直接相互通信
分类:
- 集中目录式
- 纯P2P模式
- 混合式
优点:
- 减轻了服务器的计算压力,大大提高了系统效率和资源利用率
- 多个客户机之间可以直接共享文档
- 可扩展性好
- 网络健壮性强
缺点:
- 占用主机内存
- 使网络拥塞
DNS
域名系统:用来把便于记忆的域名解析为便于机器处理的IP地址。
典型的C/S系统
多层次的、基于域的命名系统,使用分布式数据库实现这种命名机制。
层次域名空间
域名服务器
-
域名服务器负责把域名解析为IP地址,管辖范围称为
区
。每个区所有节点相通。 -
因特网上所有主机的映射分布在所有DNS上。
-
DNS域名服务器把数据复制到几个域名服务器来保存,其中的一个是主域名服务器,其他的是辅助域名服务器。
当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断,提高域名服务器的可靠性。
-
根域名服务器:负责管理
顶级域名
的服务器,知道所有顶级域名服务器的IP地址。IPv4根域名服务器全球一共13个。
-
顶级域名服务器:负责管理
所有二级域名
。收到DNS查询请求时,就给出相应的回答,可能是最后的结果,也可能是下一步查找的域名服务器的IP地址。 -
权限域名服务器:每台主机都必须在权限域名服务器上登记,权限服务器可以将它所管辖的主机名转化为主机的IP地址。一台主机最好有两个权限域名服务器。
-
本地域名服务器:当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器。
域名解析过程
-
递归查询:
本地域名服务器向根域名服务器查询一次,其余查询递归地在其他几个域名服务器之间进行。
根域名服务器负载过大。
-
迭代查询:
例:查询www.qwq.com
- 客户机向本地域名服务器发送DNS请求报文
- 本地域名服务器查询
本地缓存
,如果没有记录,则以DNS客户机的身份向根域名服务器发送解析请求报文。 - 根域名服务器收到请求后,判断出域名属于com顶级域,返回com顶级域名服务器IP地址。
- 本地域名服务器向
com顶级域名服务器
发送请求解析报文 - com顶级域名服务器收到请求后,判断域名属于qwq.com,返回qwq.com的授权域名服务器的IP地址。
- 本地域名服务器向qwq.com的授权域名服务器发送请求解析报文
- 授权域名服务器收到请求后,判断域名属于www.qwq.com主机,返回这台主机的ip地址。
- 本地域名服务器将结果保存到
本地缓存
,同时返回给客户机。
高速缓存
提高查询效率,减少因特网上DNS查询报文数量。DNS服务器在一段时间后会丢弃高速缓存中的信息。
FTP
电子邮件
电子邮件的组成结构
三个主要组成构件:
- 用户代理(UA):用户与电子邮件系统的接口,通常用户代理就是一个运行在PC上的程序
- 邮件服务器:
- 发送和接收邮件,同时还要向发件人报告邮件传送的情况。
- 以客户/服务器模式工作,但必须能同时充当客户和服务器
- 电子邮件使用的协议:如
SMTP
(推)、POP3
(拉)等 - 电子邮件的发送过程:
- 发件人写邮件,用户代理用
SMTP
把邮件发送给发送端邮件服务器。 - 发送端邮件服务器把邮件放入缓存队列,等待发送
发送端SMTP客户进程
发现缓存中有待发送邮件,向接收端SMTP服务器
发起TCP连接的建立。- TCP连接建立后,发送端SMTP客户进程开始向接收端SMTP服务器发送邮件,发送完毕后关闭TCP连接。
- 接收端SMTP进程收到邮件,把邮件放入收信用户邮箱。
- 收件人收信时,调用
用户代理
,使用POP3/IMAP
协议将邮件从接收端邮件服务器中取回。
- 发件人写邮件,用户代理用
电子邮件格式与MIME
电子邮件格式:
- 电子邮件由信封和内容组成,内容又分为首部和主体。
- 首部包含首部行,首部行由关键字 +
:
+ 值组成。最重要的关键字是To
和Subject
。 To
:必须的关键字,后面填入一个或多个收件人的电子邮箱地址。格式规定为:收件人邮箱名@
邮箱所在主机域名,例如3239695085@qq.com,邮件地址在整个因特网上唯一。Subject
:可选关键字,邮件的主题,反应邮件的主要内容。
MIME:
- SMTP只能传送定长的ASCII码邮件,很多语言无法传送
- MIME在SMTP协议的基础上,增加了主题结构,定义了非ASCII码的编码规则。
- 内容:
- 5个新的首部字段:MIME版本,内容描述,内容标识,传送编码和内容类型
- 定义众多邮件内容格式,对多媒体电子邮件的表示方法进行标准化
- 定义传送编码,可对任何内容格式进行转化。
SMTP和POP3
SMTP
- 简单邮件传输协议SMTP:使用C/S方式,发送邮件的SMTP就是客户,接收邮件的就是服务器。
- SMTP只支持传输7比特的ASCII码内容。
- 连接建立:
- 发送方使用端口号25与接收方建立TCP连接。接收方发出
220 Service ready
的响应,发送方发出HELO
命令,并附上发送方主机名 - 不使用中间的邮件服务器,发送方直接和接收方建立连接。
- 发送方使用端口号25与接收方建立TCP连接。接收方发出
邮件传送
- 客户端从
MAIL
命令开始,后跟From首部行。 - 服务器若准备好接收邮件,回答
250 OK
或550 No such user here
。 - 客户端发送一个或多个
RCPT
命令,后跟To首部行。 - 每发送一个RCPT命令,都有相应信息从服务器返回。
- 获得回答后,即确认接收方系统已做好接收邮件准备,客户端发送
DATA
命令,告诉服务器开始传送邮件。 - 服务器回答
354 Start mail input; end with <CRLF>.<CRLF>
,之后客户端发送邮件内容,以<CRLF>.<CRLF>
结束。
- 客户端从
- 连接释放:
- 客户端发送
QUIT
命令,服务器回答221 Service closing transmission channel
,表示SMTP同意释放TCP连接,至此邮件传送过程结束。
- 客户端发送
POP3和IMAP
- 邮局协议
POP
:十分简单但功能有限的邮件读取协议。- POP采用
C/S
工作方式,传输层使用TCP,端口号110。 - 两种工作方式:下载并保留,下载并删除(用户是否可以再次从服务器上读取)
- 第3个版本
POP3
采用拉的通信方式,即用户读取邮件时,用户代理向邮件服务器发出请求,拉取用户邮箱中的邮件。
- POP采用
- 因特网报文存取协议
IMAP
:相比POP复杂许多- 为用户提供创建文件夹,移动邮件等功能,为此IMAP维护了会话用户的状态信息。
- IMAP允许用户代理只获取报文的某些部分,例如可以只读取一个报文的首部,或多部份MIME报文的一部分。
常用的邮件读取协议:POP3、IMAP、HTTP
万维网(WWW)
万维网的概念和组成结构
-
万维网是一个分布式的、联机式的信息存储空间,在此空间中,一样有用过的事物常称为一样资源,并使用一个全域统一资源定位符
URL
标识。这些资源通过超文本传输协议
HTTP
传送给使用者。 -
万维网内核部分组成:
- 统一资源定位符
URL
:标识万维网上各种文档 - 超文本传输协议
HTTP
:应用层协议,使用TCP连接进行可靠传输。 - 超文本标记语言
HTML
:一种文档结构的标记语言。
- 统一资源定位符
-
URL格式:
<协议>://<主机>:<端口>/<路径>
-
万维网以
C/S
方式工作,浏览器是在用户主机上的万维网客户程序
,万维网文档驻留的主机则运行服务器程序,这台主机称为万维网服务器
。- Web用户用了浏览器与服务器建立连接,发送浏览请求
- 服务器把URL转化为文件路径,并返回给Web浏览器
- 通信完成,关闭连接
超文本传输协议HTTP
HTTP是面向事务的应用层协议,规定了浏览器和服务器之间的请求和相应的格式和规则,是万维网上能够可靠地交换文件的重要基础。
HTTP的操作过程
HTTP有两类报文:请求报文和响应报文。
例:访问www.qwq.com
- 浏览器分析链接指向页面
URL
(www.qwq.com) - 浏览器向DNS请求解析www.qwq.com的IP地址
- DNS解析出IP地址
- 浏览器与该服务器建立TCP连接(默认端口80)
- 浏览器发出HTTP请求:
GET/index.htm
- 服务器通过响应把文件index.htm发送给浏览器
- 释放TCP连接
- 浏览器释放文件indx.htm,并将Web页显示给用户。
HTTP的特点
-
HTTP使用
TCP
作为传输层协议,保证了数据的可靠性,但HTTP本身是无连接的。 -
HTTP是无状态的,同一个客户第二次访问同一个服务器上的页面时,服务器相应与第一次被访问是一样的。
-
HTTP的无状态特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求。实际应用中,通常使用
Cookie
加数据库的方式跟踪用户的活动 -
Cookie
工作原理- 当某个用户浏览某个使用Cookie的网站时,该网站的服务器就为用户产生一个唯一识别码,并在用户的响应报文中添加一个Set-cookie的首部行。
- 用户继续浏览这个网站时,会取出这个网站的识别码,并放入请求报文的首部行。
- 服务器根据请求报文中的
Cookie
识别码 就能从数据库中查询到该用户的活动记录,执行一些个性化操作。
-
HTTP既可以使用非持久性连接,也可以使用持久连接。
-
对于非持久性连接,每个网页元素对象的传输都要单独建立TCP连接。每个对象的引入都要导致
2×RTT
的开销,一次用于建立TCP连接,另一次用于请求和接收文档。这使得万维网服务器的负担很重。 -
对于持久连接,指的是服务器在发送响应后仍然保持这条连接,使同一个客户和服务器可以继续在这条连接上传送后续的HTTP请求和响应报文。
HTTP的报文结构
-
HTTP是面向文本的,因此报文中每个字段都是一些ASCII码串,且每个字段长度都是不确定的
-
分为
请求报文
和响应报文
,两者都由三部分组成,区别在于开始行不同。-
开始行:区别报文是请求报文还是响应报文。请求报文中称为
请求行
,响应报文中称为状态行
。 -
开始行三个字段之间以空格分隔,最后的
CR
和LF
分别表示回车和换行 -
请求报文的请求行包含三个字段:
方法
:表示请求的类型,如GET
、POST
、HEAD
等。URL
:表示请求的资源的位置。HTTP版本
:表示请求报文的HTTP版本。
-
响应报文的状态行包含三个字段:
HTTP版本
:表示响应报文的HTTP版本。状态码
:表示服务器对请求的处理结果。状态码的原因短语
:表示状态码的含义。
-
首部行:用来说明浏览器、服务器或报文主体的一些信息。首部可以有几行,也可以不使用。
每个首部行中都有首部字段和它的值,每一行结束都要有CRLF。
整个首部行结束时,还有一个空行将它和后面的实体主体分开。
-
实体主体
:请求报文一般不用,响应报文很少用。
-