Skip to content

第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服务器地址

域名解析过程

迭代查询(本地服务器负责多次查询,主流方式):

客户机 → 本地DNS → 根DNS(返回TLD地址)
         本地DNS → TLD DNS(返回权限服务器地址)
         本地DNS → 权限DNS(返回目标IP)
         本地DNS → 客户机(缓存结果)

递归查询(较少用,服务器代替客户继续查询):

客户机 → 本地DNS → 根DNS → TLD DNS → 权限DNS
                                     ↩ 结果逐层返回

高速缓存: - 每次查询结果缓存,设置TTL(存活时间)计时器 - TTL大→减少网络开销;TTL小→提高域名更新准确性 - 大大减轻根域名服务器负荷


6.2 文件传送协议 FTP

FTP工作原理

FTP使用两个TCP连接(这是FTP的显著特征):

客户端                          服务器
控制连接 ←──────── TCP 21 ──────────→ 主进程
数据连接 ←──────── TCP 20 ──────────→ 从属进程(每次传文件建立一次)
  • 控制连接(端口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

响应报文(开始行=状态行):

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
[空行]
[实体主体:HTML内容]

状态码五类: - 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请求:

浏览器 → 代理服务器(校园内)→(缓存命中:直接返回)
                              →(未命中:向源服务器请求→缓存→返回)

好处:减少访问互联网服务器的时延,节省带宽。

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 电子邮件

邮件系统架构

发件人 →[SMTP]→ 发送方邮件服务器 →[SMTP]→ 接收方邮件服务器 →[POP3/IMAP]→ 收件人

三个主要构件: - 用户代理(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)

发件人 →[HTTP]→ HTTP服务器 →[SMTP]→ 接收方邮件服务器 →[HTTP]→ 收件人

优点:不需安装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架构

网络管理员
    ↓
管理站(NOC)运行SNMP客户程序(管理者 manager)
    ↓ SNMP (UDP)
被管设备:路由器/交换机等,运行SNMP服务器程序(代理 agent)

三个组成部分: 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详解