应用层

官方信息技术老师·32 页·深入(追求细节与边界)·0 次浏览·2 天前
协议设计性能边界安全攻防HTTP演进

计算机网络应用层

拆解 HTTP/3、DNS、TLS 的协议抉择与性能安全边界

按 空格/→ 演示下一步

1 / 32 页

全部页面点击任意一页,跳回舞台从这页播放

协议设计性能边界安全攻防HTTP演进

计算机网络应用层

拆解 HTTP/3、DNS、TLS 的协议抉择与性能安全边界

1第 1 页 · 计算机网络应用层

什么是应用层

上一节我们看到了应用层在协议栈最顶端。今天要追问:它的本质到底是什么?边界划在哪?为什么不能并入传输层?

服务接口层
不传数据,而是替应用进程调用网络能力的入口
交换语义
规定消息格式、字段含义、时序和出错处理,即协议
进程到进程
通信主体是两端应用进程,靠端口号寻址而非主机
对下层透明
不关心包怎么路由、位怎么编码,那是下面几层的事
餐厅服务员对应 →应用层

顾客告诉服务员想吃什么,服务员转给厨房;你不用直接找厨师

2第 2 页 · 什么是应用层

应用层协议的核心要素

你已经知道应用层是进程间通信的规则集合。但一个具体的应用协议,比如 HTTP、DNS、gRPC,到底由哪些要素决定?它们表面千差万别,骨架却是同一套。

协议定义
语法规定数据格式、语义规定字段含义、时序规定交互顺序,三者缺一不可
消息格式
HTTP用文本+分隔符,DNS用二进制+固定头部;变长字段必须自描述长度
传输层选择
HTTP/FTP选TCP求可靠,DNS/实时音视频选UDP求速度;HTTP/3反过来跑在UDP上
合同与寄送系统对应 →应用协议三要素

条款=协议定义、文档结构=消息格式、快递vs挂号信=传输选择

3第 3 页 · 应用层协议的核心要素

C/S 与 P2P 架构对比

两者都能支撑多用户通信,但角色分配与可扩展性截然不同,常被初学者混淆。

C/S 客户端/服务器
  • 一台中心服务器,多个客户端向它请求
  • 服务器压力大,扩展靠升级中心节点
  • 典型:Web 网站、电子邮件、网游大厅
  • 客户端间通信须经服务器中转
P2P 对等网络
  • 无中心节点,每个节点既请求也服务
  • 节点越多总带宽越高,扩展性极佳
  • 典型:BT 下载、Skype 早期、区块链
  • 节点间直接交换数据,无需中转
需要中心管控选 C/S,大规模分发或去中心化协作选 P2P;现代应用常二者混合。
4第 4 页 · C/S 与 P2P 架构对比

端口号:服务的门牌号

服务器常常同时跑着 Web、数据库、邮件等多个服务。数据包到达主机后,操作系统怎么知道该交给谁?答案就是端口号——它就是每项服务在主机上的门牌号。

端口号本质
16 位无符号整数,范围 0~65535,标识主机上一个具体的进程或服务
熟知端口 0–1023
IANA 固定分配给系统核心服务,如 HTTP 80、HTTPS 443、SSH 22
注册端口
范围 1024–49151,用户进程向 IANA 注册后使用,如 MySQL 3306、Redis 6379
动态/私有端口
范围 49152–65535,客户端临时分配,会话结束即回收
大楼的楼号 + 房间号对应 →IP 地址 + 端口号

IP 找到主机(大楼),端口定位到具体服务(房间)

5第 5 页 · 端口号:服务的门牌号

应用层在分层体系中的位置

从上往下看一次 HTTP 请求,每过一层就给自己包一层头送下去。

图解渲染中…
A1用户能直接感知的协议都在这一层A5从这一层开始就是电信号/光信号的世界
6第 6 页 · 应用层在分层体系中的位置

Socket 编程概述

用微信发消息、浏览器开网页——这些动作背后,程序到底怎么'开口说话、竖起耳朵'?中间需要一个编程接口——Socket(套接字)。

本质是 API
操作系统给应用进程提供的网络编程接口(系统调用)
端点唯一标识
一个 Socket 由「IP 地址 + 端口号」共同确定
两类基本操作
应用程序用 send() 发数据、recv() 收数据
屏蔽下层细节
TCP 握手、分段重传、IP 路由都交给 OS
墙上的电源插座对应 →Socket 接口

插座一头接电器(应用),一头接电网(网络),电器只管插上取电,不用管电怎么发电、变压、传输

7第 7 页 · Socket 编程概述
DNS域名解析网络协议互联网基础

域名系统 DNS

看清 DNS 完整查询链路,掌握递归与迭代查询、缓存策略与安全扩展

8第 8 页 · 域名系统 DNS

DNS 的核心作用

你想访问 baidu.com,但电脑只认 220.181.38.x 这种数字 IP。这中间怎么搭桥?DNS 的核心作用就藏在它的四个机制里。

正向解析
域名 → IP 地址,用户访问网站时最常用的查询方向
反向解析
IP → 域名,常用于邮件反垃圾、日志审计等验证场景
分布式分层查询
根域 → 顶级域 → 权威域逐级下放,避免单点压力
缓存与冗余
本地缓存减少重复查询,任播与多副本提升可用性
114 查号台对应 →DNS 系统

你报人名(域名),查号台查档告诉你号码(IP);查不到时总台转给专业分台(分层查询)

9第 9 页 · DNS 的核心作用

域名空间的层次结构

从根域向下生长:每个节点是上一级的子域,叶节点拼出完整域名 FQDN。

图解渲染中…
A1DNS 树最顶层,全球 13 组根服务器B1顶级域,按用途或地理划分C1二级域,需要注册购买D1三级子域,所有者自行分配
10第 10 页 · 域名空间的层次结构

域名分类:根、顶级、二级

域名空间是个倒挂的树,根在最顶端,往下一层层分叉。这页我们聚焦这棵树上最重要的三层:根、顶级、二级,看它们各管什么、谁来管。

根域名
整个域名树的顶点,用一个点「.」表示;ICANN 授权、VeriSign 维护根区,全球 13 套根服务器集群协同解析
顶级域名 TLD
紧邻根的一级;分 gTLD(.com/.org)、ccTLD(.cn/.uk)、新顶级域(.app/.blog)
二级域名
顶级域名左侧那段;通常就是用户向注册商申请并拥有的部分
从右向左逐层深入
完整域名 www.example.com. 从根→.com→example.com→www,范围逐级缩小
国家-省-市的邮政地址对应 →根-顶级-二级域名

都从大范围缩到小范围;只是域名反着写,从右往左

11第 11 页 · 域名分类:根、顶级、二级

递归查询 vs 迭代查询

客户端只发一次请求,背后却跨过多个服务器——这两种查询分别在哪个层级、以什么方式工作?

递归查询
  • 发起方:客户端 → 本地 DNS 服务器
  • 责任归属:被问者负责查到最终结果
  • 返回内容:要么完整答案,要么报错
  • 客户端负担:轻,只发一次就等结果
迭代查询
  • 发起方:本地 DNS → 根/顶级域/权威域
  • 责任归属:每级只回答「该问谁」
  • 返回内容:返回下一级服务器的地址
  • 查询方负担:重,需多次查询再自行汇总
客户端到本地 DNS 走递归(求省事),本地 DNS 到各级服务器走迭代(分摊压力)——实际解析是「递归外包 + 迭代执行」的协作。
12第 12 页 · 递归查询 vs 迭代查询

域名解析的完整流程

沿箭头方向看消息流动,分两段:上半是递归查询,下半是迭代查询。

图解渲染中…
B用户主机,先查本地缓存和hosts文件LISP提供的本地DNS,替你跑腿问R全球13组根服务器,只指路不给答案T管理.com等顶级域,指路到权威服务器
13第 13 页 · 域名解析的完整流程

DNS 记录类型详解

上一步我们搞清楚了解析器怎么问到答案,但被问的服务器到底返回什么?那就是 DNS 记录,不同类型对应不同需求。

A 记录
把域名指向一个 IPv4 地址,最常用的记录类型
AAAA 记录
把域名指向一个 IPv6 地址,是 A 的升级版
CNAME 记录
把一个域名别名指向另一个域名,常用于 CDN
MX 记录
指定邮件服务器,告诉别人邮件该送到哪里
其他常用记录
NS 权威、TXT 文本、SRV 服务位置等
办公室前台登记表对应 →DNS 记录类型

A 是电话号码、MX 是收件地址、CNAME 是转隔壁张工,不同需求查不同栏目

14第 14 页 · DNS 记录类型详解

DNS 缓存机制

假设你每天访问 baidu.com 100 次,每次都从根问起,要等多久?

缓存层级
浏览器、操作系统、本地 DNS 服务器各有一层缓存
命中优先
查到缓存就直接返回,不再向上级服务器发请求
TTL 有效期
每条 DNS 记录带一个过期时间,过了就重新查
TTL 的取舍
太长 IP 变更不更新;太短又浪费查询资源
手机通讯录对应 →DNS 缓存

记过的号码直接拨,不查 114;TTL 就是你多久整理一次号码本

15第 15 页 · DNS 缓存机制
应用层电子邮件SMTP协议机制

电子邮件系统

搞懂发送、传输、接收背后的协议与交互机制

16第 16 页 · 电子邮件系统

邮件系统的组成架构

沿箭头看邮件旅程:从发件人→UA→发件服务器→SMTP 转发→收件服务器→邮箱→POP3/IMAP 拉取→收件人 UA。

图解渲染中…
BUA 邮件客户端:读写邮件的程序,如 OutlookC发件服务器:用户所属的 MTA,负责对外发送D收件服务器:对方 MTA,邮件暂存于此E用户邮箱:服务器为每位用户开的存储区
17第 17 页 · 邮件系统的组成架构

SMTP:发送邮件的协议

上一页我们看到了邮件系统的"零件":MUA、MTA、MDA。那发件人的 MTA 怎么把邮件交到收件人的 MTA 手上?它们之间需要一套"对话规则"——这就是 SMTP。

"推"式协议
发件方主动把邮件推到收件方服务器,对应取邮件的 POP3/IMAP
基于 TCP 端口 25
先建立可靠连接再传邮件,确保内容不丢不乱
文本命令交互
命令是 ASCII 字符串(如 HELO、MAIL FROM),人类可读
命令-响应模式
每条命令服务器回复三位状态码,250 表示成功
典型会话流程
HELO→MAIL FROM→RCPT TO→DATA→正文→QUIT
邮局柜台寄件对应 →SMTP 会话

你按顺序报发件人、收件人、交包裹、离开;柜台每步回应确认

18第 18 页 · SMTP:发送邮件的协议

POP3 与 IMAP 对比

收邮件到底下载到本地还是留在服务器?选 POP3 还是 IMAP,决定了你的多设备邮件体验。

POP3
  • 下载到本地,可选删除服务器副本
  • 状态不同步,以单设备为主
  • 离线可访问全部已下载邮件
  • 服务器负担轻,协议简单
IMAP
  • 邮件常驻服务器,本地仅缓存
  • 标记、已读实时同步多端
  • 离线只能看缓存的部分邮件
  • 服务器负担重,协议功能丰富
多设备协同选 IMAP,单机离线选 POP3。今天主流邮件客户端默认 IMAP。
19第 19 页 · POP3 与 IMAP 对比

MIME 扩展邮件能力

上一页讲了 SMTP 发送流程。那邮件里能直接放图片、PDF,这些是怎么做到的?早期 SMTP 只认 7-bit 纯英文文本,连中文和二进制都发不了。让邮件突破限制的,是 MIME。

SMTP 的先天局限
早期协议只支持 7-bit ASCII 文本,中文、图片、二进制文件都无法传输
MIME 的核心思路
在 SMTP 之上加一层:内容类型声明 + 编码转换,让任意数据都能通过
Content-Type
标识内容是什么,如 image/jpeg、text/html、application/pdf
Base64 编码
每 3 字节二进制转 4 个 ASCII 字符,兼容老协议传输通道
Multipart 结构
用 boundary 字符串分隔多个 part,一封邮件可同时装多类内容
寄快递对应 →MIME 邮件

面单=Content-Type 说明寄什么;泡沫膜=Base64 包裹易碎品;分格箱=Multipart 装多件

20第 20 页 · MIME 扩展邮件能力
DNS 解析邮件协议Socket协议设计

万维网 WWW

看清 DNS 解析、邮件收发与 Socket 编程的设计取舍与实现细节

21第 21 页 · 万维网 WWW

WWW 的基本概念

邮件能发图片和附件,但收件人读到的还是一份孤立的文档。如果能让他点一下就跳到另一份文档呢?这就是万维网(WWW)要解决的核心问题——用超链接把分散在各地的文档织成一张可点击的网。

网页
存放在 Web 服务器上的资源文档,内容可以是文字、图片、音频、视频等
超链接
嵌入网页中的可点击元素,指向另一个 URL,实现文档间跳转
Web 浏览器
客户端软件,职责是请求资源、解析 HTML、渲染页面并响应点击
WWW 是应用
WWW 只是跑在 Internet 上的一个应用服务,不是网络本身
实体图书馆对应 →WWW 三大要素

馆里的书是网页,书末的「参见第X页」是超链接,读者本人就是浏览器

22第 22 页 · WWW 的基本概念

URL 的组成结构

从左到右拆解 URL 四段:协议、主机、端口、路径,决定"怎么通信、找谁、哪个门、要啥资源"。

图解渲染中…
Ascheme 协议,如 https、http、ftpBhost 主机名,IP 或域名Cport 端口号,默认 80/443 可省略Dpath 路径,定位服务器内资源
23第 23 页 · URL 的组成结构

HTTP 协议工作原理

请求-响应模型的交互流程

HTTP 协议工作原理
请求-响应模型的交互流程
24第 24 页 · HTTP 协议工作原理

HTTP 版本演进对比

HTTP/1.0 到 2.0 看似只改版本号,实则是从「一问一答」到「双向高速公路」的范式跃迁。

HTTP/1.1
  • 持久连接:单 TCP 连接可复用传多请求
  • 并发靠多连接:队头堵塞仍未根除
  • 文本协议:报文易读但解析开销大
  • 头部明文:每次请求重复传输全字段
HTTP/2.0
  • 多路复用:单连接并行传输多个流
  • 流独立:帧交错传输、无队头堵塞
  • 二进制分帧:机器友好、解析高效
  • HPACK 压缩:头部差量编码去冗余
1.1 是兼容性基本盘;2.0 性能碾压,尤其高并发场景。新项目首选 2.0,遗留系统稳住 1.1。
25第 25 页 · HTTP 版本演进对比

HTTP 消息格式

请求行、首部字段与消息体的结构

HTTP 消息格式
请求行、首部字段与消息体的结构
26第 26 页 · HTTP 消息格式
FTP 传输DHCP 分配报文细节

其它应用层协议

拆解 FTP、DHCP 等协议的工作机制、报文格式与配置细节

27第 27 页 · 其它应用层协议

FTP 文件传输协议

HTTP、DNS、邮件这些协议,一条连接来回说话就够。FTP 不一样——它同时开两条通道:一条下命令,一条搬文件。这种双通道设计在应用层独此一家。

控制通道
端口 21 始终连接,传输命令和响应(如 USER、RETR)
数据通道
端口 20,仅在传文件时建立,搬运实际数据流
双通道独立
控制连接贯穿会话,数据连接每次传输新建一次
主动/被动模式
谁发起数据连接方向不同,决定 NAT/防火墙能否穿透
餐厅点餐与上菜对应 →FTP 双通道

服务员(控制)一直在前台听指令,跑菜员(数据)每次只在上菜时出现

28第 28 页 · FTP 文件传输协议

FTP 主动模式 vs 被动模式

FTP 有两条连接:控制连接都一样,差别在数据连接谁来发起——这是最常被混淆的点。

主动模式 PORT
  • 服务器主动连客户端(PORT 命令告知端口)
  • 数据连接:服务器 20 端口 → 客户端随机端口
  • 防火墙障碍在客户端:拦的是入站连接
  • 适用:客户端无防火墙,如早期企业内网
被动模式 PASV
  • 客户端主动连服务器(PASV 命令请服务器开端口)
  • 数据连接:客户端随机端口 → 服务器随机端口
  • 防火墙障碍在服务器:拦的是入站连接
  • 适用:客户端在 NAT/防火墙后,是当今默认模式
客户端在公网或防火墙后,默认选被动模式;主动模式已基本被淘汰,只在教学和特定内网场景中出现。
29第 29 页 · FTP 主动模式 vs 被动模式

DHCP 动态主机配置

上一节我们用 DNS 把域名翻译成 IP。但 IP 地址本身从哪来?给每台新设备手动配 IP 既繁琐又容易冲突——DHCP 让网络自动分发地址。

Discover 广播
客户端广播寻找网络中的 DHCP 服务器
Offer 应答
服务器回应可分配的 IP 地址
Request 请求
客户端选定某个 IP 并发出请求
ACK 确认
服务器确认分配,租约正式生效
租约机制
IP 有租期,到期前续约,过期回收
酒店办入住对应 →DHCP 分配IP

客人广播找前台、客房回应、客人选定、前台发房卡,房间有退房时间

30第 30 页 · DHCP 动态主机配置

应用层知识点回顾

  • 应用层本质:进程间的端到端通信约定
  • DNS 三件套:层次命名、分布式解析、缓存
  • HTTP 演进主线是从文本到二进制的性能优化
  • 邮件系统是协议分工协作的经典范本
  • C/S 与 P2P 是中心化与去中心化的取舍
延伸主题:Socket 编程实战QUIC 与 HTTP/3 详解应用层安全:TLS 握手
31第 31 页 · 应用层知识点回顾

课后思考

先凭直觉回答,再看参考答案。好的思考题没有标准答案,只有更深的追问。

1DNS 缓存为什么要分散在浏览器、操作系统、递归服务器等多个层级?如果只保留其中一层会付出什么代价?

参考答案可从查询时延、根服务器负载、命中率和失效传播四个角度切入。少一层意味着要么用户等更久,要么根/权威服务器扛不住全网查询。

2HTTP/3 把可靠性、流控塞进 QUIC,几乎绕开 TCP。如果应用层可以自带传输能力,分层模型的边界会重新画在哪里?

参考答案分层本是为关注点分离。当协议栈自带多层能力时,层变成了能力组合。可以想想 gRPC、Kafka 协议栈是怎么做的。

3SMTP 三十多年没被淘汰,但新协议一直试图取代它都没成功。从架构角度看,发送与接收分两个协议的设计为什么这么顽固?

参考答案关键在角色不对称:发送是任意客户端→固定服务器,接收是固定服务器→任意客户端。推/拉模型天然不同,强行统一只会增加复杂度。

32第 32 页 · 课后思考