计网Chapter2-1_网络应用与应用层协议框架

计网Chapter2-1_网络应用与应用层协议框架
agsdChapter 2.1:网络应用与应用层协议的基本框架
Chapter 2.1 的作用,是在学习 HTTP、SMTP、DNS 等具体协议之前,先回答一个更基础的问题:网络应用到底如何让不同主机上的程序互相通信。它的核心不在某个单独协议,而在应用层设计的共同框架。
本节核心结论: 网络应用运行在端系统上,应用进程通过 socket 使用 TCP/UDP 服务,应用层协议规定 message 的格式、语义和交互规则。
1. 应用层在网络中的位置
应用层位于 Internet 五层协议栈的最上层。Web、邮件、聊天、游戏、视频会议等网络应用,运行在手机、电脑和服务器等端系统上,而不是运行在网络核心的路由器或交换机中。
这带来一个重要好处:应用开发者通常不需要修改路由器或 ISP 基础设施,就能部署新应用、更新协议逻辑、快速迭代功能。网络核心主要负责分组转发,不理解具体应用语义。
flowchart TD
App[应用进程] --> Socket[Socket API]
Socket --> Transport[TCP 或 UDP]
Transport --> IP[IP]
IP --> Link[链路层]
Link --> Physical[物理层]
这张图说明应用层并不直接控制网络路径。应用进程把 message 交给 socket,socket 后面的 TCP/UDP、IP、链路层和物理层负责继续传输。
2. 应用体系结构:C/S、P2P 与混合模式
客户-服务器结构中,server 通常是 always-on host,具有固定 IP 地址和端口,等待客户端请求。client 主动发起通信,可能间歇连接、使用动态 IP,通常不直接和其他客户端通信。HTTP、IMAP、FTP 都可以从 C/S 角度理解。
P2P 结构中,每个 peer 既可以请求服务,也可以提供服务。它的自扩展性来自一个关键事实:新节点加入时既增加下载需求,也带来上传能力或服务能力。但 P2P 节点可能随时上下线,IP 地址可能变化,管理更复杂。
flowchart LR
S[服务器] --> C1[客户端1]
S --> C2[客户端2]
S --> C3[客户端3]
P1[Peer1] <--> P2[Peer2]
P2 <--> P3[Peer3]
P3 <--> P1
这张图对比了两种压力分布方式:C/S 的服务能力集中在服务器端,P2P 的服务能力分布在多个 peer 上。现实系统常采用混合结构,例如中心服务器负责登录、搜索和发现节点,真正数据传输由端系统之间完成。
3. 应用层真正通信的是进程
网络应用通信不是抽象的“电脑和电脑聊天”,而是不同主机上的进程交换应用层 message。
需要区分四个概念:
- host:运行应用的电脑、手机或服务器。
- process:主机上正在运行的程序。
- message:应用层交换的数据。
- protocol:进程交换 message 时遵守的规则。
同一台主机内的进程可以使用操作系统提供的 IPC 通信;不同主机上的进程则必须通过网络协议和 socket 交换 message。
在一次具体通信中,client process 是主动发起通信的进程,server process 是等待并响应请求的进程。即使在 P2P 系统中,也可以按某一次交互区分 client process 和 server process,只是这些角色不是固定身份。
4. Socket 是接口,不是协议
Socket 是应用进程和传输层之间的接口。应用程序通过 socket 发送或接收数据,但 socket 本身不是 HTTP、TCP 或 UDP 那样的协议。
更准确的关系是:
- HTTP:应用层协议,规定请求和响应的格式、语义和交互规则。
- TCP:传输层协议,提供可靠、有序、面向连接的字节流服务。
- UDP:传输层协议,提供无连接、不可靠的数据报服务。
- Socket:应用程序调用 TCP/UDP 服务的编程接口。
例如浏览器访问网页时,会按 HTTP 格式构造 GET 请求,然后通过 socket 把这串字节交给 TCP。TCP 不理解 HTTP 的含义,只负责把字节可靠地传给对方主机。服务器进程通过 socket 收到字节后,再按 HTTP 规则解释这些内容。
5. 进程寻址:IP 地址还不够
只知道 IP 地址只能定位主机,不能定位主机上的具体进程。一台主机可能同时运行浏览器、邮件客户端、Web 服务器、数据库服务和聊天软件。
因此,进程寻址至少需要:
1 | IP address + port number |
IP 地址定位主机,端口号定位这台主机上的服务进程。例如 128.119.245.12:80 表示 IP 地址为 128.119.245.12 的主机上监听 80 端口的 Web 服务。
6. 应用层协议规定什么
应用层协议规定的是进程如何交换 message。它通常包括四类内容:
- 消息类型,例如 request、response。
- 消息语法,即有哪些字段、字段如何组织。
- 消息语义,即字段代表什么含义。
- 交互规则,即何时发送消息、收到消息后如何响应。
以 HTTP 为例,客户端可以发送 GET request,服务器返回 response;请求行、首部字段、空行和 body 属于语法;GET 表示请求资源、状态码 200 或 404 表示结果含义;客户端先发请求、服务器再响应则属于交互规则。
公开协议通常由 RFC 定义,便于不同实现互通,如 HTTP、SMTP、DNS。私有协议则由公司或组织自行定义,如某些即时通信、会议或平台内部协议。
7. 应用对传输层服务的需求
不同应用对传输层服务的需求不同,主要体现在四个方面:
| 需求 | 含义 | 典型应用 |
|---|---|---|
| 可靠性 | 数据不能丢、不能乱 | 文件传输、邮件、网页文档 |
| 时延 | 要求低延迟或及时播放 | 视频会议、语音、游戏 |
| 吞吐量 | 需要足够传输速率 | 视频流、云游戏 |
| 安全性 | 需要加密、完整性和认证 | 登录、支付、网银 |
这里容易和“应用层协议规定什么”混淆。可靠性、时延、吞吐量、安全性是应用对传输服务的需求;消息类型、语法、语义、交互规则才是应用层协议本身规定的内容。
8. TCP、UDP 与 TLS
TCP 提供可靠传输、流量控制、拥塞控制和面向连接服务,适合文件传输、网页、邮件、远程登录等重视可靠性的应用。但 TCP 不保证固定时延,不保证最低吞吐量,也不提供加密。
UDP 提供无连接、不可靠的数据报服务,不做可靠性、流量控制或拥塞控制。它适合短事务或更重视低时延的场景,例如普通 DNS 查询、实时音视频、游戏和部分流媒体。UDP 本身不可靠,但应用可以在 UDP 之上自行实现可靠性,例如 QUIC 运行在 UDP 上并实现了连接管理、可靠传输和加密。
TLS 解决安全性问题。TCP 能保证数据可靠送到,但不能保证不被偷看、篡改,也不能证明对方身份。TLS 运行在应用和 TCP 之间,提供加密、完整性保护和端点认证。
1 | HTTP + TCP = 明文 HTTP |
9. 易混点
Socket 是接口,不是协议。HTTP 是应用层协议,TCP/UDP 是传输层协议。
IP 地址只能定位主机,端口号才能进一步定位主机上的进程。
P2P 不是完全不能区分 client 和 server。在一次交互中,主动请求者是 client process,等待并响应者是 server process。
普通 DNS 查询通常使用 UDP,而不是 TCP。DNS 响应过大、区域传送或某些安全场景下可能使用 TCP,但常规短查询使用 UDP 可以减少连接开销。
10. 复习清单
学完本节后,应能回答:
- 为什么网络应用运行在端系统上,而不是网络核心中?
- C/S 和 P2P 的核心区别是什么?
- P2P 为什么具有自扩展性?
- socket 和 HTTP、TCP 分别是什么关系?
- 为什么只知道 IP 地址不能定位具体应用进程?
- 应用层协议一般规定哪四类内容?
- 应用对传输层服务有哪些需求?
- 文件传输、视频会议、普通 DNS 查询分别更适合 TCP 还是 UDP?
- TCP 已经可靠,为什么还需要 TLS?








