应用层

网络应用模型
应用层概述
- 应用层是计算机网络体系结构的最顶层,是设计和建立见算计网络的最终目的

客户/服务器方式(C/S)
- C/S 模型:有一个总是打开的主机称为服务器,它服务于许多来自其他客户机的主机请求,工作流程:
- 服务器处于接收请求的状态
- 客户机发出服务请求,并等待接收结果
- 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机

- C/S 主要特征:
- 客户和服务器是指通信中所涉及的两个应用进程
- 该方式所描述的是进程之间服务和被服务的关系
- 客户是服务请求方,服务器是服务提供方【最主要】
- 服务器总是处于运行状态,并等待客户的服务请求
- 服务器特点:
- 提供永久服务
- 服务器 IP 地址固定不变
- 客户端特点:
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态的 IP 地址
- 不与其他客户端直接通信
- 常见应用:
- 通常是服务集中型的,即应用服务集在网络中比客户计算机少得多的服务器计算机上
- 如:Web、文件传输协议 FTP、远程登录、电子邮件等
- 由于一台服务器计算机要为多个客户机提供服务,在
C/S应用中,常会出现服务器计算机跟不上众多客户机请求的情况
- 其他特点:
- 网络中各计算机的地位不平等,服务器可通过对用户权限的限制来达到管理客户机的目的
- 整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便
- 可扩展性不佳,受服务器硬件和网络带宽的限制,服务器支持的客户机数有限
对等方式(P2P)
- P2P 模型:
- 没有固定的服务请求者和服务提供者,分布在网络边缘各端系统中的应用进程是对等的,被称为对等方
- 对等方相互之间直接通信,每个对等方既是服务的请求者,又是服务的提供者

- 主要特点:
- 减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率
- 多个客户机之间可以直接共享文档
- 可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求
- 网络健壮性强,单个结点的失效不会影响其他部分的结点
- 缺点:在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存,影响整机速度
- 常见应用:
- 基于 P2P 的应用是服务分散型的,因为服务不是集中在少数几个服务器计算机中,而是分散在大量对等计算机中
- 如:P2P 文件共享、即时通信、P2P 流媒体、分布式存储等
域名系统 DNS
基本概念
- 城名系统 DNS:
- 是因特网使用的命名系统
- 将网址映射成 IP 地址
- 采用客户/服务器模型
- 其协议运行在 UDP 之上,使用 53 号端口
- 从概念上可将 DNS 分为三部分:层次域名空间、域名服务器和解析器
层次域名空间
-
域名:任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称
-
域:名字空间中一个可被管理的部分

-
顶级域名(Top Level Domain,TLD)分为以下三类:
- 国家顶级域名 nTLD:如:cn 表示中国,us 表示美国,uk 表示英国、等等
- 通用顶级域名 gTLD:如:com(公司企业)、net(网络服务机构)、org(非营利性组织)、int(国际组织)、edu(美国教育机构)、gov(美国政府部门)、mil(美国军事部门)
- 基础结构域名 arpa:用于反向域名解析,即 IP 地址反向解析为域名
-
二级域名:
- 在国家顶级域名下注册的二级域名均由该国家自行确定
- 例如,顶级域名为 jp 的日本,将其教育和企业机构的二级域名定为 ac 和 co,而不用 edu 和 com
- 我国则将二级域名划分为以下两类:
- 类别域名【7 个】:ac(科研机构)、com(工、商、金融等企业)、edu(教育机构)、gov(政府部门)、net(提供网络服务的机构)、mil(军事机构)和 org(非营利性组织)
- 行政区域名【34 个】:适用于我国的各省、自治区、直辖市,如:bj 为北京市、sh 为上海市、js 为江苏省

域名服务器
- 域名到 IP 地址的解析是由运行在域名服务器上的程序完成的
- 一个服务器所负责管辖的【或有权限的)】范围称为区【小于或等于域】,一个区中的所有结点必须是能够连通的
- 每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到 IP 地址的映射
- 每个域名服务器不但能够进行一些域名到 IP 地址的解析,而且还必须具有连向其他域名服务器的信息

根域名服务器

顶级域名服务器

权限域名服务器(授权域名服务器)

本地域名服务器

域名解析过程
- 域名解析:
- 指把域名转化为 IP 地址的过程
- 当客户端需要域名解析时,通过本机的 DNS 客户端构造一个 DNS 请求报文,以 UDP 数据报方式发往本地域名服务器
递归查询(Recursion,递归栈)

迭代查询(Iteration,逐个遍历)
- 流程:
- 主机 m.xyz.com 向其本地域名服务器 dns.xyz.com 发出 DNS 请求报文【递归查询】
- 本地域名服务器先查询本地缓存,若无,以 DNS 客户身份向根域名服务器发出查询解析报文【迭代查询】
- 根域名服务器判断该域名属于 .com 域,将对应的顶级域名服务器 dns.com 的 IP 地址返回给本地域名服务器
- 本地域名服务器向顶级域名服务器 dns.com 发出解析请求报文【迭代查询】
- 顶级域名服务器 dns.com 判断该域名属于 abc.com 域,将对应的权限服务器 dns.abc.com 的 IP 地址返回给本地域名服务器
- 本地域名服务器向权限域名服务器 dns.abc.com 发出解析请求报文【迭代查询】
- 权限域名服务器 dns.abc.com 将查询结果返回给本地域名服务器
- 本地域名服务器将查询结果保存到本地缓存,同时返回给主机

- 8 个步骤共要使用 8 个 UDP 报文
- 4 个查询报文、4 个回答报文
- 使用 UDP 是为了减少开销
- 本地域名服务器经过三次迭代查询后,从权限域名服务器 dns.abc.com 得到了域名 y.abc.com 主机的 IP 地址
- 高速缓存:
- 用来存放最近查询过的域名以及从何处获得域名映射信息的记录
- 提高 DNS 的查询效率,并减轻根域名服务器的负荷和减少因特网上的 DNS 查询报文数量
- 由于域名到 IP 地址的映射关系并不是永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并删除超过合理时间的项【例如,每个项目只存放两天】
- 用户主机在启动时从本地域名服务器下载域名和 IP 地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才向域名服务器查询
例题


文件传输协议 FTP
FTP 的工作原理
- 文件传送:将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中,是一项基本的网络应用
- FTP:因特网上最广泛的文件传输协议
- 提供交互式访问,允许客户指明文件的类型与格式,允许文件具有存取权限
- 屏蔽了各计算机系统的细节,适合在异构网络中的任意计算机之间传送文件
- FTP 功能:
- 提供不同种类主机系统【软硬件都可】之间的文件传输能力
- 以用户权限管理的方式提供用户对远程 FTP 服务器的文件管理能力
- 以匿名 FTP 的方式提供公用文件共享的能力
- FTP 工作方式:
- 采用客户/服务器的工作方式,使用 TCP 的可靠传输服务
- 一个 FTP 服务器进程可同时为多个客户进程提供服务
- FTP 服务器进程的组成:
- 一个主进程,负责接收新的请求
- 若干从属进程,负责处理单个请求
- FTP 服务器进程的工作步骤:
- 打开熟知端口 21 (控制端口),使客户进程能够连接上
- 等待客户进程发连接请求
- 启动从属进程处理客户进程发来的请求,从属进程对客户进程的请求处理完毕后即终止
- 回到等待状态,继续接收其他客户进程的请求【主进程与从属进程是并发执行的】
- 注意:
- FTP 服务器必须在整个会话期间保留用户的状态信息
- FTP 服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置
控制连接与数据连接
- FTP 在工作时使用两个并行的 TCP 连接
- 使用两个不同的端口号可以使协议更容易实现

控制连接
- 服务器监听端口号 21,等待客户连接,建立在这个端口上的连接称为控制连接
- 用来传输控制信息【如连接请求、传送请求等】
- 在整个会话期间一直保持打开状态
数据连接
- 服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后,就创建“ 数据传送进程”和“数据连接”
- 数据连接用来连接客户端和服务器端的数据传送进程
- 数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行
- 数据连接的两种传输模式:
- 主动模式 PORT:数据传送由服务器连接到客户端的端口
- 客户端连接到服务器的 21 端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令告知服务器
- 服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发送数据
- 被动模式 PASV:数据传送由客户端连接到服务器的端口
- 客户端要读取数据时,发送 PASV 命令到服务器,服务器在本地随机开放一个端口,并告知客户端
- 客户端再连接到服务器开放的端口进行数据传输

- 主动模式 PORT:数据传送由服务器连接到客户端的端口
例题


文件修改
- FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外 (Out-of-band) 传送的
- 使用 FTP 时,要修改服务器上的文件,就需要先将此文件传送到本地主机,然后将修改后的文件副本传送到原服务器,来回传送耗费很多时间
- 网络文件系统 NFS:
- 允许进程打开一个远程文件,并能在该文件的某个特定位置开始读写数据
- NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件
电子邮件
电子邮件系统的组成结构
- 电子邮件系统是一种异步通信方式
- 电子邮件系统的三个主要组成构件:用户代理,邮件服务器,以及电子邮件所需的协议
- 用户代理 UA:
- 用户与电子邮件系统的接口
- 至少应当具有撰写、显示和邮件处理的功能
- 通常情况下,UA 就是一个运行在 PC 上的程序【电子邮件客户端软件】
- 如 Outlook 和 Foxmail
- 邮件服务器:
- 电子邮件系统的基础设施
- 因特网上所有的
ISP都有邮件服务器 - 功能是发送和接收邮件,同时向发件人报告邮件传送的情况【已交付、被拒绝、丢失等】
- 以客户/服务器模式工作,并能同时充当客户和服务器
- 协议:
- 邮件发送协议:
- 用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件
- 如 SMTP
- 邮件读取协议:
- 用于用户代理从邮件服务器读取邮件
- 如 POP3,IMAP

- 邮件发送协议:
- 用户代理 UA:
- 注意:邮件是直接传送给接收端服务器的,而不会在互联网的某个中间邮件服务器落地
电子邮件格式与 MIMIE
电子邮件格式
- 电子邮件:信封 + 内容
- 邮件内容:首部【RFC 822 规定】+ 主体【用户自由撰写】
- 首部的关键字:
- From: 必填,由邮件系统自动填入
- To:必填,后面填入一个或多个收件人的电子邮件地址
- Subject:可选,是邮件的主题,反映了邮件的主要内容

多用途因特网邮件扩展 MIME
- SMTP 协议只能传送 7 位 ASCII 码文本数据,不能传送可执行文件或其他的二进制对象
- SMTP 不能满足传送多媒体邮件【例如带有图片、音频或视频数据】的需要
- 因此,提出了多用途因特网邮件扩展 MIME:
- 5 个新的邮件首部字段,包括 MIME 版本、内容描述、内容标识、传送编码和内容类型
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变

例题




发送和读取协议
SMTP(Simple Mail Transfer Protocol)
- 简单邮件传输协议 SMTP:一种提供可靠且有效的电子邮件传输协议
- 采用 C/S 方式
- 使用 TCP 连接
- 端口号 25
- 只支持传输 7 比特 ASCII 码内容
- SMTP 通信过程:
- 连接建立
- 邮件发送
- 连接释放

- 详细过程见王道 P281

POP3(Post Office Protocol 3)
- 邮局协议 POP:一个非常简单但功能有限的邮件读取协议,现在使用 POP3 版本
- 采用 C/S 模式
- 使用 TCP 连接
- 端口号 110
- 原始 POP3 协议在默认情况下传输登录密码是明文的,后续APOP机制和 TLS 协议基础上的 POP 是加密传输的
- 工作方式:
- 下载并保留:用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上,用户可再次从服务器上读取该邮件
- 下载并删除:邮件一旦被读取,就被从邮件服务器上删除
- 邮件是否保留在服务器上,其选择权主要在于客户端(Client),而非服务器。
IMAP(Interactive Message Access Protocol)
- 因特网报文存取协议 IMAP:
- 为用户提供了联机命令:用户在自己的计算机上就可以操控邮件服务器中的邮箱
- 创建文件夹
- 在不同文件夹之间移动邮件
- 在远程文件夹中查询邮件
- IMAP 服务器维护了会话用户的状态信息
- 允许用户代理之获取报文的某些部分【例如只读取一个报文的首部】或多部分 MIME 报文的一部分
- 使用 TCP 连接
- 端口号 143
- 适用于:
- 低宽带情况
- 包含很多音频或视频的大邮件
- 为用户提供了联机命令:用户在自己的计算机上就可以操控邮件服务器中的邮箱
基于万维网的电子邮件
- 用户浏览器与 Gmail 的邮件服务器用 HTTP 发送或接收邮件
- 仅在不同邮件服务器之间传送用 SMTP

万维网 WWW
WWW 的概念与组成结构
- WWW 是一个分布式,联机式的信息存储空间
- WWW 组成部分:
- 统一资源定位符 URL:
- 负责标识万维网上的各种文档
- 使每个文档在整个万维网的范围内具有唯一的标识符 URL
- 超文本传送协议 HTTP:
- 面向事务的应用层协议,使用 TCP 连接进行可靠传输
- 规定了浏览器和服务器之间的请求和响应的格式与规则
- 超文本标记语言 HTML:
- 一种文档结构的标记语言
- 使用一些约定的标记对页面上的各种信息【包括文字、声音、图像、视频等】、格式进行描述
- 统一资源定位符 URL:
- URL 的形式:
- <协议>://<主机>:<端口>/<路径>
- 如
https://ddy-ddy.com/login,https://172.16.86.81:80/login - 不区分大小写
- WWW 工作方式:采用 C/S 模式
- Web 用户使用浏览器【指定 URL】 与 Web 服务器建立连接,并发送浏览请求
- Web 服务器把 URL 转换为文件路径,并返回信息给 Web 浏览器
- 通信完成,关闭连接
超文本传输协议 HTTP
HTTP 的操作过程
- 从协议执行过程来说,浏览器要访问 WWW 服务器时:
- 首先要完成对 WWW 服务器的域名解析
- 一旦获得了服务器的 IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求

- 每个万维网站点都有一个服务器进程,它不断地监听 TCP 的端口 80【默认】,当监听到连接请求后便与浏览器建立 TCP 连接
- 然后,浏览器就向服务器发送请求获取某个 Web 页面的 HTTP 请求
- 服务器收到请求后,将构建所请求 Web 页的必需信息,并通过 HTTP 响应返回给浏览器
- 浏览器再将信息进行解释,然后将 Web 页显示给用户
- 最后,TCP 连接释放

HTTP 的特点
基本特点
- HTTP 使用面向连接的 TCP 作为传输层协议,保证了数据的可靠传输
- HTTP 协议本身是无连接的:通信双方在交换 HTTP 报文之前不需要先建立 HTTP 连接
- HTTP 协议是无状态的:
- 同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同
- 简化了服务器的设计,使其更容易支持大量并发的请求
- 在实际应用中,通常使用 Cookie 加数据库的方式来跟踪用户的活动【如记录用户最近浏览的商品等】
Cookie
- Cookie 是网站为了辨别用户身份,进行会话跟踪而存储在客户端上的数据
- Cookie 保存在浏览器【客户端】

HTTP/1.0 和 HTTP/1.1
- 非持续连接:
- HTTP/1.0 支持
- 每个网页元素对象的传输都需要单独建立一个 TCP 连接【第三次握手的报文段中捎带了客户对万维网文档的请求】
- 每次建立新的 TCP 连接都要分配缓存和变量,使万维网服务器的负担很重
- 持续连接:
- HTTP/1.1 默认使用
- 非流水线方式:
- 客户在收到前一个响应后才能发出下一个请求
- 服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源
- 每个对象都必须有 1 个 RTT 延迟
- 流水线方式:
- 客户可以连续发出对各个对象的请求,服务器就可连续响应这些请求
- 若所有的请求和响应都是连续发送的,则引用所有对象共计经历 1 个 RTT 延迟
- 减少了 TCP 连接中的空闲时间,提高了效率
- 服务器在每个 RTT 连续发送的数据量受到 TCP 发送窗口的限制
| 非持续连接 | 持续连接 | |
|---|---|---|
| 示意图 | ![]() | ![]() |
| 传输时间 | 2 RTT+ 文档的传输时间【一个 RTT 用于 TCP 连接,另一个 RTT 用于请求和接收文档】 | 1 RTT |
| Connection 状态 | 标志为 close | 标志为 keep-alive |
HTTP 的报文结构
-
HTTP 是面向文本的,其报文中的每一个字段都是一些 ASCII 码串,并且每个字段的长度都是不确定的
-
两类 HTTP 报文:
- 请求报文:从客户向服务器发送的请求报文
- 响应报文:从服务器到客户的回答

-
报文组成:
- 开始行:请求行/状态行
- 首部行
- 实部主体
-
请求报文中的方法:

-
请求报文实例:

-
响应报文中的状态码:

-
响应报文常见状态行:

HTTP 与 TCP 相结合的计算问题
非持续 HTTP/1.0 传输 1MSS 最少 RTT
参考 2024 年统考真题
- T=0 RTT (SYN): 客户端发起连接请求。
- T=0.5 RTT (SYN, ACK): 服务器响应连接请求。
- T=1 RTT (ACK, FIN): 客户端收到服务器响应后,完成三次握手(ACK),并立即发送 FIN 请求关闭其发送方向,表示没有更多数据。客户端短暂进入
ESTABLISHED后即进入FIN_WAIT_1。 - T=1.5 RTT (ACK (for FIN), FIN, Data (1MSS)): 服务器收到客户端的 FIN 后,立即发送对客户端 FIN 的 ACK,同时发送其所有的 1 MSS 数据,并附带自己的 FIN,表示服务器也完成了数据发送并请求关闭连接。服务器进入
CLOSE_WAIT后即进入LAST_ACK。 - T=2 RTT (ACK (final)): 客户端收到服务器的数据和 FIN 后,确认接收数据并发送最终的 ACK,确认服务器的 FIN。客户端进入
FIN_WAIT_2后进入TIME_WAIT。 - T=2.5 RTT: 服务器接收到客户端的最终 ACK,连接完全关闭。
结论: 在理想网络条件下,通过这种高度优化的 TCP 报文合并策略,从客户端发起连接到双方都完全关闭连接,所需的最小往返时间确实可以压缩到 2.5 RTTs。
拥塞控制问题
如果明确说了不考虑拥塞控制,则接收 HTML 页面和 assets 分别只需要 1RTT
如果需要考虑,则要按照慢启动流程计算。

