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

Chapter 2.1:网络应用与应用层协议的基本框架

Chapter 2.1 的作用,是在学习 HTTP、SMTP、DNS 等具体协议之前,先回答一个更基础的问题:网络应用到底如何让不同主机上的程序互相通信。它的核心不在某个单独协议,而在应用层设计的共同框架。


本节核心结论: 网络应用运行在端系统上,应用进程通过 socket 使用 TCP/UDP 服务,应用层协议规定 message 的格式、语义和交互规则。

1. 应用层在网络中的位置

应用层位于 Internet 五层协议栈的最上层。Web、邮件、聊天、游戏、视频会议等网络应用,运行在手机、电脑和服务器等端系统上,而不是运行在网络核心的路由器或交换机中。

这带来一个重要好处:应用开发者通常不需要修改路由器或 ISP 基础设施,就能部署新应用、更新协议逻辑、快速迭代功能。网络核心主要负责分组转发,不理解具体应用语义。

这张图说明应用层并不直接控制网络路径。应用进程把 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 地址可能变化,管理更复杂。

这张图对比了两种压力分布方式: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。它通常包括四类内容:

  1. 消息类型,例如 request、response。
  2. 消息语法,即有哪些字段、字段如何组织。
  3. 消息语义,即字段代表什么含义。
  4. 交互规则,即何时发送消息、收到消息后如何响应。

以 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
2
HTTP + TCP       = 明文 HTTP
HTTP + TLS + TCP = HTTPS

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?

最终总结: Chapter 2.1 建立了应用层的通用框架:应用运行在端系统,进程通过 socket 使用传输层服务,IP 和端口共同定位进程,应用层协议规定 message 的规则,而 TCP、UDP、TLS 则根据应用需求提供不同能力。