1. 应用层概述
(1)、前情回顾
- 物理层:解决使用何种信号来传输比特的问题
- 数据链路层:解决分组在一个网络(或一段链路)上传输的问题
- 网络层:解决分组在多个网络上传输(路由)问题
- 运输层:解决进程之间基于网络的通信问题
- 应用层:解决通过应用进程的交互来实现特定网络应用的问题。
(2)、应用层的定义
应用层是计算机网络体系结构的最顶层
,是设计和建设计算机网络的最终目的,也是计算机网络中发展最快的部分。
(3)、相关应用
- 万维网WWW
- 域名系统DNS
- 动态主机配置DHCP
- 电子邮件
- 文件传送FTP和P2P文件共享
- 多媒体网络应用
2. 客户/服务器方式(C/S方式)和对等方式(P2P方式)
(1)、客户/服务器方式(C/S方式)
客户和服务器
是指通信中所涉及的两个应用进程。- 客户/服务器方式所描述的是
进程之间服务和被服务的关系
。 客户是服务请求方
,服务器是服务提供方
- 服务器总是
处于运行状态
,并等待客户的服务请求。服务器具有固定的端口号
(HTTP服务器的固定端口号为80
)和固定的IP地址
。 - 由于一台服务器计算机要为多个客户机提供服务,在C/S应用中,常会
出现服务器计算机跟不上众多客户机的情况
。所以常用计算机群集
构建一个虚拟服务器。
应用
- 万维网WWW
- 电子邮件
- 文件传输FTP
(2)、对等方式(P2P方式)
P2P方式中,没有固定的服务请求者和服务提供者
,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方。对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者
。
应用
- P2P文件共享
- 即时通信
- P2P流媒体
- 分布式存储
3. 动态主机配置协议DHCP
(1)、为什么需要动态主机配置协议DHCP?
如果没有动态主机配置协议DHCP
,我们都是手动的给主机配置相应的信息(IP地址、子网掩码、默认网关、DNS服务器)
。但是这样的话,可能会导致配置错误且工作量大。因此动态主机配置协议DHCP应运而生
。
(2)、动态主机配置协议DHCP的工作过程
1. 寻找DHCP服务器过程
DHCP客户端进程
向链路上发送一个DHCP发现报文(源地址为0.0.0.0,目的IP地址255.255.255.255)
,该报文是广播报文,从所在的网络中寻找DHCP服务器,因为只有DHCP服务器才能解析出这报文中的UDP数据报
。
2. 提供IP地址租用
当DHCP服务器收到相应的发现报文后,会向链路上发送DHCP提供报文(源地址为DHCP服务器的地址,目的IP地址为255.255.255.255)
,该报文是广播报文。DHCP客户端进程
收到相应的报文后使用ARP确保所选IP地址为被网络中其他主机占用
。
3. 接受IP地址租约
收到提供报文之后,会向链路上发送DHCP请求报文(源地址为0.0.0.0,目的IP地址为255.255.255.255)
,该报文是广播报文,主要是向DHCP服务器说明接受IP地址租约
。
4. 确认IP地址租约
DHCP服务器受到相应的DHCP请求报文后,向链路上发送DHCP确认报文(源IP地址为:该服务器的IP地址,目的IP地址为255.255.255.255)
,该报文是广播报文,主要是确认IP地址租约
。此时DHCP客户端进程收到相应的报文后使用ARP确保所选IP地址为被网络中其他主机占用
。
(3)、IP地址续约情况
1. 情况1
当相应的IP地址租用期过了一半时,DHCP客户机就会向相应的DHCP服务器发送DHCP请求报文(源地址为租用的地址,目的IP地址为服务器的IP地址)
,该情况下,DHCP服务器向DHCP客户机发送DHCP确认报文(源地址为服务器的IP地址,目的IP地址为租用的地址)
,那么DHCP客户机得到新的租用期
2. 情况2
当相应的IP地址租用期过了一半时,DHCP客户机就会向相应的DHCP服务器发送DHCP请求报文(源地址为租用的地址,目的IP地址为服务器的IP地址)
,
DHCP服务器向DHCP客户机发送DHCP不确认报文(源地址为服务器的IP地址,目的IP地址为租用的地址)
,那么DHCP客户机立即停用相应的IP地址
,重新进行动态分配过程。
3. 情况3
当相应的IP地址租用期过了一半时,DHCP客户机就会向相应的DHCP服务器发送DHCP请求报文(源地址为租用的地址,目的IP地址为服务器的IP地址)
,
DHCP服务器对DHCP客户机不响应
,且DHCP客户机的租用期到时,那么DHCP客户机立即停用相应的IP地址
,重新进行动态分配过程。
三种情况图示说明
(4)、DHCP中继代理
为什么需要DHCP中继代理?
如果相应的主机和DHCP服务器不在同一个网络中的话
,而发送的相关报文又是广播报文,而路由器不能转发广播报文
。所以需要DHCP中继代理。
DHCP中继代理的作用
作为各计算机和相应的DHCP服务器的桥梁
。
4. 域名系统DNS
(1)、DNS的应用
- 域名到IP地址的映射
ping
命令
(2)、主机输入域名后所经历的过程
当在用户主机上输入URL后,主机会先在高速缓存中查找相应域名的对应IP地址
,如果没有找到,那么就会向DNS域名服务器发送一个内容大致为“相应的域名所对应的IP地址是什么?”的报文
给DNS域名服务器。DNS服务器收到后DNS服务器会向用户主机发送一个内容为“相应的IP地址”的响应报文
。这样用户主机就可以访问相应的主机了。
(3)、因特网中是否可以使用一台DNS服务器?
这种做法不可取,因为因特网的规模很大,这样的话域名服务器会因为超负荷而无法正常工作
,而且一旦域名服务器出现故障,整个因特网就会瘫痪
。
(4)、域名的命名规则
采用层次树状结构的域名结构。
~. 三级域名. 二级域名 . 顶级域名
- 根域名服务器:根域名服务器通常并不直接对域名进行解析,而是
直接返回所属顶级域名的顶级域名服务器的IP地址
。 - 顶级域名服务器:这些域名服务器
负责管理在顶级域名服务器注册的所有二级域名
。 - 权限域名服务器:这些域名服务器负责管理某个区的域名。
- 本地域名服务器:本地域名服务器起着代理作用,会将该报文转发到上述的域名服务器的等级结构中。
(5)、域名解析过程
1. 递归查询
用户主机递归查询
根域名服务器,根域名服务器递归查询
顶级域名服务器,顶级域名服务器递归查询
权限域名服务器。查询到后进行返回。
2. 迭代查询
用户主机递归查询
根域名服务器,根域名服务器告诉用户主机相应的下一个访问的IP地址迭代查询
顶级域名服务器,顶级域名服务器告诉用户主机相应的下一个访问的IP地址迭代查询
权限域名服务器。查询到后进行返回。
递归查询会导致服务器负担太大
,所以一般采用主机到本地域名服务器的查询是递归查询
,而其余的是迭代查询
。
3. 高速缓存
为什么要用高速缓存?
为了提高DNS的查询效率
,并减轻DNS域名服务器的压力
,所以使用高速缓存。
缓存的过程
如果查询到后,直接把域名和IP地址的对应关系存下来
,然后再次查询相同域名
的时候,直接把高速缓存的存放结果告诉用户。
主机中也可以设置高速缓存
。
5. 文件传输协议FTP
(1)、什么是文件传送
将某台计算机上的文件通过网络传输到很远的另一台计算机中。
(2)、文件传输协议FTP
- FTP提供交互式的访问,允许客户指明文件类型和格式,并允许文件具有存取权限。
- FTP
屏蔽了各计算机的细节
,因而适合于在异构网络中任意计算机之间进行传送文件
。
(3)、FTP客户和服务器之间必须建立的两个连接
- 控制连接,在整个会话期间一直保持打开,用于传输FTP相关命令。
- 数据连接,用于文件传输,在每一次传输时才建立,传输结束就关闭。
- 默认情况下,FTP使用
TCP21端口
进行控制连接,TCP20端口
进行数据连接。
(4)、主动模式
FTP客户端发起TCP连接,建立用于传输控制命令的TCP连接
,有数据要传输时,FTP客户通过命令通道告知FTP服务器来与自己的另一个临时端口号建立TCP连接
,建立数据通道。
(5)、被动模式
FTP客户端发起TCP连接
,建立用于传输控制命令的TCP连接
,有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某一个临时端口号等待TCP连接
,建立数据通道。
6. 电子邮件
(1)、电子邮件系统说明
电子邮件系统采用的是客户/服务器方式
。三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
。
- 用户代理是
用户与电子邮件系统的接口
,又称电子邮件客户软件。 - 邮件服务器是电子邮件的基础设施。因特网上所有的ISP都有邮件服务器,其
功能是发送和接受邮件,同时还要负责维护用户的邮箱
。 - 协议包括
邮件发送协议(SMTP)和邮件读取协议(POP3)
。
(2)、常用的邮件发送协议
常用的邮件发送协议是简单的邮件传送协议SMTP
。
- 基于
TCP
连接,端口号为25
。 只能传送ASCII文本
。- 用于
用户代理
向邮件服务器发送邮件
以及邮件服务器之间的邮件发送
。
1. 存在的问题
但是只能发送ASCII文本。为解决该问题,提出了多用途因特网邮件扩展MIME
。
2.多用途因特网邮件扩展MIME的工作过程
当发送方使用SMTP之前先使用MIME将非ASCII码转化为ASCII码
,然后使用SMTP进行传送;当接收方接收时,MIME将报文使用MIME从ASCII码转化为非ASCII码
,然后进行接收。
简单邮件传送协议SMTP的基本工作原理
- 刚开始的时候发送方邮件服务器(SMTP客户)向接收方邮件服务器
发送14条SMTP命令
,然后接收方邮件服务器(SMTP服务器)向发送方邮件服务器发送21种SMTP应答
。
- 接收方邮件服务器向发送方邮件服务器
主动推送服务器就绪应答
,应答代码为220
;
- 发送方邮件服务器向接收方邮件服务器
说明身份,告知自己SMTP服务器的域名
,如果身份有效
,接收方服务器发送回答代码250
。
- 发送方邮件服务器向接收方服务器
说明自己来自何方
,如果合理,接收方服务器发送回答代码250
,否则,发回其他错误代码。
- 发送方邮件服务器向接收方服务器说明自己
去往何地
,如果邮箱存在
,接收方服务器发送回答代码250
,否则,发回其他错误代码。
- 发送方邮件服务器向接收方服务器
说明自己准备发送邮件内容
,如果准备好接收
,接收方服务器发送回答代码354
,否则,发回其他错误代码。
- 发送方邮件服务器向接收方服务器
说明自己邮件内容
- 发送方邮件服务器向接收方服务器
发送完邮件内容,还要发送结束符
,如果收件成功
,接收方服务器发送回答代码250
,否则,发回其他错误代码。
- 发送方邮件服务器向接收方服务器
说明自己要断开连接
,接收方服务器发送回答代码221表示接受请求并主动断开连接
。
(3)、常用的邮件读取协议
- 邮局协议POP3:非常简单的、功能有限的邮件读取协议。
用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户计算机。不允许用户在邮件服务器上管理自己的邮件
。 - 因特网邮件访问协议IMAP:功能比POP3强大的邮件读取协议。
用户在自己的计算机上就可以操作邮件服务器的邮箱,就像本地操控一样,因此IMAP是一个联机协议
。 POP3和IMAP4都采用基于TCP连接的客户/服务器方式
。POP3
使用端口110
,IMAP4
使用端口143
。
(4)、发送邮件的大体过程
发送方的用户代理
使用SMTP
发送邮件给发送方邮件服务器
,发送方邮件服务器
使用SMTP
发送邮件给接收方邮件服务器
。接收方的用户代理
使用POP3
从接收方邮件服务器
取出邮件。
(5)、基于万维网的电子邮件
通过浏览器登录(提供用户名和口令)邮件服务器万维网网站就可以撰写、收发、阅读和管理电子邮件。这种工作模式与IMAP很类似,不同的是用户计算机无需安装专门的用户代理程序,只需要使用通用的万维网浏览器
。
这种工作模式在用户浏览器与邮件服务器网站
之间使用HTTP协议
,而邮件服务器之间
使用SMTP协议
。
7. 万维网WWW
(1)、万维网简介
万维网并非某种特殊的计算机网络。它是一个大规模的、联机式的信息储藏所,是运行在因特网上的一个分布式应用
。
(2)、相关流行的浏览器及其引擎
浏览器最重要的部分是渲染引擎
,也就是浏览器内核
。负责对网页进行解析和显示
。
- Chrome : Blink
- Firefox : Gecko
- Safari : WebKit
- Opera : Blink
- Internet Explorer : Trident
(3)、统一资源定位符(URL)
万维网使用统一资源定位符URL
来指明因特网上的任何种类资源的位置
其组成格式:
**<协议>://<主机>:<端口>/<路径>**
(4)、万维网的文档
万维网文档的最基本的组成成分有HTML、CSS、JavaScript
。
- HTML : 超文本标记语言HTML,使用多种标签来描述网页的结构和内容。
- CSS : 层叠样式表CSS,从审美的角度来描述网页的样式。
- JavaScript : 一种脚本语言(和Java没有任何关系),控制网页的行为。
(5)、超文本传输协议HTTP
HTTP定义了浏览器怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器
。
1.HTTP应用过程
首先浏览器向服务器建立起TCP连接,端口号为80
。然后浏览器向服务器发送HTTP请求报文
,服务器收到相应的请求报文后,服务器向浏览器发送HTTP响应报文
。
2. HTTP/1.0
HTTP/1.0采用的是非持续连接方式
。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后立即关闭连接
。
相应的缺点
每请求一个文档就要有两倍的RTT开销
。如果一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间- 为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是
万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重
。
3. HTTP/1.1
HTTP/1.1采用持续连接方式
。在这方式下,万维网服务器在发送响应后仍然会发送响应保持这条连接
,使同一个客户和该服务器可以继续在这条上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上的对象,而是只要这些文档都在同一个服务器上就行
。
- 为了进一步提高效率,HTTP/1.1的持续连接还可以使用
流水线方式工作
,就是浏览器在收到HTTP的响应报文之前就能够连续发送多个请求报文
。这样的一个接一个的请求报文到达服务器后,服务器就会发回一个接一个的响应报文。这样就节省了很多个RTT时间,使TCP连接中的空闲时间减少,提高下载文档的效率。
(5)、HTTP的报文格式
HTTP是面向文本
的,其报文的每一个字段都是一些ASCII码串
,并且每一个字段的长度不确定。
1. HTTP请求报文
- 请求行: HTTP请求报文中的“请求行”是由
“请求方法”、“URL”和“协议版本”
3个字段组成的,它们之间均以空格进行分隔。这部分是必不可少的。在请求行的最后有一个回车控制符和一个换行控制符(一起以“CRLF”表示),使下面的请求头部信息在下一行显示。 - 请求头部行: HTTP请求头部包括一系列的“请求头”和它们所对应的值,指出允许客户端向服务器传递请求的附加信息以及客户端自身的信息。当打开一个网页时,浏览器要向网站服务器发送一个HTTP请求头,然后
网站服务器根据HTTP请求头的内容生成当次请求的内容并发送给浏览器
,这就是HTTP请求报文中的“请求头”的作用。 - 空行: 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头;
- 实体主体行: 请求报文中“实体主体”部分通常是不用的。
它不能在GET方法中使用,仅在POST方法中用于向服务器提供一些用户凭据信息(通常不用)
。
2. HTTP响应报文
HTTP 响应报文由状态行、响应头部、空行 和 实体主体
4 个部分组成。
- 状态行: 状态行由
HTTP 协议版本字段、状态码和状态码的描述文本
3 个部分组成,他们之间使用空格隔开。 - 响应头部: 响应头向客户端提供一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些头部有助于客户端处理响应,并在将来发起更好的请求。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通讯双方都支持,如果存在不支持的响应头域,一般将会作为实体头域处理。
- 空行: 最后一个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。
- 实体主体: 服务器返回给客户端的文本信息。
(6)、Cookie
1. Cookie的相关介绍
早期的万维网应用非常简单,仅仅是用户查看存放在不同服务器上的各种静态的文档。因此HTTP被设计为—种无状态的协议。这样可以简化服务器的设计。
现在,用户可以通过万维网实现各种复杂的应用
,如网上购物、电子商务等。这些应用往往需要万维网服务器能够识别用户
。
Cookie提供了一种机制使得万维网服务器能够“记住”用户,而无需用户主动提供用户标识信息
。也就是说,Cookie是一种对无状态的HTTP进行状态化的技术。
2. Cookie的使用
用户主机首次访问万维网服务器
当一个用户机中的浏览器和万维网服务器建立好了TCP连接,端口号为80
。此时用户主机的浏览器向服务器发送HTTP请求,万维网服务器为该客户生成一个唯一的Cookie识别码,并以此为索引在服务器的后端数据库中创建一个项目,用来记录该用户访问该网站的各种信息
。然后将生成的Cookie放置于HTTP响应报文中,用户主机的浏览器收到后将其存入文件
。
用户主机非首次访问万维网服务器
当该用户浏览器不是首次访问万维网服务器
的时候,那么在用户主机中的浏览器已经和万维网服务器建立好了TCP连接后,用户主机的浏览器向万维网服务器发送的HTTP请求中会携带Cookie
,万维网服务器根据识别Cookie识别码就可以识别出该用户,并返回该用户的个性化网页
。然后向用户主机中的浏览器发送携带个性化网页的HTTP响应报文。
(7)、万维网缓存
万维网缓存又称Web缓存
,可位于客户机,也可以位于中间系统,位于中间系统的Web缓存又称为代理服务器
。
Web缓存把最近的一些请求和响应暂存到本地磁盘中
。当新请求到达时,如果发现这个请求与暂时存放的请求相同,就返回暂存的响应,而不需要按URL地址再次去因特网访问该资源
。
如果Web缓存的命中率比较高的话,大大减少了该链路上的通信量,因而减少了访问因特网的时延。
1. 含有代理服务器的资源请求过程
用户主机中浏览器会向代理服务器发送请求,如果代理服务器中存放了所请求的对象,那么直接放回相应的对象
;
如果代理服务器中没有相应的暂存对象
,那么就会由代理服务器向原始服务器发送请求
,原始服务器收到请求后向代理服务器发送响应,然后代理服务器将其存放于自己内部中,再向用户主机发送相应的响应对象
。
2. 可能存在代理服务器的文档与原始服务器的文档不一致问题
那么在代理服务器中的文档已过期时,代理服务器就会向原始服务器发送相应的请求(包含Last-Modified字段)
,原始服务器会对其进行比对,如果结果是一致
的话,那么就是改变相应代理服务器中的文档的时间,将其设置为未过期,相当于激活一下
。
如果发现不一致
,那么原始服务器就会发来相应的携带已更改的文档的响应报文
,那么代理服务器就会使用这对原来的进行替换
。