应用层是参考模型的最上层,也是距离用户最近的一层,为各式各样的应用定义了通信规则和协同方式,满足不同的应用需求。围绕这个主题,本章主要探讨了以下内容。

(1)应用进程通信方式与套接字编程

客户/服务器模型(C/S):服务器长期运行,被动等待请求;客户主动发起请求,完成服务后断开。优点是集中管理,缺点是服务器可能成为瓶颈。现代 Web、FTP、电子邮件均采用此模型。

套接字(Socket):应用层与传输层的编程接口。原语包括:

  • socket():创建套接字。
  • bind():绑定本地地址和端口(服务器用)。
  • listen()(TCP):进入被动监听状态。
  • accept()(TCP):接受连接请求。
  • connect()(TCP):主动连接服务器。
  • send()/recv()write()/read():数据传输。
  • close():关闭连接。

基于 TCP 的套接字流程:服务器创建→绑定→监听→接受;客户端创建→连接→通信;可靠有序字节流。 基于 UDP 的套接字流程:无需连接,直接使用 sendto()/recvfrom(),发送和接收数据报。

(2)域名系统(DNS)

DNS 负责将主机名(如 www.example.com)解析为 IP 地址。域名空间为层次树结构,根域为 ""(点),顶层域(TLD)包括通用域(.com, .org)和国家域(.cn, .uk)等。

域名服务器按层次分工:

  • 根域名服务器:全球 13 组(逻辑上),不直接解析,只指引到 TLD 服务器。
  • 顶级域名服务器:负责特定 TLD 下的域名。
  • 权威域名服务器:负责特定域(如 example.com)的所有记录。
  • 本地域名服务器:ISP 或企业网络提供,缓存解析结果,代表用户发起查询。

解析算法

  • 递归查询:本地域名服务器代为请求其他服务器,将最终结果返回用户。
  • 迭代查询:本地域名服务器依次询问各服务器(根→TLD→权威),每个服务器返回下一级地址。

DNS 缓存:各层服务器缓存解析结果,降低延迟,但必须设置 TTL 以确保更新。

(3)典型应用层协议

文件传输(FTP):使用两个 TCP 连接:控制连接(端口 21,发送命令)和数据连接(端口 20,传输文件)。支持主动模式(服务器主动连接客户端)和被动模式(客户端连接服务器协商的端口)。

远程登录 TELNET/SSH

  • TELNET(端口 23):明文传输,不安全。
  • SSH(端口 22):加密认证,支持远程 shell、文件传输(SFTP)、端口转发。

电子邮件协议

  • SMTP(简单邮件传输协议)(端口 25):用于邮件客户端到服务器、服务器到服务器之间的邮件发送。仅支持 ASCII 文本,使用 MIME 支持多媒体。
  • POP3(邮局协议第3版)(端口 110):下载邮件到本地,通常删除服务器上的邮件。
  • IMAP(互联网消息访问协议)(端口 143):邮件保留在服务器上,支持远程文件夹管理、部分下载。

MIME(多用途互联网邮件扩展):在邮件中传输非 ASCII 内容(图片、音频、附件),通过定义新的内容类型(Content-Type)和编码方式(Base64、QP)。

(4)万维网与 HTTP

万维网(WWW)是基于客户/服务器的分布式信息系统,通过超链接关联资源(网页、图片、视频)。

静态 Web vs 动态 Web

  • 静态页面:HTML 文件存储在服务器,内容固定,适用于信息展示。
  • 动态页面:服务器端脚本(PHP、ASP、Node.js)根据请求参数动态生成 HTML,或由客户端 JavaScript 操作 DOM 实现动态效果。

HTTP(超文本传输协议)

  • 版本演变:HTTP/0.9(仅 GET)、HTTP/1.0(支持头部、状态码)、HTTP/1.1(持久连接、管道化)、HTTP/2(多路复用、服务器推送)、HTTP/3(基于 QUIC)。
  • 方法:GET、POST、PUT、DELETE、HEAD、OPTIONS。
  • 状态码:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)。

代理服务器与 Web 缓存

  • 代理服务器:位于客户端和服务器之间,可转发请求、过滤内容、缓存响应、匿名访问。
  • Web 缓存:将最近访问的页面副本存储靠近用户的位置(浏览器缓存、ISP 缓存、反向代理),减少延迟和带宽消耗。缓存一致性通过 Cache-ControlETag 控制。

Web 安全

  • 加密通信:HTTPS = HTTP + TLS(传输层安全),加密数据防止窃听。
  • 验证对方身份:服务器证书(X.509),由 CA(证书颁发机构)签名。
  • 数据完整性:TLS 的 MAC 保证数据在传输中未被篡改。

(5)多媒体应用与内容分发网络

因特网的三种音频/视频服务:

  • 流式存储音频/视频:用户点播预先录制的文件(如 Netflix、YouTube)。支持暂停、快进。
  • 流式直播音频/视频:实时采集并广播(如直播、网络电台)。
  • 交互式音频/视频:实时双向通信(如 Zoom、Skype),对延迟敏感。

发布海量音频/视频数据面临挑战:服务器带宽、延迟、跨运营商传输质量。内容分发网络(CDN) 解决此问题:在全球部署边缘节点,将内容缓存在靠近用户的位置。用户被 DNS 重定向到最近的 CDN 节点。CDN 降低了源服务器负载,提高了用户体验。

(6)P2P 应用与分布式散列表

P2P 体系结构:没有中心服务器,每个节点(对等方)既是客户端又是服务器(称为“对等方”)。通过直接交换共享文件、带宽、存储。

工作原理:例如 BitTorrent,将文件分为很多小块(piece)。节点从 tracker 或 DHT 获取其他对等方地址,并行下载不同块,同时上传自己已拥有的块(“人人为我,我为人人”)。稀有优先、阻塞/乐观疏通等机制提高效率。

分布式散列表(DHT):实现键值对的分布式存储,每个对等方负责一小部分键空间。典型算法:Chord(环形结构)、Kademlia(基于异或距离)。DHT 为 P2P 系统(如 BT 的 DHT 网络、以太坊)提供高效的资源定位服务。