# 应用层

知识结构

  • 网络应用模型
    • B/S 模型;P2P 模型
  • 域名系统
    • 层次域名空间;域名服务器;域名解析过程
  • 文件传输协议
    • FTP 的工作原理;控制连接与数据连接
  • 电子邮件
    • 电子邮件系统的组成结构;电子邮件格式与 MIME;SMTP 与 POP3
  • 万维网
    • 万维网的概念和组成结构;HTTP

# 6.1 网络应用模型

# 6.1.1 B/S 模型

在客户/服务器模型中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求。其工作流程如下:

  • 服务器处于接收请求的状态
  • 客户机发出服务请求,并等待接收结果
  • 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机

客户/服务器模型的主要特点还有:

  • 网络中各计算机的地位不平等,服务器可以通过对用户权限的限制来达到管理客户机的目的
  • 客户机相互之间不直接通信。
  • 可拓展性不佳。受硬件和网络限制,单节点服务器支持的客户机数量有限。

在客户/服务器模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。

# 6.1.2 P2P 模型

P2P 模型的思想是整个网络中的传输内容不在被保存在中心服务器上,每个结点都同时具有下载、上传的功能,每个结点的地位都是对等的。

在 P2P 模型中,任意一对计算机——称为对等方(Peer),直接相互通信。

与 C/S 模型相比 P2P 模型的有点主要体现如下:

  • 减轻了服务器的计算压力
  • 多个客户机可以直接共享
  • 可拓展性好
  • 网络健壮性强。单个结点的失效不会影响其它部分的结点。

P2P 模型也有缺点,比如:

  • 客户机需要提供上传服务,影响本机性能
  • 从整个通信网络来看,同等传播效率下 P2P 占用流量更多,容易使网络变得非常拥塞

# 6.2 域名系统

域名系统是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名转换为便于机器处理的 IP 地址。

从概念上可将 DNS 分为 3 部分:层次域名空间、域名服务器和解析器

# 6.2.1 层次域名空间

任何一个连接到因特网的主机都有一个唯一的层次结构名称,即域名。

域是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可以继续划分为子域的子域。

每个域名都由标号序列组成,各标号用.符号隔开,举例:

www.pku.edu.cnwww.pku.edu.cn

域名的规则:

  • 标号中的英文不区分大小写
  • 标号中除(-)符号外不能使用其他的标点符号
  • 每个标号不超过 63 个字符,完整域名不超过 255 个字符
  • 级别最低的域名写在最左边,级别最高的顶级域名写在左右边。

# 6.2.2 域名服务器

因特网的域名系统被设计成一个联机分布式的数据库系统,并采用 C/S 模型。

域名到 IP 地址的解析过程是由运行在域名服务器上的程序完成的。

DNS 是一个在因特网上实现分布式数据库的精彩范例。主要有四种类型的域名服务器:

  • 根域名服务器。告诉本地域名服务器下一步找那个顶级域名服务器
  • 顶级域名服务器。
  • 授权域名服务器。管理域名的登记
  • 本地域名服务器。由 ISP 提供的最近的域名服务器

# 6.3.3 域名解析过程

域名解析是指把域名映射称为 IP 地址或把 IP 地址映射成域名的过程,前者称为正向解析,后者称为反向解析。

当客户端需要域名解析时,通过本地的 DNS 客户端构造一个 DNS 请求报文,以 UDP 数据报方式发往本地域名服务器。

域名解析主要采用递归与迭代相结合的查询:

  • 客户机向本地域名服务器发送 DNS 请求报文
  • 本地域名服务器接收请求后,查询本地缓存,若没有记录,则向根域名服务器发出解析请求
  • 根域名服务器收到请求后,判断域名所属的顶级域名服务器,将其地址返回
  • 本地域名服务器向顶级域名服务器发出解析请求
  • 顶级域名服务器收到请求后,判断域所属的授权域名服务器,将其地址返回
  • 本地服务器向授权域名服务器发出解析请求
  • 授权域名服务器收到请求后,将查询结果即目标主机地址返回
  • 本地域名服务器将查询结果保存在缓存,同时返回给客户机

# 6.3 文件传输协议

# 6.3.1 FTP 的工作原理

文件传输协议(File Transfer Protocol)是因特网上使用的最广泛的文件传输协议。

FTP 采用客户/服务器模型的工作方式,它使用 TCP 可靠的传输服务。

FTP 的服务器进程由两大部分组成:一个主进程,负责接收新的请求,若干个从属进程,负责处理单个请求。其工作步骤如下:

  • 打开端口 21
  • 等待客户进程发起连接请求
  • 启动从属进程来处理客户进程发来的请求,处理完毕后终止从属进程
  • 回到等待状态

# 6.3.2 控制连接与数据连接

FTP 在工作时使用两个并行的 TCP 连接:一个是控制连接(端口 21),一个是数据连接(端口 20)。

# 6.4 电子邮件

# 6.4.1 电子邮件系统的组成结构

自从有了因特网,电子邮件就在因特网上流行起来。

电子邮件是一种异步通信方式,通信时不需要双方同时在场。

电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱,收件人可以随时上网到自己使用的邮件服务器进行读取。

一个电子邮件系统有三个最主要的组成构件,即用户代理、邮件服务器和电子邮件使用的协议。

  • 用户代理(User Agent):用户与电子邮件系统的接口,方便用户发送和接收邮件
  • 邮件服务器:组成电子邮件系统的核心。功能是发送和接收邮件,同时报告邮件的情况。
  • 邮件发送和读取协议:发送协议用于用户代理向邮件服务器或服务器之间发送邮件,通常使用 SMTP。邮件读取协议用于用户代理从邮件服务器读取邮件,如 POP3。

# 6.4.2 电子邮件格式与 MIME

  1. 电子邮件格式

一个电子邮件分为信封和内容两大部分,邮件内容又分为首部和主体两部分。RFC 822 规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。

邮件内容的首部包含一些首部行,最重要的关键字是From:To:Subject:,首部与主体之间用一个空行进行分割。

From:[email protected]
To:[email protected]
Subject:Hello World

Here is body
  1. 多用途网际邮件扩充

由于 SMTP 只能传送一定长度的 ASCII 码,传送能力有限,因此提出了多用途网际邮件扩充(Multipurpose Internet Mail Extensions)。

MIME 主要包括以下三部分:

  • 5 个新的邮件首部字段,包括 MIME 版本,内容描述,内容标识,内容传送编码和内容类型。
  • 定义了许多邮件内容的格式
  • 定义了传送编码

# 6.4.3 SMTP 和 POP3

  1. SMTP

简单邮件传输协议(Simple Mail Transfer Protocol)是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的 SMTP 进程交换信息。

SMTP 用的是 TCP 连接,端口号为 25。SMTP 通信有以下三个阶段:

  • 连接建立
  • 邮件传送
  • 连接释放
  1. POP3

邮局协议(Post Office Protocol)是一个非常简单但功能有限的邮件读取协议,现在使用的是它的第 3 个版本 POP3。

POP 也是用客户/服务器的工作方式,在传输层使用 TCP,端口号为 110。

POP 有两种工作方式:“下载并保留”和“下载并删除”。后者会在邮件被读取时从邮件服务器上删除。

  1. IMAP

另一个邮件接收协议是网际报文存取协议(Internet Message Access Protocol),它要比 POP 复杂得多。

# 6.5 万维网

# 6.5.1 WWW 的概念与组成结构

万维网(World Wide Web)是一个资料空间,在这个空间:一样有用的事物称为一样“资源”,并由一个全域“统一资源定位符”(URL)来标识。

万维网的内核部分是由三个标准构成的:

  • 统一资源定位符(URL)。负责标识万维网上的文档资源。
  • 超文本传输协议(HTTP)。一个应用层协议,是万维网客户端和服务端交互所必须遵守的协议。
  • 超文本标记语言(HTML)。一种文档结构的标记语言。

# 6.5.2 HTTTP

HTTP 定义了浏览器怎么向服务器请求万维网文档,以及服务器怎么把文档传送给浏览器。

  1. HTTP 的操作过程

从协议执行过程来说,浏览器要访问 WWW 服务器时,首先要完成对域名的解析,一旦获得了服务器的 IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求。

每个万维网站点都有一个服务器进程,它不断地监听 TCP 的端口 80(默认),当监听到连接请求后便与浏览器建立连接。

当 TCP 连接建立后,浏览器就向服务器发送请求获取某个 Web 页面的 HTTP 请求。

服务器收到 HTTP 请求后,将构建所请求的 Web 页面所需的信息,通过 HTTP 相应返回给浏览器。

浏览器再将信息进行解释,然后将 Web 页面显示给用户。

最后,TCP 连接释放。

  1. HTTP 的特点

HTTP 是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的相应与第一次被访问时相同。

HTTP 的无状态特性简化了服务器的设计,是服务器更容易支持大量并发的 HTTP 请求。

在实际应用中,通常会使用 Cookie 来标记用户的客户端,用数据库跟踪和存储用户的行为。

  1. HTTP 的报文结构

HTTP 是面向文本的,因此报文中的每个字段都是一些 ASCII 码串,并且每个字段的长度都是不确定的。

HTTP 报文分为请求报文和响应报文,它们都由三个部分组成。

  • 开始行:用于区分请求报文还是响应报文
  • 首部行:用来说明浏览器、服务器或报文主体的一些信息
  • 实体主体:存储需要传输的数据实体