计算机网络复习(二) 应用层

1、Application

(1)网络应用的常见架构

网络应用一般采用两种架构模式,一种是 CS (Client/Server) 架构,一种是 P2P (Peer-To-Peer) 架构

对于 CS 架构 而言,网络中的每个节点是不对称的,具体而言可以分为服务端和客户端两类

简单来说,服务端拥有资源,可以为客户端提供服务,而客户端需要资源,需要向服务端申请服务

对于 P2P 架构 而言,网络中的每个节点都是对称的,也可以说每个节点都是服务端和客户端

因为每个节点都拥有资源,每个节点都可以提供服务,同时每个节点也都需要资源,每个节点也都需要申请服务

(2)网络应用的通信方式

不同应用之间的通信,其实就是不同进程之间的通信,如果两个进程在同一主机上,那么通信过程由操作系统定义

假如两个进程不在同一主机上,那么它们之间的通信需要通过网络,这时通信过程由一系列层次化的网络协议定义

而站在 应用层 这一层次上,我们只需要定义好消息的内容,以及指定好把消息发给谁(目标进程)即可

一个进程可以通过套接字将消息交给底层,然后通过底层提供的服务,另一个进程可以通过套接字从底层得到消息

至于底层是如何把消息 (message) 从一个套接字传到另一个套接字,不是应用层需要关心的内容

(3)如何定位进程

一个运行在网络上的进程怎么定位呢?我们可以通过 IP 地址定位网络中的主机,然后通过端口定位主机上的进程

一些常见的应用层协议会带有 默认的 端口号:

协议 端口 用途
HTTP 80 网页传输
FTP 21 文件传输
SMTP 25 邮件发送
POP3 110 邮件接收
IMAP 143 邮件接收
Telnet 23 远程登陆

2、Web and HTTP

(1)通信过程

对于网页 (Web) 应用,通常使用 HTTP (Hypertext Transfer Protocol) 控制通信规则,其依赖于 TCP 提供的服务

根据标准的不同,HTTP 协议可以分为 HTTP/1.0 和 HTTP/1.1,其中 HTTP/1.1 由 HTTP/1.0 改进而来

在 HTTP/1.0 中,使用的是 非持续性连接 (Non-persistent Connection),对于 CS 架构通信过程如下:

  • 客户端请求与服务端建立 TCP 连接
  • 服务端同意建立 TCP 连接
  • 客户端发送请求,在请求信息中指定需要获取的资源
  • 服务端返回响应,在响应信息中包含资源实体,之后关闭 TCP 连接
  • 客户端收到响应,解析拿到资源实体
  • 如果发现资源实体还要引用其它资源,那么重复以上步骤

而在 HTTP/1.1 中,使用的是 持续性连接 (Persistent Connection),对于 CS 架构通信过程如下:

  • 客户端请求与服务端建立 TCP 连接
  • 服务端同意建立 TCP 连接
  • 客户端发送请求,在请求信息中指定需要获取的资源
  • 服务端返回响应,在响应信息中包含资源实体,但是不会关闭 TCP 连接
  • 客户端收到响应,解析拿到资源实体
  • 如果发现资源实体还要引用其它资源,那么重复步骤 3~ 5

假设我们需要传输一个 HTML 文件,在文件中引用十个 JEPG 图片,计算传输时间?

  • 若使用非持续性连接:T = (2RTT + Ttransfer) + (2RTT + Ttransfer) * 10
  • 如果使用持续性连接:T = (2RTT + Ttransfer) + (RTT + Ttransfer) * 10

(2)消息格式

HTTP 采用 请求/响应 格式,客户端提交请求 (Request),服务端返回响应 (Response)

请求消息的格式请看下面的图片,其中常见的 请求方法 如下:

  • GET:请求指定资源,返回资源实体
  • POST:向指定资源提交数据,可能导致新资源的建立或旧资源的修改
  • HEAD:类似 GET 请求,只是返回的响应没有具体的内容,常常用于获取报头
  • DELETE:删除指定的资源
  • PUT:使用提交的数据取代指定的资源
  • TRACE:返回服务端收到的请求,常常用于测试
  • OPTIONS:返回服务端针对特定资源所支持的请求方法,也能用于查看服务端的性能

谈谈 GET 和 POST 的区别?

1、约定的作用不同,GET 用于从服务器上查询数据,POST 用于在服务器上修改数据

2、参数的位置不同(浏览器实现),GET 请求的参数放在 URL,POST 请求的参数放在 Body

​ GET 请求的参数大小可能会有限制,因为浏览器可能会对 URL 的长度有限制

​ GET 请求的参数会被完整保留在浏览器历史记录中,POST 请求的参数不会

3、产生的效果不同(浏览器实现),GET 请求是幂等的、没有副作用,POST 请求不是幂等的、有副作用

​ 点击回退按钮或者刷新页面的时候,GET 不会产生任何影响,POST 会重新提交请求

​ GET 请求得到的结果可以作为浏览器书签,但是 POST 不行

​ GET 请求得到的结果会被浏览器主动缓存,但是 POST 不会

响应消息的格式请看下面的图片,其中常见的 状态代码和状态信息 如下:

  • 1**:信息,服务端收到请求,要求客户端继续执行操作
  • 2**:成功
    • 200:OK,服务器已成功处理请求,并返回请求的资源
  • 3**:重定向
    • 301:Moved Permanently,永久重定向,请求的资源永久移动到新位置
    • 302: Found,临时重定向,请求的资源暂时移动到新位置
  • 4**:客户端错误
    • 400:Bad Request,请求报文存在语法错误
    • 403:Forbidden,对请求资源的访问被服务器拒绝
    • 404:Not Found,在服务器上没有找到请求的资源
  • 5**:服务端错误
    • 500:Internal Server Error,服务器在执行请求时发生错误
    • 502:Bad Gateway,作为网关的服务器在执行请求时,从远程服务器收到一个无效的响应
    • 503:Service Unavailable,由于服务端超载或停机维护,服务器暂时无法处理客户端的请求

谈谈 301 和 302 的区别?

它们都是表示重定向的,也就是说浏览器在拿到 301 或 302 的时候会自动跳转到一个新的地址

然后它们的不同之处如下:

301 表示旧地址的资源永久移除,搜索引擎在抓取新内容的同时,会用新地址替换掉旧地址的记录

302 表示旧地址的资源其实还在,只是暂时跳转到新地址,搜索引擎会抓取新内容,但保留旧地址

(3)Cookies

由于 HTTP 协议是 无状态的,因此服务器想要跟踪用户状态,可以使用 Cookies 技术

Cookie 其实就是一个特殊的值,它由服务端创建和维护,并发送给客户端

之后,客户端在每次请求时带上 Cookie,服务端通过 Cookie 就能判断用户状态

(4)Caches

Caches 技术可以降低客户端获取响应的时间,也能减少服务端处理请求的压力,可以说是一举两得

使用 Caches 其实就是建立一个或多个 代理服务器 (proxy server),由代理服务器帮助响应客户端的请求

客户端直接发送请求到代理服务器,如果请求的资源在代理服务器上,那么直接返回给客户端

如果不在,那么代理服务器先向服务器请求资源,得到资源后保存在本地,之后再返回给客户端

简单描述一下 HTTP 协议的发展过程?

HTTP/0.9【1991 年】

  • 最简单的版本,只能访问 HTML 格式资源,没有头部,请求方法只有 GET

HTTP/1.0【1996 年】

  • 增加 HTTP 版本号
  • 增加状态代码和状态信息
  • 增加请求方法,包括 POST 和 HEAD
  • 增加头部,无论是请求或者是响应都要有头部
  • 在头部中通过设置 Content-Type 支持传输其它类型的文件

HTTP/1.1【1997 年】

  • 增加持久性连接,能让 HTTP 请求复用 TCP 连接
  • 支持流水线传输,允许在一个 TCP 连接中同时发送多个请求
  • 增加请求方式,包括 DELETE、PUT、OPTIONS 等等

HTTP/2.0【2015 年】

  • 二进制分帧:将传输的数据划分为更小的帧,并对它们采用二进制编码
  • 服务端推送:允许在客户端没有请求的情况下,主动给客户端发送资源
  • 压缩头部:多次请求的很多头部其实是重复的,有必要对头部进行处理
    一是使用压缩工具对头部进行压缩后再发送,二是对于重复的字段可以使用索引号来代替

3、File and FTP

(1)通信过程

对于文件 (File) 传输,通常使用 FTP (File Transfer Protocol) 控制通信规则,其依赖于 TCP 提供的服务

FTP 协议在通信时会建立两个连接,分别为 控制连接 (Control Connection) 和 数据连接 (Data Connection)

  • 控制连接:用于传输命令,进行授权认证
  • 数据连接:用于传输文件

对于 CS 架构通信过程如下:

  • 客户端与服务端建立控制连接
  • 客户端通过控制连接进行授权,发送命令
  • 服务端收到文件传输命令之后,建立数据连接
  • 服务端通过数据连接传输文件,当一个文件传输完成后,服务端关闭数据连接
  • 如果还有其它文件传输,需要重新建立数据连接

(2)消息格式

FTP 采用 命令/响应 格式,客户端发送的命令以及服务端返回的响应通过控制连接传输,它们都是 7 比特的 ASCII

客户端发送 命令 (Command) 进行授权和请求资源,常用的命令如下:

  • USER username:向服务端发送账号
  • PASS password:向服务端发送密码
  • LIST:返回当前目录的文件列表
  • RETR filename:从服务端下载文件
  • STOR filename:将文件上传到服务端

服务端接收到命令后,发送 响应 (Response) 返回结果,一个响应包括状态代码和状态信息,常见的响应如下:

  • 311:账号正确,要求输入密码
  • 125:已经建立数据连接,开始传输文件
  • 425:不能建立数据连接

4、Email and SMTP

(1)通信过程

对于邮件 (Mail) 传输,通常使用 SMTP (Simple Mail Transfer Protocol) 控制通信规则,其依赖于 TCP 提供的服务

邮件传输有两个重要的组件,分别是 用户代理 (User Agent) 和 邮件服务器 (Mail Server)

  • 用户代理:用于编辑、阅读邮件
  • 邮件服务器:用于发送、接收邮件

对于 CS 架构通信过程如下:

  • 发送方通过自己的用户代理编辑邮件
  • 发送方的用户代理发送邮件到自己的邮件服务器
  • 发送方的邮件服务器接收邮件,将邮件放在消息队列 (Message Queue),等待发送
  • 发送方的邮件服务器发送邮件到接收方的邮件服务器
  • 接收方的邮件服务器接收邮件,将邮件放在邮件箱子 (Mail Box),等待阅读
  • 接收方通过自己的用户代理阅读邮件

(2)消息格式

最开始的时候,邮件只能传输文本,因此只用简单的 ASCII 定义邮件格式

普通邮件格式 包括两个部分,分为头部 (Header) 和主体 (Body)

后来,邮件还能传输多媒体资源,又定义了新的格式 MIME (Multiperpose Internet Mail Extension)

只需要在头部添加新行,指定使用 MIME 邮件格式 即可

SMTP 同样采用 命令/响应格式,对于客户端发送的命令以及服务端返回的响应,它们都是 7 比特的 ASCII

客户端发送 命令 (Command) 进行授权和请求资源,常用的命令如下:

  • HELO:建立连接
  • AUTH LOGIN:身份认证
  • MAIL FROM address:指定发送邮件的邮箱
  • RCPT TO address:指定接收邮件的邮箱
  • DATA:指定邮件正文
  • QUIT:关闭连接

服务端接受到命令后,发送 响应 (Response) 返回结果,一个响应包括状态代码和状态信息,常见的响应如下:

  • 220:服务就绪
  • 250:要求的操作已完成
  • 354:开始输入邮件正文,以 . 结束
  • 221: 服务关闭

(3)其它邮件协议

上面介绍过的 SMTP 是 邮件发送协议,下面要介绍的 POP3 和 IMAP 是 邮件接收协议

  • POP3 (Post Office Protocol 3):允许用户从邮件服务器下载邮件
  • IMAP (Internet Mail Access Protocol):允许用户直接在邮件服务器上管理邮件,包括移动、分类等等

5、DNS

DNS (Domain Name System) 的作用是 将域名解析为 IP 地址

DNS 是一个 分布式、层次化的数据库,里面储存着域名与 IP 地址的映射关系,称为 资源记录 (Resource Record)

资源记录的格式如下:(name, value, type, ttl),常见的资源记录如下:

  • A 记录:type 为 A,此时 name 表示域名,value 表示 IP 地址
  • NS 记录:type 为 NS,此时 name 表示域名,value 表示负责解析 name 的域名服务器的域名
  • SOA 记录:type 为 SOA,此时 name 表示域名,value 表示负责解析 name 的主域名服务器的域名
  • CNAME 记录:type 为 CNAME,此时 name 表示别名,value 表示标准名称

数据库按照层级的不同可分为四层:

  • 根域名服务器 (Root DNS Server):目前全球一共有 13 台根域名服务器
  • 顶级域名服务器 (Top-Level Domain DNS Server):提供 com、org、net、edu 等顶级域名的解析服务
  • 权威域名服务器 (Authoritative DNS Server):为特定的组织提供解析服务
  • 本地域名服务器 (Local DNS Server):严格来说不属于其中一层,每个 ISP 都有一个本地域名服务器

DNS 也是一种 应用层协议,当请求域名解析服务时,通常使用 DNS 控制通信规则,其依赖于 UDP 提供的服务

(1)通信过程

当客户端向域名服务器请求域名解析服务时,有两种查询方式,分别是迭代查询和递归查询

如果使用 迭代查询 (Iterated Query),那么通信过程如下:

如果使用 递归查询 (Recursive Query),那么通信过程如下:

(2)消息格式

DNS 使用 请求/回复格式,它们使用相同的报文

【 阅读更多计算机网络系列文章,请看 计算机网络复习

posted @ 2020-02-13 23:12  半虹  阅读(476)  评论(0编辑  收藏  举报