Skip to content

06 应用层

第六章 应用层

统计信息:字数 17362 阅读35分钟

6.1 应用层概述

计算机网络的下层实现,都是为应用层做基础工作;应用层的功能复杂,协议很多。这一张每一节会介绍不同功能的具体使用和对应的协议。

物理层:解决使用何种信号来传递比特流的问题

数据链路层:解决分组在一个网络或者一段链路上传输的问题

网络层:解决分组在多个网络上传输路由的问题

运输层:解决进程之间基于网络的通信问题

应用层:解决通过应用进程的交互来实现特定网络应用的问题

应用层:计算机体系结构最顶层;设计和建立计算机网络的最终目的

6.2 客户端—服务器方式和对等方式-BS 和 P2P

CS 模式:客户端和服务器:是进程之间服务和被服务的关系(WWW,FTP,POP3)。

客户是服务请求方,服务器是服务提供方。服务器始终运行,并等待客户的服务请求。服务器有固定的端口号,运行服务器的主机也有固定的IP地址。

CS的服务是服务集中型的,客户端比较多,服务器比较少。通常一台服务器为多个客户端提供服务,可能出现服务器跟不上多个客户端请求的情况,所以使用集群或者服务器场来构建强大的虚拟服务器。

P2P 没有固定的服务请求者和服务提供者,网络中各个P2P应用程序是对等的,对等方之间直接通信,每一个对等方是服务的请求者和提供者(文件共享,迅雷)。

P2P是服务分散型的,服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中。特点:可扩展性好,增加对等方时,同时增加服务的提供者和请求者,系统性能不会因为规模扩大而降低,这样成本上有优势,不需要更多的服务器设施和服务器带宽。

6.3 动态主机配置协议DHCP

实际的问题:如果一个局域网中多个主机,如何配置IP,才能使得客户主机正常访问服务器?可以手动配置,但是配置比较麻烦。DHCP 动态主机配置协议就是自动配置 IP 的服务。在局域网中增加一个 DHCP 服务器提供服务。客户向 DHCP 服务器请求自己的网络配置信息即可。

DHCP 提供了即插即用联网:允许一台计算机,加入新网络时,可自动获取IP地址等网络配置信息,而不是上手动参与(Dynamic Host Configuration Protocol)。

DHCP 报文在运输层封装成 UDP 用户数据报。客户端通过 UDP 68 端口发送报文,服务器通过 UDP 67 端口接收报文。

获取 IP 阶段

1、客户端发送 DISCOVER 报文(广播发送,源地址 0.0.0.0 目的地址 255.255.255.255)

2、服务器接收报文,并发出响应 OFFER 报文(源地址是服务器的地址,目的地址是 255.255.255.255)包括事务ID和配置信息(IP地址,子网掩码,地址租期,默认网关,DNS服务器信息)DHCP服务器从自己的 IP 地址池中选择待租用给主机的 IP 地址。使用 ARP 确保选中的 IP 没有被其他主机占用。

3、客户端可能收到多个 DHCP 服务器发送的 OFFER 报文,选择先到的报文。

4、客户端继续广播 REQUEST 报文(包括事务ID,DHCP客户端的MAC地址,接收租约中的IP地址,提供租约的DHCP服务器端的IP地址)源地址 0.0.0.0 目的地址 255.255.255.255

4、服务器收到报文后,发送 ACK 报文。客户端接收后,使用 ARP 检测分配的 IP 地址是否被网络的其他主机占用。如果占用,给 DHCP 发送 DECLINE 撤销报文,然后从第一步重新发送 DISCOVER 报文。如果没有占用,可以使用这个 IP 地址和其他主机进行通信了。

IP 续约阶段(当0.5倍租用期到了)

1、客户端给服务器发送 REQUEST 报文(源地址是租用的IP地址,目的地址是 服务器的地址)

2、服务器接收到报文后:如果可以续约,发出 ACK 报文(源地址是服务器地址,目的地址是租用的 IP 地址),得到新的租用期;如果不可以续约,发出 NACK 报文,客户端必须停止使用之前租用到的 IP 地址,重新发送 DISCOVER 报文获取IP。

3、如果服务器无响应,0.875倍租用期到达后,客户端继续发送 REQUEST 报文,如果继续无响应,在租用期到达后停止使用 IP 并重新发送 DISCOVER 报文。

客户端主动解除IP续约

1、客户端向 DHCP 服务器发送 RELEASE 释放报文(源地址0.0.0.0,目标地址 255.255.255.255)

路由器中继问题:如果一个主机在路由器后面,路由器外面配置 DHCP 服务器,那么这个主机不能自动获取 IP 地址。主机会发出 DISCOVER 报文,但是会被路由器丢弃,服务器无法获取到。所以路由器需要配置 DHCP 服务器的地址并成为中继代理,这样就可以获取 IP 和网络配置信息了。

实际上,我们不需要,也不愿意在每一个网络上都配置 DHCP 服务器,所以每一个网络至少设置一个 DHCP 中继代理(路由器),作为各个网络中计算机和 DHCP 服务器的桥梁。

6.4 域名系统DNS

域名的作用:用户不需要记住IP地址,只需要记住域名,通过域名解析,访问到 IP 地址。域名系统简单说,就是一个域名和IP对应的哈希表服务。

域名的原理:客户端访问某个域名时,先从本地的 DNS 高速缓存中查找该域名对应的 IP 地址。如果本地没有找到,那么就向 DNS 服务器发送请求,获取 IP 地址。

服务器数量:互联网上不可能只有一台 DNS 服务器,扛不住高并发请求。如果这一台奔溃了,整个网络就挂了。

服务器结构:实际上 DNS 是层级的树结构,分布式的域名系统。大部分域名在本地解析,少量需要在网络中解析,效率很高。因为是分布式,即使某个计算机出现故障,不会影响整个系统运行。

域名树:三级域名.二级域名.一级域名 每一级由英文字母和数字组成(不超过63个字符,不区分大小写字母,左边低右边高,完整域名不超过255个字符)DNS 不显示一个域名有多少下级域名,不限制每一级域名代表什么意思。顶级域名由ICANN管理,各级域名由上一级的域名管理机构管理(dev.jlu.edu.cn)

顶级域名:国家顶级域名(cn us uk)通用顶级域名(com net org edu)反向域 arpa。二级域名由国家自行确定。域名只是 逻辑概念,不代表真实的物理地址。

域名服务器分类:

  • 根域名服务器(13个服务器集群,不解析域名,返回该域名所属的顶级域名服务器的IP地址)
  • 顶级域名服务器:负责管理在顶级域名服务器(cn)注册的全部二级域名(edu, bj)收到 DNS 查询请求时,可以回答。可能是最后的结果,也可是下一级权限域名服务器的IP
  • 权限域名服务器:管理某个区的域名
  • 本地域名服务器:主要是代理作用。主机发出 DNS 请求报文时,首先发送到本地域名服务器(大学或者ISP),一半不超过几个路由器。本地域名服务器的IP地址直接配置在主机中。

域名解析过程:递归查询 迭代查询

  • 递归查询:从底层一直到上层查询,上层依次返回查询结果。A -> B -> C -> D -> C -> B -> A 被查询的服务器负担较大,性能不好。
  • 迭代查询:主机箱本地域名服务器查询。本地先向根域名查询,上一层返回结果。如果不存在,然后底层向上两级查询,上两级返回结果。本地域名服务器 -> 根域名(cn) -> 本地, 本地 -> 顶级(edu) -> 本地, 本地 -> 权限(jlu) -> 本地。如果中间有缓存,那么直接获取缓存。
  • 实际上,主机到本地域名服务器使用递归查询,其他的查询时迭代查询。

高速缓存:用来存放最近查询过得域名,以及从何处获取域名映射信息的记录。因为域名到 IP 的映射关系可能变化,域名服务器会设置计时器和过期时间(每个项目存放两天)

例题

如果本地域名服务器无缓存,使用递归方法解析另一个网络的主机域名时,用户主机发送1条请求,本地域名服务器发送1条请求。

如果本地域名服务器有缓存,使用递归方法解析另一个网络的主机域名时,用户主机发送1条请求,本地域名服务器发送0条请求。

如果本地域名服务器有缓存,使用迭代方法解析另一个网络的主机域名时,用户主机发送1条请求,本地域名服务器发送3-4条请求。

解析 www.taobao.com.cn 时,本地域名服务器可能发出的请求最多和最少是:最少0条(本地域名服务器有缓存)最多4条(根域名服务器,顶级域名cn 权限域名com.cn 权限域名 taobao.com.cn)

6.5 文件传送协议FTP

计算机网络中传输文件是基本的网络应用,使用FTP协议。

三个特点:1、FTP 屏蔽了计算机网络中的很多内部细节,不同结构的网络可以正常通信。2、提供交互式的访问。用户可以指定传输文件的类型和格式,可以设置文件的存取权限。3、早期使用非常多,最后逐步被 www 取代。

服务器硬件配置:根据需求不同,FTP服务器可能是高性能和高可靠性的服务器计算机,也可能是普通的个人计算机。

客户端软件配置:可以使用FTP软件;可以直接在浏览器中使用 ftp 协议获取文件;可以在终端中使用 ftp:地址进行登录(dir get put 等命令进行发送接收文件)

用途:计算机之间批量传输文件,或者网页设计中,把本地文件上传到 web 服务器上。

工作原理:TCP 端口21。

1、客户端随机端口号发起 TCP 控制连接,服务器21端口接收报文。这个 TCP 连接成为控制连接。控制连接在整个对话期间始终打开,传输 FTP 的控制命令。

2、只有在有数据要传输时,客户端另一个随机端口发出 TCP 数据连接,默认情况下服务器 20 端口接收报文。这个连接就是数据连接,传输结束就关闭。

连接方式:控制连接和数据连接。

传输模式:主动模式和被动模式。建立数据连接后,主动模式中服务器主动连接客户端,被动模式下,服务器被动等待客户端的连接。主动方式使用 TCP 20 端口,被动方式下端口号由服务器和客户端自行商议决定。

6.6 电子邮件

电子邮件:发件人把邮件从本地发到邮件服务器,发件人的邮件服务器根据收件地址,转发到收件人的邮件服务器。收件人方便时,访问邮件服务器,获取收到的电子邮件。不仅可以传递文本,还支持多媒体。

传输方式:客户端/服务器方式

用户代理:用户与电子邮件系统的接口(客户端软件)

邮件服务器:ISP都有邮件服务器,负责发送和接收邮件,同时负责维护用户的邮箱

协议:使用 SMTP 发送邮件,使用 POP3 接收邮件

SMTP协议

SMTP 基本原理:A邮件服务器周期性对邮件缓存扫描,如果有新的邮件就开始发送。SMTP 有 14条命令,应答模式有 21种,使用 25 端口。简化的流程如下:

- 客户端向服务器说明身份,告诉 SMTP 服务器的域名。如果有效,服务器返回 250
- 客户端告诉服务器邮件的发件人。如果有效,返回 250
- 客户端告诉服务器邮件的收件人。如果邮箱存在,返回250。错误就返回其他的代码
- 客户端告诉服务器准备发送正文。服务器如果准备好接收,返回 354。
- 客户端发送邮件内容
- 客户端发完邮件内容,发送结束符号。如果收件成功,返回 250
- 客户端向服务器请求断开连接,服务器返回 211,并主动断开连接

邮件的格式:信封+内容(首部+主体)首部包括:from to CC subject

SMTP 的不足:只能传输 ASCII 码的文本数据,不能传输 exe 或者其他二进制对象;不能传送多媒体文件,不能传输非英文。

为了传输非 ASCII 码文本的问题,提出了多用途因特网邮件扩展 MIME。就是发件和收件前,先把多媒体转换成 ASCII 码,收件后,将 ASCII 反向转换成多媒体文件。MIME 也用于 HTTP 请求中,多媒体转换成 ASCII 的问题。

MIME:1、增加了5个新的邮件首部字段(提供了邮件主体的信息)。2、定义了许多邮件内容的格式(对多媒体邮件进行标准化)3、定义了传输编码,对任何内容格式进行转换。

POP3协议

POP 协议,3表示第三个版本,是因特网的正式标准,功能简单有限(用户只能下载到本地,管理邮件)

用户只能下载并删除,或者下载并保留的方式,从邮件服务器下载到本地计算机,不允许在邮件服务器上管理自己的邮件(不支持创建文件夹和管理自己的邮件)。

IMAP协议

当前是 IMAP4 ,功能强大,是因特网的建议标准(用户可以在服务器上管理自己的邮件)是一个联机协议。

POP3和IMAP4都基于 TCP 连接的客户端服务器模式,POP3使用110 端口,IMAP使用143端口。

基于WWW的电子邮件

通过浏览器登录操作电子邮件,和 IMAP 类似,无需本地安装专门的用户代理程序,此时用户A到A服务器之间使用 HTTP 协议,A服务器到B服务器使用 SMTP 协议,B服务器到B浏览器使用HTTP协议即可。

6.7 万维网WWW

万维网是互联网上分布式应用,通过超链接将不同网页连接起来的网络。

浏览器内核(渲染引擎)负责网页的解析和显示。不同浏览器的内核不同,解析显示代码的结果不同,造成了浏览器兼容性问题。

URL:统一资源定位符,协议:主机:端口、路径

HTTP 1.0 版本:非持续连接的方式:每次请求需要建立 TCP 连接,请求结束后,断开连接。请求一个文件需要 2RTT + 文件传输时间(TCP三次握手)。如果并行请求资源,那么TCP连接较多,对服务器的性能影响较大。

HTTP 1.1 版本:持续连接。TCP建立连接后,服务器发送相应后,仍然保持TCP连接,同一个浏览器后续的 HTTP 请求仍然使用这个连接,只要请求的资源在同一个服务器上即可。这样大大减少了 TCP 请求的数量。TCP 持续连接以流水线形式工作,即浏览器异步发送请求,可以连续发送多个请求报文,多个连续报文到达服务器后,服务器发回多个响应报文,这样节省了很多 RTT 时间,使 TCP 连接中空闲时间减少。

TCP 连接的端口号默认是 80 端口

HTTP 报文是面向文本的,其中每一个字段都是 ASCII 串码,每个字段长度都不是固定的。

请求报文:
请求行:方法 + URL + 版本
首部行:字段名+值 (可能有多个字段)
实体主体:通常不用

GET /index.html HTTP/1.1
Host: www.baidu.com (服务器的域名)
Connection: close/keep-alive (服务器发送相应后,可以释放连接)
User-Agent: Mozilla/5.0(浏览器类型和版本)
Accept-Language: cn(用户优先获取中文版本的文档)
该 HTTP 请求没有实体主体

请求方法:get、post、head、put、delete、connect、options、trace、patch

响应报文
状态行:版本+状态码+短语
首部行:字段名+值

状态码

  • 1xx 请求收到,正在进行处理
  • 2xx 请求成功
  • 3xx 重定向,完成请求还必须采取进一步行动
  • 4xx 客户端错误
  • 5xx 服务器错误

使用 cookie 在服务器上记录用户信息:网页需要记住用户名,具体流程

  1. 浏览器带着 userID 发出 HTTP 请求
  2. 服务器端根据 userID,生成一个唯一的 Cookie,在服务器端数据库创建一个项目,记录用户访问网站的各种信息
  3. 服务器返回 set-Cookie 字段
  4. 浏览器将 cookie 存入文件
  5. 浏览器再次请求时,在请求中带入 cookie
  6. 服务器根据 cookie,识别用户,返回个性化的用户网页
  7. 浏览器解析个性化的网页

万维网缓存(web 缓存):使用缓存机制,提高网络效率。请求可以缓存到本地客户端,或者缓存到中间系统上(代理服务器)。web 缓存把最近的请求放在本地磁盘中。当新请求到达时,如果新的请求和暂时存放的请求相同,就返回暂存的请求,不需要按照 URL 地址再次向远程服务器发送请求。

缓存过期时间:如果真实的文档已经改变,用户还从缓存中获取,那么无法获取最新的文档,就出错了。所以设置一个缓存判断,在请求报文中增加 If-modified-since 用来标识过期时间。如果请求的资源已经过期,那么再从远程服务器中获取资源(304 Not Modified)

例子:如果一个网页有两个小图片,以非流水线持续连接的方式,用时多少个 RTT?
解法:4个 RTT。首先一个TCP,然后请求 HTML,然后请求两个图片(非流水线)。持续连接,后面请求不需要重新 TCP 连接。

Last update: November 9, 2024