本文内容基于 2025 秋季《计算机网络》课程讲述,如有差错,欢迎指正
应用层概述#
应用层的核心概念#
应用层软件运行在端系统 (Host) 中,负责与网络通信,并屏蔽底层的网络细节
进程利用 Socket (套接字) 发送和接收消息,它就像应用程序和网络之间的“门” ,应用程序只需处理应用层逻辑,Socket 负责将数据交给传输层
通过IP+端口号唯一标识一个进程
应用程序的架构模型
下面对比了两种主要的组织架构
| 特性 | 客户/服务器 (C/S) | 对等 (P2P) |
|---|---|---|
| 角色 | 区分明显的客户端 (请求方) 和服务器 (服务方) | 不区分,每个节点既是客户端也是服务器 |
| 服务器要求 | 必须始终在线,通常有固定 IP | 节点可随时加入或退出,IP 可动态变化 |
| 客户端关系 | 客户端之间不直接通信 | 任意两个实体可直接通信 |
| 扩展性 | 受限于服务器性能,需扩容服务器 | 易于扩展,每个新节点都带来计算资源 |
| 典型应用 | Web, Email | BitTorrent, Skype |
传输层提供的服务#
应用层需要传输层提供不同类型的支持,主要看应用对以下四个方面的需求:
- 可靠性:数据是否允许丢失?(文件传输要求 100% 可靠,语音通话可容忍丢包)
- 延迟:是否对时间敏感?(在线游戏、电话会议敏感)
- 吞吐量:是否有最低带宽要求?(视频流需要最低带宽)
- 安全性:是否需要加密?
TCP 与 UDP 的区别
TCP (面向连接):
- 提供可靠传输 (不丢包)、有序传输、流量控制 (防止接收方过载) 和 拥塞控制 (防止网络过载)
- 无法保证延迟和吞吐量
UDP (无连接):不可靠传输 (可能丢包、乱序)
- 简单、速度快、开销小
注意:UDP 本身不提供加密,但可以通过应用层实现(如 QUIC 或在应用层加密)
应用层好处#
-
屏蔽底层细节
- 应用层屏蔽TCP与UDP的差异
- 应用程序无需为下层网络设备编写代码
- 无需考虑端系统上的网卡设备与其他网络软件
- 无需考虑网络核心中的路由器交换机
-
抽象
- 许多网络应用有相同的通信模式
- 网络应用层封装这些共同模式
-
提供额外的功能
- 安全性、服务质量
Web和HTTP#
Web基本概念#
WWW体系结构与协议
构成:
- HTTP服务器和客户端
- Web对象(网页,多媒体资源,动态对象与服务),通过URLs定位
- 服务器与客户端之间执行的HTTP协议
架构:客户/服务器模型 (C/S)
- 客户端:浏览器,请求、接收、展示 Web 对象
- 服务器:存储 Web 对象,响应请求
URL:统一资源定位符 (Uniform Resource Locator),用于定位 Web 对象

Web对象:
- 静态对象:HTML 文件、图片、视频等
- 动态对象:交互信息,比如,用户注册信息、登录信息
- 超链接(HyperLinks):指向其他对象的URLs
HTTP :访问Web资源的协议#
超文本传输协议HTTP( HyperText Transfer Protocol)在传输层通常使用TCP协议,缺省使用TCP的80端口
是一种无状态协议,服务器端不保留之前请求的状态信息
- 无状态协议:效率低、但简单
- 有状态协议:维护状态相对复杂,需要维护历史信息,在客户端或服务器出现故障时,需要保持状态的一致性等
HTTP 发展#
HTTP/1.0(1996)
非持久连接 (Non-persistent)
- 机制:每个 TCP 连接只传输一个请求/响应对。传输完一个对象后,TCP 连接立即关闭。
- 开销:每个对象都需要经过 TCP 三次握手。如果一个网页包含 1 个 HTML 和 10 个图片, 需要建立 11 次 TCP 连接。执行效率较低
HTTP/1.1(1999)
持久连接 (Persistent)
- 机制:服务器发送响应后保持 TCP 连接打开。后续的请求/响应可以通过同一个连接传输
- 流水线 (Pipelining):客户端可以连续发送多个请求,而无需等待前一个响应返回
- 优势:只需建立一次 TCP 连接,大幅降低延迟 (RTT)
HTTP 1.x比较:

HTTP/2(2015)
- 多路复用:允许请求/响应交错传输,还可以自定义优先级。
- 首部压缩:减小报文体积。
- 服务端推送:服务器主动推送资源,可以确认客户端是否存活,可以预测资源请求
- 流量控制:允许应用层进行控制(HTTP/1.x 只能依赖 TCP 流量控制)
HTTP/3(2022)
基于 UDP + QUIC,不再使用 TCP
HTTPS
HTTP+TLS(2008)
增加SSL/TLS(TLS 1.2)层,在TCP之上提供安全机制
HTTP 报文结构#
HTTP 有两种报文:请求报文和响应报文。
请求报文 (Request Message)
由三部分组成:开始行(请求行)、首部行、实体主体

请求行 (Request Line):包含 方法 (Method)、URL、版本
方法是对所请求的对象进行的操作,实际上也就是一些命令,请求报文的类型是由它所采用的方法决定的
URL中的参数以“?”开始,每个参数的形式为“name=value”,参数之间以“&”隔开
实体主体 (Body):POST 请求时存放提交的数据,GET 请求通常为空
响应报文 (Response Message)
与请求报文类似,也由三部分组成:开始行 (状态行)、首部行、实体主体

状态行 (Status Line):包含版本、状态码、短语。
典型状态码:
- 200 OK:请求成功,此时实体主体包含请求的资源
- 301 Moved Permanently:对象永久移动(重定向)
- 304 Not Modified:资源未修改(用于缓存控制)
- 400 Bad Request:请求语法错误
- 404 Not Found:找不到资源
- 505 Version Not Supported:服务器不支持该 HTTP 版本
Web 缓存技术 (Web Caching)#
Web技术一个很常见的优化就是缓存,可以有效减少网络流量和延迟
浏览器缓存
本地保存副本,不必再从服务器获取

代理服务器 (Proxy Server) 缓存
ISP安装Web代理缓存服务器,保存ISP客户访问过的服务器Web页副本, 副本可以供ISP的所有客户访问,提高访问服务器的Web页效率
用户浏览器通过代理服务器进行Web访问,如果缓存中有被请求的对象,则直接返回对象, 否则,代理服务器向原始服务器请求对象,再将对象返回给客户端
Web代理服务器缓存性能分析
假设:
- 平均每个Web页对象大小: 1M bits
- 校园网络内用户向原始服务器请求对象速率为平均每秒15个请求:15/sec
- 互联网访问原始Web页的平均往返时延为2秒
- 接入链路速率为15Mbps
- 机构网络内部带宽很大
结果:
- 机构网络内带宽使用率1.5%,接入链路的使用率接近1,成为主要瓶颈 ,延迟很大可能到分钟级别
- 总的时延= 互联网时延+接入链路时延+ 机构网络时延 = 2 sec + minutes + msecs (校园网络时延以毫秒记)

引入缓存后:
假设:缓存代理访问命中率为40%
结果:
- 机构网络内带宽使用率1.5%,接入链路的使用率接近0.6
- 总的时延:= (互联网延迟) (Web代理命中率的延迟) =(2秒+计10毫秒机构网络内延迟) + (计10毫 秒校园网络内延迟) 1.2 secs
公式逻辑:总延迟 = 命中率 局域网延迟 + 未命中率 (局域网延迟 + 互联网延迟)。
缓存一致性问题
如何保证缓存是最新的?
机制:
-
启发式缓存更新策略(服务器发起):服务器响应包含Last-Modified字段和Expires字段
- 少用,原因:服务器难以预测什么时候Web对象更新
-
询问式缓存更新策略(客户端发起):通过特殊的关键字头If-modified-since询问原始服务器,Web副本是否已更新
- 如果服务器上的对象未修改,返回 304 Not Modified(不带实体主体,节省带宽)
- 如果已修改,返回 200 OK 和新内容
Cookie 与安全#
HTTP是无状态协议,而服务器又希望能了解用户状态,因此服务器使用cookies保持用户状态
工作流程 :
- 服务器响应中包含 Set-Cookie: ID 头部,服务器分配的Cookie内容具有唯一性
- 浏览器在本地保存 Cookie 文件
- 后续请求中,浏览器自动携带 Cookie: ID 头部
- 服务器根据 ID 查询后端数据库,识别用户状态
Cookie一般包含五个字段:
- 域 : 指明Cookie 来自哪里
- 路径:用于标识服务器哪些路径下的资源可以接收该 Cookie
- 内容: Cookie 存放内容的地方,内容为
name = value形式 - 过期时间
- 安全标志
Cookie 简化了用户操作(比如登录),减少开销
Cookie 也会导致用户隐私泄露问题,攻击者可以通过多种方式窃取 Cookie,从而冒充用户