4133 字
21 分钟
网络:应用层

在 TCP/IP 四层模型中,应用层位于最上层,直接面向网络应用和用户需求。

应用层规定通信双方交换什么数据、数据具有什么含义,以及应该按照什么规则进行交互。

常见的 HTTP、HTTPS、DNS、DHCP、SSH 等协议都属于这一层。理解应用层之后,TCP/IP 四层模型就形成了一条完整的数据通信链路。

应用层是什么#

TCP/IP 四层模型:

┌────────────────────┐
│ 应用层 │
├────────────────────┤
│ 传输层 │
├────────────────────┤
│ 网际层 │
├────────────────────┤
│ 网络接口层 │
└────────────────────┘

前面已经介绍:

网络接口层
↓
如何在当前链路上传输
网际层
↓
如何跨网络寻找目标
传输层
↓
如何在主机之间进行进程通信

而应用层进一步解决:

通信双方到底要交换什么信息,以及应该如何理解这些信息。

例如:

浏览器 ↔ Web Server

双方需要约定:

请求是什么格式
响应是什么格式
状态码是什么意思
请求头怎么表示
数据怎么表示

这就是应用层协议的作用。

因此:

应用层
↓
定义通信规则和数据语义
传输层
↓
负责进程之间的数据传输
网际层
↓
负责 IP 寻址和转发
网络接口层
↓
负责具体链路传输

应用层与应用程序#

需要注意:

应用层协议 ≠ 应用程序本身。

例如:

Chrome
Firefox
curl

这些是应用程序。

而:

HTTP

是应用层协议。

可以理解成:

应用程序
│
▼
应用层协议
│
▼
TCP / UDP
│
▼
IP
│
▼
Ethernet

例如:

Chrome
↓
HTTP
↓
TCP
↓
IP
↓
Ethernet

因此:

应用层协议规定“怎么交流”,应用程序则负责利用这些协议完成具体功能。


协议与数据格式#

应用层协议通常需要定义:

消息格式
字段含义
请求方式
响应方式
错误处理
状态
数据编码

例如一个 HTTP 请求:

GET /index.html HTTP/1.1
Host: example.com

这里不仅有:

请求方法

还有:

资源路径
协议版本
请求头

服务器必须按照 HTTP 的规则解释这些字段。

所以:

应用层协议的核心是建立双方都能够理解的通信语义。


应用层协议的分类#

应用层协议种类非常多,可以按用途粗略划分:

Web
├── HTTP
└── HTTPS
名称解析
└── DNS
地址配置
└── DHCP
远程管理
└── SSH
文件传输
├── FTP
└── TFTP
邮件
├── SMTP
├── POP3
└── IMAP
时间同步
└── NTP

本文重点介绍:

HTTP
HTTPS
DNS
DHCP
SSH

它们在实际 Linux / 运维工作中非常常见。


HTTP#

什么是 HTTP#

HTTP(Hypertext Transfer Protocol)是 Web 中最重要的应用层协议之一。

它用于:

客户端
↕
服务器

之间交换资源。

典型场景:

浏览器
│
│ HTTP Request
▼
Web Server
│
│ HTTP Response
▼
浏览器

HTTP 是一种:

请求—响应(Request / Response)协议。


HTTP 请求#

一个典型 HTTP 请求可以简化为:

Request Line
Headers
Blank Line
Body

例如:

GET /index.html HTTP/1.1
Host: example.com
User-Agent: curl/8.x
Accept: */*

其中:

GET
↓
请求方法
/index.html
↓
目标资源
HTTP/1.1
↓
协议版本

HTTP 方法#

常见 HTTP 方法包括:

GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS

最常见的有:

GET#

通常用于:

获取资源。

例如:

GET /index.html HTTP/1.1

POST#

通常用于:

向服务器提交数据或触发某种处理。

例如:

POST /login HTTP/1.1

请求体可能包含:

username
password

等数据。


PUT#

通常用于:

创建或整体更新某个资源。


PATCH#

通常用于:

对资源进行部分修改。


DELETE#

通常用于:

删除资源。


HTTP 响应#

服务器处理请求后会返回:

Response Status
Headers
Blank Line
Body

例如:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>
...
</html>

其中:

200
↓
状态码
OK
↓
原因短语

HTTP 状态码#

HTTP 状态码通常分为:

1xx
2xx
3xx
4xx
5xx

可以简单理解为:

状态码范围含义
1xx信息响应
2xx请求成功
3xx重定向
4xx客户端请求问题
5xx服务器处理问题

常见状态码:

200 OK
201 Created
204 No Content
301 Moved Permanently
302 Found
304 Not Modified
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout

其中尤其值得注意:

4xx

并不简单等于:

“网络有问题”。

它表示服务器收到了请求,但请求通常存在客户端侧的问题。

而:

5xx

通常表示服务器端处理过程中出现问题。


HTTP Header#

HTTP 中大量信息通过:

Header(首部)

传输。

例如:

Host: example.com
Content-Type: application/json
Content-Length: 123
User-Agent: curl/8.x
Authorization: Bearer ...

常见作用包括:

身份信息
内容类型
内容长度
缓存
压缩
连接控制
认证

因此:

HTTP Message
│
├── Start Line
├── Headers
├── Blank Line
└── Body

是理解 HTTP 报文结构的重要基础。


HTTP Body#

Body 是真正承载内容的区域。

例如:

HTML
JSON
图片
文件

都可以作为 HTTP Body。

例如:

Content-Type: application/json
{
"name": "Alice"
}

这里:

Content-Type

告诉接收方:

Body 中的数据是什么类型。


HTTP 与 TCP#

在传统 HTTP/1.1 和 HTTP/2 部署中,HTTP 通常运行在:

TCP

之上。

可以简化成:

HTTP
↓
TCP
↓
IP
↓
Ethernet

因此:

HTTP

负责:

Web 通信规则

而:

TCP

负责:

可靠传输

两者是不同层次的协议。


HTTPS#

什么是 HTTPS#

HTTPS 可以理解为:

HTTP over TLS

即:

HTTP
↓
TLS
↓
TCP

TLS 提供:

加密
身份认证
完整性保护

因此:

HTTP
↓
明文应用层协议
HTTPS
↓
HTTP + TLS

HTTPS 并不是一个与 HTTP 完全无关的新应用层协议,而是使用 TLS 对 HTTP 通信进行保护。


HTTPS 的基本过程#

可以简化成:

Client
│
│ TCP Connection
▼
Server
│
│ TLS Handshake
▼
建立安全通道
│
▼
HTTP Request / Response

因此:

TCP
↓
建立传输连接
TLS
↓
建立安全通信通道
HTTP
↓
交换 Web 数据

TLS#

TLS(Transport Layer Security)是一种安全协议,用于在通信双方之间建立安全通道。

它主要提供:

机密性
完整性
身份认证

其中:

机密性#

防止通信内容被第三方直接读取。

明文
↓
加密
↓
密文

完整性#

防止数据在传输过程中被悄悄修改。

可以理解为:

发送数据
↓
完整性保护
↓
接收端验证

身份认证#

通常通过:

数字证书

帮助客户端验证服务器身份。

因此浏览器访问:

https://example.com

时,会涉及:

TLS
+
Certificate

等机制。


DNS#

什么是 DNS#

DNS(Domain Name System)用于:

将域名映射为网络中的地址信息。

例如:

www.example.com
↓
DNS
↓
93.184.216.34

这样用户不需要记住:

93.184.216.34

而可以使用:

www.example.com

为什么需要 DNS#

人类更容易记住:

www.example.com

而网络通信需要:

IP Address

因此 DNS 提供了:

Domain Name
↓
DNS
↓
IP Address

但需要注意:

DNS 并不只是简单的“域名转 IP”。

它实际上是一个分布式的名称系统。

DNS 还可以提供:

A
AAAA
CNAME
MX
NS
TXT
SRV

等不同类型的记录。


DNS 查询#

例如客户端需要解析:

www.example.com

可能会向 DNS 服务器发起:

DNS Query

查询:

www.example.com

的:

A

记录。

DNS Server 返回:

93.184.216.34

可以简化成:

Client
│
│ Query
▼
DNS Resolver
│
│ Answer
▼
Client

DNS Record#

常见 DNS 记录:

类型作用
A域名 → IPv4
AAAA域名 → IPv6
CNAME别名
MX邮件服务器
NS权威名称服务器
TXT文本信息
SRV服务位置

例如:

example.com
│
├── A → 192.0.2.1
├── AAAA → 2001:db8::1
└── MX → mail.example.com

DNS 的层次结构#

DNS 并不是一个:

全世界只有一台服务器

而是一个分布式层级系统。

可以简化为:

Root
│
├── .com
├── .org
└── .net
│
▼
example.com
│
▼
www.example.com

其中:

Root
↓
根 DNS
TLD
↓
顶级域
Authoritative DNS
↓
权威 DNS

DNS 缓存#

如果每次访问:

www.example.com

都从根服务器开始查找,效率会非常低。

因此 DNS 大量使用:

缓存(Caching)

可以理解成:

第一次查询
↓
DNS Resolution
↓
得到结果
↓
缓存
再次查询
↓
直接使用缓存

DNS 记录通常存在:

TTL

表示缓存可以保留多长时间。

因此修改 DNS 后并不一定能够立即在所有网络中看到变化。


DNS 与 TCP / UDP#

传统 DNS 查询最常见的传输方式是:

UDP
53

但 DNS 也可以使用:

TCP
53

TCP 在 DNS 中并不是简单的“旧协议”。

例如:

响应过大
区域传送
特定 DNS 场景

都可能使用 TCP。

此外,现代 DNS 还存在:

DoT
DoH
DoQ

等更现代的传输方式。

其中:

DoT
↓
DNS over TLS
DoH
↓
DNS over HTTPS
DoQ
↓
DNS over QUIC

它们的重点是:

对 DNS 通信本身进行不同形式的传输或加密封装。


DHCP#

什么是 DHCP#

DHCP(Dynamic Host Configuration Protocol)用于:

向网络中的主机动态提供网络配置。

例如新设备接入网络后,可能需要获得:

IP 地址
子网掩码
默认网关
DNS 服务器
租期

这些配置可以通过 DHCP 自动获取。


DHCP 的基本过程#

IPv4 DHCP 初始化通常可以概括成经典的:

DHCP Discover
↓
DHCP Offer
↓
DHCP Request
↓
DHCP ACK

常被记成:

DORA

即:

Discover
Offer
Request
ACK

DHCP Discover#

新接入网络的客户端可能还没有自己的 IP。

于是发送:

DHCP Discover

寻找 DHCP Server。

可以理解成:

Client
│
│ 我需要网络配置
▼
广播 / DHCP Server

DHCP Offer#

DHCP Server 提供一个配置方案:

IP
Subnet Mask
Gateway
DNS
Lease Time

例如:

IP = 192.168.1.100
Mask = 255.255.255.0
Gateway = 192.168.1.1
DNS = 192.168.1.1

DHCP Request#

客户端表示:

我希望使用这个配置。


DHCP ACK#

服务器确认:

配置正式分配给你。

于是客户端获得:

IP Address
+
其他网络配置

DHCP 租约#

DHCP 并不是永久把 IP 地址交给客户端。

通常会存在:

Lease(租约)

例如:

IP
192.168.1.100
Lease
8 hours

到一定时间后客户端需要:

续租

否则地址最终可能重新进入地址池。

因此:

DHCP
↓
动态地址管理

非常适合:

家庭网络
办公网络
大型局域网
云环境

SSH#

什么是 SSH#

SSH(Secure Shell)是一种用于安全远程登录和管理的协议。

典型:

Client
│
│ SSH
▼
Server

例如:

Terminal window
ssh user@192.168.1.100

可以建立远程 Shell 会话。

SSH 通常运行在:

TCP 22

之上。


SSH 能做什么#

SSH 不只是:

远程登录

还可以进行:

远程命令执行
文件传输
端口转发
隧道

例如:

Terminal window
ssh user@server

远程执行:

Terminal window
ssh user@server "systemctl status nginx"

也可以通过:

Terminal window
scp
rsync
sftp

等工具完成文件传输。


SSH 认证#

SSH 常见认证方式包括:

密码认证
公钥认证

公钥认证可以理解为:

Client
├── Private Key
└── Public Key

服务器保存:

authorized_keys

客户端通过私钥证明:

自己拥有对应的身份凭证。

因此:

Private Key
↓
必须妥善保护
Public Key
↓
可以放在服务器

在生产环境中,公钥认证通常比单纯密码登录更加适合自动化和安全管理。


FTP 与其他应用层协议#

除了:

HTTP
DNS
DHCP
SSH

应用层还有大量协议。

例如:

FTP
SMTP
IMAP
POP3
NTP
SNMP

它们分别解决不同的问题:

FTP
↓
文件传输
SMTP
↓
发送邮件
IMAP / POP3
↓
获取邮件
NTP
↓
时间同步
SNMP
↓
网络设备管理

这说明:

应用层并不等于 Web。

Web 只是应用层中非常重要的一部分。


应用层协议如何使用传输层#

不同应用协议可以运行在不同的传输层协议之上。

例如:

HTTP/1.1
↓
TCP
SSH
↓
TCP
DNS
↓
UDP / TCP
DHCP
↓
UDP

可以形成:

应用层
│
┌──────────────┼──────────────┐
│ │ │
HTTP SSH DNS
│ │ │
└──────┬───────┘ │
▼ ▼
TCP UDP
│ │
└──────────┬───────────┘
▼
IP
│
▼
Ethernet

因此:

应用层协议并不需要自己重新实现 TCP/IP 的底层传输机制,而是建立在传输层提供的能力之上。


一个完整的 Web 请求#

假设用户在浏览器中输入:

https://example.com

可以从应用层开始向下理解。

首先需要解析:

example.com

于是:

DNS
↓
获得 IP

然后建立传输连接:

TCP

如果使用 HTTPS,还需要:

TLS

之后才发送:

HTTP Request

整个过程可以简化成:

用户
↓
浏览器
↓
DNS
↓
获得服务器 IP
↓
TCP
↓
TLS
↓
HTTP
↓
IP
↓
Ethernet
↓
服务器

服务器收到数据后则反过来:

Ethernet
↓
IP
↓
TCP
↓
TLS
↓
HTTP
↓
Web Server

这就是整个 TCP/IP 协议栈协同工作的一个典型例子。


应用层并不是“最上面就没有协议”#

应用层包含的协议非常多。

例如:

Web
├── HTTP
└── HTTPS
DNS
├── DNS
├── DoT
└── DoH
Remote Access
├── SSH
└── RDP
Email
├── SMTP
├── IMAP
└── POP3
Time
└── NTP
Network Management
└── SNMP

它们虽然都是应用层协议,但:

解决的问题不同
消息格式不同
状态模型不同
传输方式也可能不同

因此学习应用层时,不应该把:

应用层 = HTTP

简单画等号。


TCP/IP 四层模型#

现在可以把整个系列完整串起来:

┌──────────────────────────────────┐
│ 应用层 │
│ HTTP / DNS / DHCP / SSH / ... │
└────────────────┬─────────────────┘
│
▼
┌──────────────────────────────────┐
│ 传输层 │
│ TCP / UDP │
│ Port / Socket │
└────────────────┬─────────────────┘
│
▼
┌──────────────────────────────────┐
│ 网际层 │
│ IPv4 / IPv6 / Routing │
│ ICMP / ARP │
└────────────────┬─────────────────┘
│
▼
┌──────────────────────────────────┐
│ 网络接口层 │
│ Ethernet / MAC / Frame / NIC │
└──────────────────────────────────┘

每一层解决的问题可以概括成:

网络接口层
↓
当前链路怎么传?
网际层
↓
数据应该去哪个 IP?
传输层
↓
交给哪个端口?
如何传输?
应用层
↓
双方具体交换什么信息?

一次完整通信#

假设:

浏览器
访问
https://example.com

可以把整个过程浓缩成:

应用层
│
HTTP / HTTPS
│
▼
传输层
│
TCP / UDP
│
▼
网际层
│
IP
│
▼
网络接口层
│
Ethernet
│
▼
网络

发送过程中:

Application Data
↓
TCP Segment
↓
IP Packet
↓
Ethernet Frame

接收过程中则反过来:

Ethernet Frame
↓
IP Packet
↓
TCP Segment
↓
Application Data

这就是:

封装(Encapsulation)与解封装(Decapsulation)。


从运维角度理解应用层#

应用层是运维工作中非常容易接触的一层。

例如:

网页打不开

不能简单认为:

网络断了

而应该逐层思考:

DNS
↓
域名是否解析?
TCP
↓
端口是否建立连接?
TLS
↓
证书和握手是否正常?
HTTP
↓
状态码是什么?
Application
↓
服务本身是否正常?

例如:

DNS 正常
TCP 正常
TLS 正常
HTTP = 502

说明问题已经不太可能是:

网线
IP
路由
TCP 建连

而应该继续调查:

反向代理
上游服务
应用程序

类似地:

ping 正常

也不能证明:

HTTP 一定正常

因为:

ICMP
↓
网际层
HTTP
↓
应用层

属于完全不同的层次。


应用层的整体认知模型#

可以把应用层浓缩成:

应用层
│
┌─────────────────┼─────────────────┐
│ │ │
▼ ▼ ▼
Web DNS Remote
│ │ Management
HTTP/HTTPS │ │
│ │ SSH
│ │
└────────┬────────┘
▼
应用协议
│
▼
定义通信规则
│
┌──────────┼──────────┐
│ │ │
▼ ▼ ▼
消息格式 数据语义 交互流程
│ │ │
└──────────┼──────────┘
▼
TCP/UDP
│
▼
IP
│
▼
Ethernet

最核心的一点就是:

应用层负责定义“通信双方说什么、怎么说、这些数据代表什么”;下面三层则负责把这些数据送到正确的目标。


TCP/IP 四层模型总结#

至此,整个 TCP/IP 四层模型可以完整理解为:

应用层
↓
定义应用通信协议
↓
HTTP / DNS / DHCP / SSH
传输层
↓
实现进程之间的通信
↓
TCP / UDP / Port
网际层
↓
实现跨网络寻址与转发
↓
IP / Routing / ICMP
网络接口层
↓
实现当前链路上的传输
↓
Ethernet / MAC / Frame / NIC

可以进一步浓缩成:

应用层
↓
“说什么?”
传输层
↓
“交给谁?”
网际层
↓
“到哪台主机?”
网络接口层
↓
“这一跳怎么发送?”

这四层共同构成了一个完整的网络通信体系。

当浏览器访问一个网站时:

HTTP
↓
TCP
↓
IP
↓
Ethernet

每一层都只关注自己的职责,同时把结果交给下一层。

这正是 TCP/IP 分层模型最核心的思想:

把复杂的网络通信拆分成相对独立的功能层,各层通过明确的接口协同工作。

外部参考#

网络:应用层
https://tamakara.top/posts/学习笔记/网络应用层/
作者
魂辛カラ
发布于
2026-09-13
许可协议
CC BY-NC-SA 4.0