第6章 应用层
章节概述
应用层是用户直接使用的层次,定义了"不同主机中多个应用进程之间的通信规则",包括报文类型、语法、语义及进程收发规则。本章覆盖9节,是全书内容最多的一章(280张幻灯片),涵盖:DNS、FTP/TFTP、TELNET、WWW/HTTP、电子邮件、DHCP、SNMP、Socket接口、P2P应用。
核心概念索引
- [[DNS解析流程|DNS域名系统]] — 域名→IP地址的分布式解析
- [[06-应用层|FTP]] — 双连接、主动/被动模式
- [[06-应用层|HTTP协议]] — 无状态、持续连接、HTTP/1.1/2
- [[06-应用层|电子邮件]] — SMTP / POP3 / IMAP / MIME
- [[06-应用层|DHCP]] — 即插即用网络配置
- [[06-应用层|SNMP]] — 网络管理协议
- [[06-应用层|P2P]] — BitTorrent、DHT
6.1 域名系统 DNS
DNS概述
DNS (Domain Name System):互联网的命名系统,把人类可读的域名(如 www.myschool.edu)转换为IP地址。
- DNS 是一个联机分布式数据库系统,采用客户/服务器方式
- 域名到IP地址的解析由若干域名服务器程序共同完成
- 核心特征:层次树状结构命名 + 分布式存储 + 高速缓存
域名结构
根(无名称)
└─ .com .cn .edu .org (顶级域名 TLD)
└─ google baidu tsinghua (二级域名)
└─ www mail ftp (三级,主机名)
示例:mail.cctv.com
注意:域名只是逻辑概念,不代表计算机物理位置
我国二级域名分类:类别域名(.com.cn / .net.cn / .edu.cn 等)+ 行政区域名(.bj / .sh / .zj 等)
四类域名服务器
| 类型 | 作用 | 特点 |
|---|---|---|
| 根域名服务器 | 知道所有TLD服务器地址 | 全球13套装置(实为1098+节点,任播技术);不直接返回IP,告知下一步找谁 |
| 顶级域名服务器 | 管理注册在本TLD下的所有二级域名 | 可能直接回答,或指向权限服务器 |
| 权限域名服务器 | 负责一个区(zone)的解析 | 对某区有权限;一个域可划分为多个区 |
| 本地域名服务器 | 代替客户发起查询 | 每个ISP/大学均有;最重要的服务器 |
区(zone)≠ 域(domain):一个域可划分为多个区,每个区有独立的权限服务器
根域名服务器细节(第8版新增): - 截至2020年9月:全球共1098个根服务器,我国28个 - 采用任播(anycast)技术:路由器自动找最近的根服务器 - 根服务器不存储域名→IP映射,只告知TLD服务器地址
域名解析过程
迭代查询(本地服务器负责多次查询,主流方式):
递归查询(较少用,服务器代替客户继续查询):
高速缓存: - 每次查询结果缓存,设置TTL(存活时间)计时器 - TTL大→减少网络开销;TTL小→提高域名更新准确性 - 大大减轻根域名服务器负荷
6.2 文件传送协议 FTP
FTP工作原理
FTP使用两个TCP连接(这是FTP的显著特征):
- 控制连接(端口21):持续存在,传ASCII命令(USER, PASS, LIST, RETR, STOR...)
- 数据连接(端口20,主动模式):每次文件传输时建立,传完关闭
主进程工作步骤:打开端口21→等待请求→启动从属进程处理→回到等待
主动模式 vs 被动模式(PASV): - 主动:服务器从端口20主动连接客户端数据端口(穿越防火墙困难) - 被动:客户端主动连接服务器的随机高端口(解决防火墙问题)
TFTP(简单文件传送协议)
- 使用UDP(端口69),需要自己实现差错纠正
- 类似停止等待协议:每块512字节,确认后再发下一块
- 最后一块不足512字节表示文件结束
- 无目录列表、无身份鉴别,代码小,适合路由器引导文件传输
文件共享协议对比
| 协议 | 方式 | 操作对象 |
|---|---|---|
| FTP/TFTP | 复制整个文件到本地 | 文件副本 |
| NFS(联机访问) | 直接访问远程文件部分 | 远程原文件 |
6.3 远程终端协议 TELNET
- 互联网正式标准,通过TCP连接登录到远地主机
- 使用网络虚拟终端 NVT(Network Virtual Terminal)格式,消除不同终端的差异
- 客户端:用户击键 → NVT格式 → 服务器 → 远地系统格式
- 选项协商(Option Negotiation):双方平等协商终端功能
- 现在已基本被SSH取代(SSH加密,TELNET明文传输)
6.4 万维网 WWW 与 HTTP
WWW基础
万维网(WWW)解决的四个核心问题: 1. 如何标识文档?→ URL(统一资源定位符) 2. 如何传输文档?→ HTTP协议(TCP连接) 3. 如何显示文档?→ HTML语言 4. 如何找到文档?→ 搜索引擎
URL格式:<协议>://<主机>:<端口>/<路径>
HTTP协议详解
HTTP主要特点: - 面向事务(transaction-oriented) - 无状态(stateless):简化服务器设计,支持大量并发 - HTTP协议本身无连接,依赖TCP提供可靠传输
HTTP/1.0:非持续连接
- 每个对象需独立TCP连接
- 每个文档开销 = 2×RTT + 文档传输时间
- 10张图片的页面需 11×2RTT + 文档传输时间
HTTP/1.1:持续连接(默认)
- 非流水线方式:收到响应后再发下一请求(TCP有空闲)
- 流水线方式:不等响应就发下一请求,所需时间 ≥ 1RTT + 11个文档传输时间
HTTP/2
- HTTP/1.1升级版,二进制分帧,多路复用(同一TCP连接并行)
- 服务器可主动推送,头部压缩,向后兼容
HTTP报文结构
请求报文(开始行=请求行):
GET /dir/index.htm HTTP/1.1
Host: www.xyz.edu.cn
Connection: close
User-Agent: Mozilla/5.0
Accept-Language: cn
[空行]
[实体主体,GET通常不用]
常用方法:GET、POST、HEAD、PUT、DELETE、PATCH
响应报文(开始行=状态行):
状态码五类:
- 1xx:通知信息(收到请求、处理中)
- 2xx:成功(200 OK, 202 Accepted)
- 3xx:重定向(301 Moved Permanently, 304 Not Modified)
- 4xx:客户端错误(400 Bad Request, 403 Forbidden, 404 Not Found)
- 5xx:服务器错误(500 Internal Server Error)
Web缓存(代理服务器)
代理服务器 = 万维网高速缓存,代表浏览器发HTTP请求:
好处:减少访问互联网服务器的时延,节省带宽。
Cookie(状态跟踪)
HTTP无状态 + Cookie = 有状态会话:
- 服务器通过 Set-Cookie 头在客户端存储标识
- 后续请求自动携带Cookie,服务器识别用户身份
- Cookie文件存于客户端,对应后台数据库
万维网文档类型
| 类型 | 特点 | 技术 |
|---|---|---|
| 静态文档 | 内容不变,存于服务器 | HTML文件 |
| 动态文档 | 浏览器访问时由程序动态创建 | CGI脚本 (Perl/C++) |
| 活动文档 | 在客户端浏览器中运行 | Java Applet / JavaScript |
HTML标签:<H1> 标题,<P> 段落,<A href> 超链接,<img> 图像,<video>/<audio> 媒体(HTML5)
搜索引擎:全文检索(Google/百度/必应)、分类目录(早期雅虎)、垂直搜索(特定领域)、元搜索(聚合多引擎)
Google PageRank核心:对链接数目加权统计(来自重要网站的链接权重更大)+ 超文本匹配分析
6.5 电子邮件
邮件系统架构
三个主要构件: - 用户代理(UA):邮件客户端程序(Outlook、Thunderbird) - 邮件服务器:存储转发邮件 - 邮件协议:SMTP(发送)、POP3/IMAP(接收)
邮件地址格式:收件人邮箱名@邮箱所在主机域名(例:xiexiren@tsinghua.org.cn)
SMTP(简单邮件传送协议)
- 基于ASCII文本,命令-响应方式
- 基于TCP,端口25
- 三个阶段:连接建立 → 邮件传送 → 连接释放
- SMTP不使用中间邮件服务器(直接连接目的服务器)
- 重要限制:只能传7位ASCII码,不能传二进制
POP3 vs IMAP
| 特性 | POP3(端口110) | IMAP(端口143) |
|---|---|---|
| 邮件位置 | 下载到本地后可删除 | 存于服务器 |
| 文件夹管理 | 本地 | 服务器端 |
| 多设备访问 | 不便 | 支持 |
| 搜索 | 本地搜索 | 服务器搜索 |
| 离线使用 | 支持 | 需联网 |
MIME(通用互联网邮件扩充)
MIME不改变SMTP,而是扩充邮件主体结构,定义非ASCII内容的编码规则:
5个新首部字段:
- MIME-Version:版本号
- Content-Type:内容类型/子类型(如 image/jpeg, text/html)
- Content-Transfer-Encoding:编码方式
- Content-Description:描述
- Content-Id:唯一标识符
两种编码: - Quoted-Printable:少量非ASCII时使用,等号+十六进制表示 - Base64:任意二进制数据,3字节→4字节(25%开销),用于图片/附件
万维网电子邮件(Webmail)
优点:不需安装UA软件,任何能联网的机器都能收发邮件。
6.6 DHCP(动态主机配置协议)
工作原理
DHCP提供即插即用联网,自动分配:IP地址、子网掩码、默认路由器IP、DNS服务器IP
使用UDP:服务器端口67,客户端口68
四次交互过程:
① 客户→广播 DHCPDISCOVER(发现:我需要IP地址)
② 服务器→单播 DHCPOFFER(提供:我给你这个IP,租用T时间)
③ 客户→广播 DHCPREQUEST(请求:我选择你的方案)
④ 服务器→单播 DHCPACK(确认:成交!)
租用期(Lease Period): - DHCP地址是临时的 - T1 = 0.5T时:发送DHCPREQUEST续租 - T2 = 0.875T时:若T1未成功,发广播续租 - 超过T仍无响应:放弃该地址
DHCP中继代理(Relay Agent): - 并非每个网络都需要DHCP服务器 - 中继代理将客户广播发现报文以单播转发给服务器 - 实现跨网络的DHCP服务
6.7 SNMP(简单网络管理协议)
网络管理五大功能(FCAPS)
- 故障管理(F):检测、隔离、纠正故障
- 配置管理(C):初始化和配置网络
- 计费管理(A):记录网络资源使用
- 性能管理(P):评估系统运行状况
- 安全管理(S):访问控制、加密管理
SNMP架构
三个组成部分: 1. SNMP协议:定义管理站与代理间交换的报文格式 2. SMI(管理信息结构):定义被管对象的命名和编码规则,使用ASN.1语言 3. MIB(管理信息库):存放被管对象的控制和状态信息
SNMP两种基本操作: - get(读):查询被管对象的状态值 - set(写):改变被管对象的状态值
探询(Polling)vs 陷阱(Trap): - 探询:管理站周期性发送查询,开销较大 - 陷阱:代理检测到事件超过阈值时主动上报,更高效
SNMP使用UDP:服务器端口161(get/set请求),端口162(trap报文)
BER编码(TLV格式):T(类型)+ L(长度)+ V(值),实现跨平台数据交换
6.8 Socket接口(应用进程跨网络通信)
系统调用将控制权从应用程序传给操作系统:
套接字(Socket):
- 应用进程与操作系统网络服务的接口
- 每个套接字有唯一描述符(整数ID)
- 通信方式:socket() → bind() → listen() → accept() → send()/recv() → close()
使用TCP的三个阶段:连接建立 → 数据传送 → 连接释放
主要API(Berkeley Socket):
- socket():创建套接字
- bind():绑定本地地址和端口
- listen():设置监听队列
- accept():接受连接(阻塞直到有连接)
- connect():发起连接
- send()/recv():发送/接收数据
- close():关闭连接
6.9 P2P应用
三代P2P演进
第一代:Napster(集中目录) - 文件定位集中(目录服务器),文件传输分散 - 缺点:可靠性差,目录服务器是瓶颈
第二代:Gnutella(全分布,无结构) - 无中心服务器,使用有限范围洪泛查询 - 缺点:查询效率低(洪泛浪费带宽)
第三代:BitTorrent(BT) - 洪流(torrent):所有对等方集合 - 追踪器(tracker):维护对等方列表 - 文件块(chunk):固定长度分片 - 最稀有优先:优先请求副本最少的块 - 以牙还牙(Tit-for-Tat):优先向传给自己速率最高的对等方上传
P2P文件分发效率分析
客户-服务器方式: $\(T_{CS} = \max\left(rac{NF}{u_s}, rac{F}{d_{min}} ight)\)$
P2P方式: $\(T_{P2P} \geq \max\left(rac{F}{u_s}, rac{F}{d_{min}}, rac{NF}{u_T} ight)\)$
其中 \(u_T\) 是所有节点上传速率之和。N=30时,P2P最少时间下限 < 1小时(不管N多大),CS方式需3小时。
DHT(分布式散列表)
- DHT:大量对等方共同维护的分布式索引
- 散列函数将资源名K映射为资源标识符KID,将节点IP映射为节点标识符NID
- Chord算法(MIT 2001):节点按NID从小到大沿顺时针排列成环形覆盖网络
- 每个资源由Chord环上与其KID值最接近的下一个节点提供服务
- 指针表(finger table):加速查找,避免线性遍历整个环
参见
- [[05-运输层]] — HTTP用TCP(端口80/443),DNS用UDP(端口53)
- [[04-网络层]] — DHCP、DNS均依赖IP
- [[DNS解析流程|DNS域名系统]] — 完整解析流程
- [[TCP三次握手]] — HTTP连接的底层
- [[06-应用层|MIME]] — Base64/Quoted-Printable详解