在 TCP/IP 四层模型中,应用层位于最上层,直接面向网络应用和用户需求。
应用层规定通信双方交换什么数据、数据具有什么含义,以及应该按照什么规则进行交互。
常见的 HTTP、HTTPS、DNS、DHCP、SSH 等协议都属于这一层。理解应用层之后,TCP/IP 四层模型就形成了一条完整的数据通信链路。
应用层是什么
TCP/IP 四层模型:
┌────────────────────┐│ 应用层 │├────────────────────┤│ 传输层 │├────────────────────┤│ 网际层 │├────────────────────┤│ 网络接口层 │└────────────────────┘前面已经介绍:
网络接口层↓如何在当前链路上传输
网际层↓如何跨网络寻找目标
传输层↓如何在主机之间进行进程通信而应用层进一步解决:
通信双方到底要交换什么信息,以及应该如何理解这些信息。
例如:
浏览器 ↔ Web Server双方需要约定:
请求是什么格式响应是什么格式状态码是什么意思请求头怎么表示数据怎么表示这就是应用层协议的作用。
因此:
应用层↓定义通信规则和数据语义
传输层↓负责进程之间的数据传输
网际层↓负责 IP 寻址和转发
网络接口层↓负责具体链路传输应用层与应用程序
需要注意:
应用层协议 ≠ 应用程序本身。
例如:
ChromeFirefoxcurl这些是应用程序。
而:
HTTP是应用层协议。
可以理解成:
应用程序 │ ▼应用层协议 │ ▼TCP / UDP │ ▼IP │ ▼Ethernet例如:
Chrome ↓HTTP ↓TCP ↓IP ↓Ethernet因此:
应用层协议规定“怎么交流”,应用程序则负责利用这些协议完成具体功能。
协议与数据格式
应用层协议通常需要定义:
消息格式字段含义请求方式响应方式错误处理状态数据编码例如一个 HTTP 请求:
GET /index.html HTTP/1.1Host: example.com这里不仅有:
请求方法还有:
资源路径协议版本请求头服务器必须按照 HTTP 的规则解释这些字段。
所以:
应用层协议的核心是建立双方都能够理解的通信语义。
应用层协议的分类
应用层协议种类非常多,可以按用途粗略划分:
Web├── HTTP└── HTTPS
名称解析└── DNS
地址配置└── DHCP
远程管理└── SSH
文件传输├── FTP└── TFTP
邮件├── SMTP├── POP3└── IMAP
时间同步└── NTP本文重点介绍:
HTTPHTTPSDNSDHCPSSH它们在实际 Linux / 运维工作中非常常见。
HTTP
什么是 HTTP
HTTP(Hypertext Transfer Protocol)是 Web 中最重要的应用层协议之一。
它用于:
客户端 ↕服务器之间交换资源。
典型场景:
浏览器 │ │ HTTP Request ▼Web Server │ │ HTTP Response ▼浏览器HTTP 是一种:
请求—响应(Request / Response)协议。
HTTP 请求
一个典型 HTTP 请求可以简化为:
Request LineHeadersBlank LineBody例如:
GET /index.html HTTP/1.1Host: example.comUser-Agent: curl/8.xAccept: */*其中:
GET↓请求方法
/index.html↓目标资源
HTTP/1.1↓协议版本HTTP 方法
常见 HTTP 方法包括:
GETPOSTPUTPATCHDELETEHEADOPTIONS最常见的有:
GET
通常用于:
获取资源。
例如:
GET /index.html HTTP/1.1POST
通常用于:
向服务器提交数据或触发某种处理。
例如:
POST /login HTTP/1.1请求体可能包含:
usernamepassword等数据。
PUT
通常用于:
创建或整体更新某个资源。
PATCH
通常用于:
对资源进行部分修改。
DELETE
通常用于:
删除资源。
HTTP 响应
服务器处理请求后会返回:
Response StatusHeadersBlank LineBody例如:
HTTP/1.1 200 OKContent-Type: text/htmlContent-Length: 1234
<html>...</html>其中:
200↓状态码
OK↓原因短语HTTP 状态码
HTTP 状态码通常分为:
1xx2xx3xx4xx5xx可以简单理解为:
| 状态码范围 | 含义 |
|---|---|
1xx | 信息响应 |
2xx | 请求成功 |
3xx | 重定向 |
4xx | 客户端请求问题 |
5xx | 服务器处理问题 |
常见状态码:
200 OK201 Created204 No Content
301 Moved Permanently302 Found304 Not Modified
400 Bad Request401 Unauthorized403 Forbidden404 Not Found
500 Internal Server Error502 Bad Gateway503 Service Unavailable504 Gateway Timeout其中尤其值得注意:
4xx并不简单等于:
“网络有问题”。
它表示服务器收到了请求,但请求通常存在客户端侧的问题。
而:
5xx通常表示服务器端处理过程中出现问题。
HTTP Header
HTTP 中大量信息通过:
Header(首部)
传输。
例如:
Host: example.comContent-Type: application/jsonContent-Length: 123User-Agent: curl/8.xAuthorization: Bearer ...常见作用包括:
身份信息内容类型内容长度缓存压缩连接控制认证因此:
HTTP Message│├── Start Line├── Headers├── Blank Line└── Body是理解 HTTP 报文结构的重要基础。
HTTP Body
Body 是真正承载内容的区域。
例如:
HTMLJSON图片文件都可以作为 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 ↓TCPTLS 提供:
加密身份认证完整性保护因此:
HTTP↓明文应用层协议
HTTPS↓HTTP + TLSHTTPS 并不是一个与 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 还可以提供:
AAAAACNAMEMXNSTXTSRV等不同类型的记录。
DNS 查询
例如客户端需要解析:
www.example.com可能会向 DNS 服务器发起:
DNS Query查询:
www.example.com的:
A记录。
DNS Server 返回:
93.184.216.34可以简化成:
Client │ │ Query ▼DNS Resolver │ │ Answer ▼ClientDNS 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.comDNS 的层次结构
DNS 并不是一个:
全世界只有一台服务器而是一个分布式层级系统。
可以简化为:
Root │ ├── .com ├── .org └── .net │ ▼example.com │ ▼www.example.com其中:
Root↓根 DNS
TLD↓顶级域
Authoritative DNS↓权威 DNSDNS 缓存
如果每次访问:
www.example.com都从根服务器开始查找,效率会非常低。
因此 DNS 大量使用:
缓存(Caching)
可以理解成:
第一次查询 ↓DNS Resolution ↓得到结果 ↓缓存
再次查询 ↓直接使用缓存DNS 记录通常存在:
TTL表示缓存可以保留多长时间。
因此修改 DNS 后并不一定能够立即在所有网络中看到变化。
DNS 与 TCP / UDP
传统 DNS 查询最常见的传输方式是:
UDP53但 DNS 也可以使用:
TCP53TCP 在 DNS 中并不是简单的“旧协议”。
例如:
响应过大区域传送特定 DNS 场景都可能使用 TCP。
此外,现代 DNS 还存在:
DoTDoHDoQ等更现代的传输方式。
其中:
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
即:
DiscoverOfferRequestACKDHCP Discover
新接入网络的客户端可能还没有自己的 IP。
于是发送:
DHCP Discover寻找 DHCP Server。
可以理解成:
Client │ │ 我需要网络配置 ▼广播 / DHCP ServerDHCP Offer
DHCP Server 提供一个配置方案:
IPSubnet MaskGatewayDNSLease Time例如:
IP = 192.168.1.100Mask = 255.255.255.0Gateway = 192.168.1.1DNS = 192.168.1.1DHCP Request
客户端表示:
我希望使用这个配置。
DHCP ACK
服务器确认:
配置正式分配给你。
于是客户端获得:
IP Address+其他网络配置DHCP 租约
DHCP 并不是永久把 IP 地址交给客户端。
通常会存在:
Lease(租约)
例如:
IP192.168.1.100
Lease8 hours到一定时间后客户端需要:
续租否则地址最终可能重新进入地址池。
因此:
DHCP↓动态地址管理非常适合:
家庭网络办公网络大型局域网云环境SSH
什么是 SSH
SSH(Secure Shell)是一种用于安全远程登录和管理的协议。
典型:
Client │ │ SSH ▼Server例如:
ssh user@192.168.1.100可以建立远程 Shell 会话。
SSH 通常运行在:
TCP 22之上。
SSH 能做什么
SSH 不只是:
远程登录还可以进行:
远程命令执行文件传输端口转发隧道例如:
ssh user@server远程执行:
ssh user@server "systemctl status nginx"也可以通过:
scprsyncsftp等工具完成文件传输。
SSH 认证
SSH 常见认证方式包括:
密码认证公钥认证公钥认证可以理解为:
Client ├── Private Key └── Public Key服务器保存:
authorized_keys客户端通过私钥证明:
自己拥有对应的身份凭证。
因此:
Private Key↓必须妥善保护
Public Key↓可以放在服务器在生产环境中,公钥认证通常比单纯密码登录更加适合自动化和安全管理。
FTP 与其他应用层协议
除了:
HTTPDNSDHCPSSH应用层还有大量协议。
例如:
FTPSMTPIMAPPOP3NTPSNMP它们分别解决不同的问题:
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 分层模型最核心的思想:
把复杂的网络通信拆分成相对独立的功能层,各层通过明确的接口协同工作。