计算机网络应用层

应用层总述

1. 应用层是什么?

应用层(Application Layer) 是计算机网络体系中最靠近用户的一层,它不关心怎么传输比特、怎么路由,而是关心具体的网络应用要提供什么服务、应用进程之间怎么"说话"。

前面物理层、数据链路层、网络层、运输层解决的是怎么把数据可靠地送到对端的进程

应用层要解决的是对端进程之间用什么规则来交换应用数据。

2. 应用层协议(Application Layer Protocol)

应用层协议是指为使不同主机上的多个应用进程能够正确地相互协作完成某种应用任务,而制定的一整套通信规则。

典型需要规定的内容包括:
报文的类型

是请求报文、响应报文,还是错误报文等。
报文的语法

报文中各字段的格式、顺序、长度、编码方式等。
报文的语义

各字段具体代表的含义、该字段取不同值时应做什么处理。
交互过程的规则

谁先发、谁后发;什么时候需要重传;什么情况下关闭连接等。

只有遵守同一应用层协议的进程之间,才能正确地互相理解和配合。

3. 标准化应用层协议

互联网大量的应用层协议都被写进了 RFC 标准文档,任何人都可以实现和使用。

例:

HTTP:万维网应用层协议,标准在 RFC 7230 系列中。

只要浏览器和 Web 服务器都遵守这些 HTTP 规范,就算是不同厂商软件,也能互相通信。

注意:应用层协议 ≠ 网络应用本身

例如:很多 P2P 文件共享系统使用专门的应用层协议,但"P2P 文件共享系统"是应用,而不是协议本身。

4. 客户/服务器方式

很多互联网应用都是基于客户-服务器(Client/Server,C/S)方式:
客户(Client):

发起通信的一端,通常由用户操作(如浏览器)。客户一般不需要固定 IP,按需连接服务器即可。
服务器(Server):

被动等待请求的一端,提供某种服务(Web、邮件等),一般有固定 IP 和固定端口,长期运行。

客户和服务器进程在应用层通过某种协议(如 HTTP、SMTP)进行交互。

域名系统 DNS 概述

1. 为什么需要 DNS?

互联网中真正用来标识主机的是 IP 地址(当前常见 IPv4 是 32 位二进制,IPv6 是 128 位二进制)

问题:IP 地址不便于记忆和使用,更不利于用户层面对资源进行管理。

早期 ARPANET 时代,用的是一个简单办法:

维护一个 hosts 文件,列出所有主机的字符串名字 ↔ IP 地址的对应关系。

当网络规模很小时还可以,但当主机数量爆炸式增长时,集中维护单一文件完全不可行:

文件会非常大;

更新极不方便;

每台计算机都要频繁下载最新版本。

因此,互联网提出了分布式、层次化的命名系统,就是域名系统 DNS(Domain Name System)

2. DNS 的作用和特点

本质作用:把用户方便记忆的主机名字(主机域名)转换成IP 地址,即名字到地址的映射。

DNS 是一个层次结构的分布式数据库 + 相应的查询协议与服务器系统:

命名空间按域层次划分;

各级域分别由不同的机构管理;

数据分布在世界各地的域名服务器上。

由于 DNS 是分布式的,即使某些服务器宕机,整个 DNS 系统仍能继续运转,提高了可靠性和可扩展性。

3. 解析过程中的两个角色

解析程序(resolver)

运行在主机上的软件模块,通常是操作系统提供或嵌在系统库函数里。应用进程调用解析程序来查询域名。

域名服务器(name server / DNS server)

运行在专用 DNS 服务器机器上的进程,负责回答解析程序发来的查询请求。

应用进程要把域名转换为 IP 地址时,一般流程是:

  1. 应用进程调用本地的解析程序,传入要查询的域名;

  2. 解析程序向本地域名服务器发出 DNS 查询报文(通常是 UDP 报文);

  3. 本地域名服务器负责在整个 DNS 系统中找到对应 IP 地址,再把结果返回给解析程序;

  4. 应用进程收到结果后即可与目标主机建立连接。

(如果本地域名服务器自己答不上来,就会去问其他域名服务器,这就是后面讲的迭代 / 递归查询。)

互联网的域名结构

1. 域名空间与域(domain)

互联网的主机名采用层次化的域名结构。一个完整的主机域名由多个标号(label)用英文点 "." 连接而成,例如 mail.cctv.com

最右边的是顶级域名(Top-Level Domain,TLD):com

中间的是二级域名:cctv

最左边的是三级域名:mail

从逻辑上看,每一个域(domain)就是域名空间树上的一个节点以及其下属所有子树。例如:

com 是一个域(顶级域)

cctv.com 是 com 域下的一个子域(二级域)

mail.cctv.com 可以视为主机名,属于 cctv.com 这个域

域是逻辑概念,表示命名空间上的一个划分,并不等同于物理网络或地域。

2. 域名中标号的规则

DNS 规定:

每个标号通常由英文字母、数字和连字符"-" 组成;

每个标号最长不超过 63 个字符;

整个完整域名(所有标号加点)总长度不超过 255 个字符;

不区分大小写:CCTV.comcctv.com 被视作同一个名字;

不能在标号开头或结尾使用连字符,也不能使用点号以外的其他标点来分隔标号。

3. 顶级域名(TLD)的分类

图片中给出了 TLD 的分类和例子(以 2020 年前后的统计为例):

(1) 国家顶级域名 ccTLD(country-code TLD)

基于 ISO 3166 的两位国家/地区代码,例如:

cn(中国)、us(美国)、uk(英国)、jp(日本)等

截至某一时间点,国家顶级域的数量约为 316 个左右。

(2) 通用顶级域名 gTLD(generic TLD)

早期传统的 gTLD 主要有:

com(公司企业)、net(网络服务机构)、org(非营利组织)、

int(国际组织)、edu(教育机构)、gov(政府部门)、mil(军事部门)等。

后来陆续增加了一批新的通用顶级域,如:

aero、asia、biz、cat、coop、info、jobs、mobi、museum、name、pro、tel、travel 等。

2011 年后 ICANN 启动了新一轮的 新 gTLD 计划,允许申请更多种类的顶级域,如:

带有公司名称、品牌名称的 gTLD;

甚至是中文顶级域名,如".公司"、".网络"等。

(3) 基础结构域名(infrastructure domain)

典型代表是 arpa,主要用于互联网基础设施相关用途,如反向域名解析等。

4 我国的二级域名分类

在 .cn 之下,我国把二级域名分为两类:
类别域名(适用于教育、政府、军事等不同机构类型):

如:ac.cn(科研机构)、com.cn(公司企业)、edu.cn(教育机构)、

gov.cn(政府机构)、mil.cn(军事机构)、net.cn(网络运营机构)、org.cn(非营利组织)等。

行政区域名:

对应省、市等行政区,如:bj.cn(北京市)、js.cn(江苏省)等。

域名空间树的结构与例子

域名空间在概念上是一棵倒置的树:

顶端的根节点为 "根",通常记作一个"空名字",写作结尾的一个点"."(在很多软件中省略不写)

根下面是各个顶级域名(com、net、cn、org 等)

每个顶级域之下是各个二级域名,再往下可以有三级、四级......,层级不限。

图中给的例子:

cctv 属于 com;其下可能有 mail.cctv.comwww.cctv.com

tsinghua.edu.cnpku.edu.cn 等大学域分别挂在 edu.cn 或 cn 下面;

每个学校内部又可以划分更细的三级、四级域名,形成自己的子树。

重要结论:

尽管全世界有很多主机名都叫 mail,但像 mail.cctv.commail.tsinghua.edu.cn 是完全不同的唯一域名。

域名与 IP 地址的关系:

域名是逻辑命名,便于人类使用;

IP 地址是网络层的地址,用于路由与转发;

DNS 做的工作就是建立两者之间的映射。

域名服务器与区域

1. 区域(zone)与域(domain)

域(domain) 是命名空间上的逻辑划分

区域(zone) 则是 DNS 管理中的单位,一个域中的某一部分(可以是整个域,也可以是其中的若干子域)由一个域名服务器负责管理,这一部分就叫做一个区域。

区域的划分是为了:

方便不同组织、部门分担管理责任;

让每个域名服务器只管理自己范围内的那一小部分数据,提高系统效率和可扩展性。

图中的例子:

假设有公司 abc.com,其下有多个部门 x、y,每个部门下还有多个下属小组 u、v、w 等。

可以把 abc.com 划成一个区域,也可以把 abc.comy.abc.com 划成两个区域。

每个区域会配置自己的权威域名服务器,只对本区域负责。

2. DNS 域名服务器的类型(四类)

从树状结构可以看出,互联网上的 DNS 服务器按层次分成四种类型:

(1) 根域名服务器(root name server)

整个 DNS 系统的"最高权威",知道所有顶级域名服务器的地址。

负责回答:某个顶级域(例如 .com)的域名服务器在哪里?

全世界逻辑上只有 13 个根服务器名字(a.root-servers.net ~ m.root-servers.net),但每个名字背后有大量物理服务器,通过 任播(anycast)技术 部署在全球多地,提高可靠性和就近访问。

(2) 顶级域名服务器(TLD server)

管理某一个顶级域下注册的所有二级域名。

例如 .com 顶级域名服务器知道 cctv.comabc.com 等二级域的权威服务器地址;

当收到关于 mail.cctv.com 的查询时,它会告诉你:去找 cctv.com 的权威服务器。

(3) 权威域名服务器(authoritative name server)

掌握某个"区域"内所有主机和子域的 正式记录(zone file)

当查询落到该服务器时,它可以直接给出域名对应的 IP 地址(或其他记录),被视为"最终权威答案"。

(4) 本地域名服务器(local name server / 缓存域名服务器)

并不属于某个特定域层次结构的一部分,而是为某个网络环境所设置,如 ISP、校园网、企业网。

所有主机的解析程序都先把查询请求发给本地域名服务器,由它去"代办"后续查询过程。

它会对查询结果进行缓存,下次再查同样的名字就可以直接从缓存中给出答案,大幅减少外部查询次数。

3. 主 / 辅域名服务器(master / secondary)

为了提高可靠性,DNS 允许一个区域的数据保存在多个服务器上:
主域名服务器(master name server):

维护该区域的原始数据,可以对记录进行修改。

辅域名服务器(secondary name server):

定期从主服务器复制数据,只读,用于容灾和分担查询压力。

多台服务器保证即使其中一台宕机,其他服务器仍能提供该区域的数据。

DNS 查询方式

当主机要解析一个域名时,解析程序通常先向本地域名服务器发出查询,之后整体过程存在两种典型的查询方式。

1. 递归查询(recursive query)

特点:请求方把一条查询链的所有工作都交给对方完成。

主机向本地域名服务器的第一次查询通常是递归查询:

"请你帮我查出这个域名的 IP 地址,给我最终结果。"

如果对方不知道,则需要由对方继续代表你去问其它服务器,直到得到最终答案,否则就回报错误。

在递归查询方式下:

发送请求的一方只会收到最终结果(成功或失败),中间向哪些服务器转发、经历了哪些步骤,对它是透明的。

2. 迭代查询(iterative query)

特点:每一级服务器只告诉你下一步该找谁,不会替你继续问下去。

典型流程(本地域名服务器向外部发起):

本地域名服务器先向根服务器发送查询报文(通常是迭代查询);

根服务器回答:"我不知道最终 IP,但你可以去问某个 TLD 服务器";

本地域名服务器再去问 TLD 服务器,TLD 服务器会告诉它某个权威服务器地址;

本地域名服务器再去问权威服务器,得到最终 IP 地址;

最终把结果返回给发起查询的主机。

实际互联网中:

主机 → 本地域名服务器:常用递归查询;

本地域名服务器 → 其它域名服务器:通常使用迭代查询。

这样既简化了主机实现,又减轻了根和顶级域服务器的负担。

DNS 缓存与查询效率

为了提高效率、减轻上级服务器的负担,DNS 系统广泛使用缓存机制(caching)

1. 本地域名服务器的缓存

本地域名服务器会把查询结果(域名 ↔ IP 地址映射)保存在缓存中,并给每条记录设定一个生存时间 TTL。

当又有用户查询该域名时,如果缓存中记录还在有效期内,就可以直接使用,而不必再去问根 / TLD / 权威服务器。

这可以大幅减少互联网中 DNS 查询报文的数量,提高响应速度。

2. 其他服务器和主机的缓存

有些权威服务器、TLD 服务器也会缓存其他域名的一些信息,用于加速后续查询

在主机层面,操作系统或浏览器也常常实现自己的小缓存(例如浏览器 DNS 缓存)

3. 缓存的一致性问题

由于域名与 IP 的绑定关系不会频繁改变,DNS 允许设置相对较长的 TTL,使缓存能长时间复用;

但为了不出现严重错误,又要求:

当域名记录发生变更时,应在合理的时间内更新各处缓存;

当 TTL 过期后,本地缓存应重新向权威服务器查询最新映射。

本地域名服务器维护的是自己最近使用的域名记录的高速缓存,只有在缓存中查不到时才去访问其他域名服务器。由于域名改动并不频繁,大部分网站不需要投入太多精力就能保证缓存数据库的一致性。

1. 应用层协议定义什么?

报文类型、语法、语义、交互过程规则,用来规范应用进程之间如何通信。

2. DNS 的核心目的?

提供从域名到 IP 地址的映射,是一个分布式、层次化的命名系统和查询系统。

3. 域名结构与 TLD 分类?

域名由多个 label 组成,以 "." 分隔,右边是高层、左边是低层;有 ccTLD、gTLD、基础结构域名等。

4. 域 vs 区域(zone)?

域是命名空间的逻辑划分;区域是 DNS 管理单位,某个域的一部分由一个权威服务器负责。

5. 四类域名服务器?

根服务器、顶级域名服务器、权威域名服务器、本地域名服务器(缓存服务器)

6. 两种查询方式?

递归:对方帮你一路查到底,给你最终答案;

迭代:对方只告诉你"下一步去找谁"。

7. 缓存机制的意义?

通过 TTL 控制缓存有效期,大幅减少查询报文数量、提高响应速度,同时成本可控。

文件传送协议 FTP、NFS、TFTP

FTP 概述

(1)FTP 是什么?

FTP(File Transfer Protocol)文件传送协议:

互联网早期最重要的文件传送应用层协议,标准见 RFC 959、STD 9。

作用:在不同主机之间可靠地传送文件(上传、下载)

FTP 提供的是交互式访问:

用户可以指定要访问的文件名

指定传送模式(文本 ASCII 或二进制)

对文件设置访问权限(比如只有授权用户才能读/写某文件)

(2)FTP 在互联网早期的地位

早期互联网还没有万维网 WWW 时,FTP 的通信量约占全网的 1/3,电子邮件和文件系统之间的通信很多也靠 FTP。

到了 1995 年 WWW 广泛应用后,FTP 的占比才明显下降,但它仍是经典协议,很多系统发展历史里都会提到。

(3)整个文件传送 vs 联机访问

通过网络访问文件分成两大类:

整体文件传送(whole-file transfer)

一次性把整个文件从一台主机拷贝到另一台主机。

FTP 和 TFTP 都属于这一类。

联机访问(on-line access)

用户像访问本地文件那样,直接远程访问另一台主机上的文件。

操作系统把远端文件系统挂载到本地,应用程序感觉不到远程,只当是本地磁盘。

典型代表:NFS(Network File System)网络文件系统。

(4)NFS 的核心思想

NFS 最初由 Sun 公司提出,是在 TCP/IP 环境下运行的分布式文件系统协议族。

特点:

提供透明的远程文件访问:应用程序无需知道文件在远程哪里,只通过本地路径访问

操作系统在内核中实现 NFS 客户端,应用程序不改代码就能访问远程文件

NFS 现在常用的是 NFSv4

FTP 的基本工作原理

(1)为什么跨系统的文件传送很难?

把一台主机上的文件复制到另一台主机,看似简单,其实困难点很多,比如:

不同操作系统的目录结构、文件命令不同

同一份文件存放到不同操作系统时,权限管理不同

访问控制方式不同(用户、组、权限位不一样)

网络传输中要考虑可靠性与效率

FTP 的任务就是:在异构系统之间,提供一套统一的文件传送机制。

(2)FTP 的服务模式:客户/服务器 + 主/从进程

FTP 是典型的客户/服务器(C/S)应用,并且服务器内部采用主进程 + 多个从属进程的结构:

主进程:

监听固定端口(TCP 端口 21),负责接收新的连接请求;

从属进程:

每当有一个客户端请求建立 FTP 会话,主进程就派生出一个从属进程来专门服务这一个客户端,直到会话结束。

主进程只负责"接活",真正处理命令与数据交互的是从属进程。

(3)FTP 使用两个 TCP 连接:控制连接 + 数据连接

这是 FTP 的典型特点,如图 6-5 所示:

控制连接(control connection)

建立在客户端和服务器的控制进程之间

使用 TCP 端口 21(服务器端固定监听端口)

作用:

负责传输 FTP 命令和控制信息,如 USER、PASS、LIST、RETR、STOR 等;

整个 FTP 会话期间通常始终保持存在,不随文件传送而断开;

控制连接中数据量不大、但需要可靠顺序传输,所以用 TCP 正合适。

数据连接(data connection)

用于实际的文件数据传送;

每次传送文件前由一方主动创建,传送完一个文件就关闭;

服务器端数据连接常使用端口 20(传统主动模式),也有被动模式下由客户端打开指定端口;

控制连接和数据连接是独立的两个 TCP 连接。

因为 FTP 把控制信息和数据分在两个连接里,所以常说 FTP 的控制信息属于带外传送。

采用两个连接的好处:

控制通道不会被大文件数据占满,命令能及时到达;

可以分别设计不同的缓存策略和传输模式;

便于实现复杂操作,例如:一边传数据,一边还可以发中断或状态命令。

简单文件传送协议 TFTP

(1)TFTP 是什么?

TFTP(Trivial File Transfer Protocol)简单文件传送协议,标准 RFC 1350 等;

仍属于 TCP/IP 协议簇的应用层协议,但与 FTP 不同,它:

使用 UDP 进行传输;

不提供交互式控制,协议非常简单;

只支持文件的读或写,没有列目录、权限管理等复杂功能。

(2)TFTP 的应用场景

TFTP 的设计目标就是极度简单、小巧、易实现,典型使用场景:

一些设备启动时从网络上下载自己的启动代码或配置文件;

在局域网内部快速地在多台机器之间复制较小文件;

环境简单、对安全性和复杂控制要求不高的场合。

(3)TFTP 的主要特点

基于 UDP

每个数据报文最多 512 字节有效数据,编号从 1 开始;

需要自己实现简单的差错恢复:对端要返回确认,应答丢失时重传数据。

支持 ASCII 和二进制文件传送

但协议层面只关心块编号 + 数据 + 确认,上层再决定数据含义。

功能非常有限

没有目录、权限、用户概念;

没有复杂的命令集;

只提供读一个文件或写一个文件。

协议报文结构极其简单

操作码(读、写、数据、确认、错误) + 块号 + 数据/错误码。

(4)TFTP 的可靠性机制

虽然使用 UDP,但 TFTP 通过停止等待协议保证可靠:

发送方每发出一个数据块(带块号),就等待对方发回确认 PDU(ACK)

若在一定时间内没有收到 ACK,就重传该块

最后一块数据小于 512 字节时,接收方收到后仍要回 ACK,以标志结束

远程终端协议 TELNET

1. TELNET 的基本概念

TELNET:一种早期的远程终端协议(RFC 854 等),应用层协议;

主要作用:让用户坐在本地计算机前,通过网络像使用本地终端一样登录、操作远端主机。

工作方式:

在本地运行 TELNET 客户端;

远端主机上运行 TELNET 服务器;

二者之间建立一条 TCP 连接,用户的按键、命令经 TCP 发送到远端,远端主机的输出又通过 TCP 回显到本地屏幕。

用户主观感受:就像键盘和显示器直接连在远端主机上。

2. TELNET 与 NVT(Network Virtual Terminal)

不同操作系统对字符和控制符的处理不一样,例如:

文本一行结束:

有的系统用 CR(回车,Carriage Return);

有的用 LF(换行,Line Feed);

有的使用 CR-LF 组合;

终止程序:

有的系统用 Ctrl+C;

有的用 ESC,等等。

如果直接把这些各系统私有的控制符在网络上传来回传,双方很难理解彼此的命令。

为解决这个问题,TELNET 引入了网络虚拟终端 NVT(Network Virtual Terminal) 概念:

所有通过 TELNET 传输的数据,先转换成 NVT 格式:

使用 7 位 ASCII 码表示字符;

使用统一规定的控制码(如 CR、LF、CR-LF、ESC 等)

在对端收到后,再从 NVT 格式转换成本地系统的实际格式。

这样一来网络中只存在一种统一的终端表示,不同操作系统通过 NVT 做适配,实现互通。

3. TELNET 的选项协商(Option Negotiation)

TELNET 协议允许双方在连接建立后进行选项协商,比如:

是否回显;

是否支持某些扩展功能;

是否进行加密、压缩等。

协商过程是对等的:客户端和服务器都可以提出或拒绝某个选项。

由于安全性不足、缺乏加密,今天实际环境中 TELNET 的地位已经被 SSH 等安全协议取代,但理解 TELNET 对明白远程登录原理很有帮助。

电子邮件

电子邮件系统概述

(1)电子邮件的地位

电子邮件(E-mail)是互联网中应用最广的网络应用之一。

相比传统邮政,它具有:

发送速度快、价格低;

支持多媒体内容;

可自动分发给多个收件人;

与其他应用(BBS、论坛、企业系统)集成方便等。

(2)电子邮件系统的主要组成

图 6-16 画出了基本构成,主要有三部分:

用户代理 UA(User Agent)

就是用户使用的邮件客户端软件或 Web 界面,如 Outlook、Foxmail、Webmail 等;

提供写信、收信、阅读、管理邮件的界面。

邮件服务器(Mail Server)

每个用户的邮件最终都存放在某个邮件服务器上的邮箱中;

邮件服务器负责:

接收来自其他邮件服务器或用户代理的邮件;

把邮件分类存储到各个用户的邮箱;

支持用户用 POP3/IMAP 协议读取邮件;

运行 SMTP 进程负责邮件发送/转发。

邮件传输协议

SMTP(Simple Mail Transfer Protocol):用于在邮件服务器之间以及用户端 → 发送方邮件服务器之间传送邮件;

POP3/IMAP:用于接收方用户从自己的邮件服务器读取邮件。

(3)电子邮件收发流程

以 A 给 B 发邮件为例:

A 在自己的计算机上通过用户代理写好邮件,点击发送;

用户代理把邮件通过 SMTP 交给 A 所在的发送方邮件服务器;

发送方邮件服务器用 SMTP 协议与 B 所在的接收方邮件服务器建立 TCP 连接,把邮件投递过去;

B 需要收信时,使用 POP3 或 IMAP 客户端(用户代理的一部分),与 B 的邮件服务器建立连接,从 B 的邮箱中读取邮件。

注意:SMTP 负责"投递到对方邮箱",而 POP3 / IMAP 负责"从自己邮箱把信取到本机"。

电子邮件地址格式

TCP/IP 体系中电子邮件地址一般写成:用户名@邮件服务器域名

例如: xixieren@tsinghua.org.cn

@ 读作 "at",表示"在......上"

右侧是邮件服务器的域名

左侧是该服务器上用户的本地用户名(也就是该服务器上的邮箱名)

保证在全世界范围内唯一的是用户名和域名通过@符号连接起来所形成的整个字符串。

相关推荐
White_Can7 小时前
《计算机网络:体系结构》
计算机网络
蒙奇D索大7 小时前
【计算机网络】考研408 | 数据链路层的“安全卫士”:探秘检错编码之奇偶校验码
经验分享·笔记·计算机网络·考研·改行学it
爱思德学术8 小时前
中国计算机学会(CCF)推荐学术会议-C(计算机网络):IEEE WOWMOM 2026
计算机网络·多媒体·无线网络·移动网络
another heaven20 小时前
【计算机网络 HTTP 请求参数规范详解】
网络协议·计算机网络·http
树在风中摇曳1 天前
什么情况下会把 SYN 包丢弃?
计算机网络
梁辰兴1 天前
计算机网络基础:计算机网络概述
计算机网络·计算机·概述·计算机网络基础
元亓亓亓1 天前
考研408--计算机网络--day4--组帧&差错控制&可靠传输
计算机网络·考研·数据链路层
牢七1 天前
计算机网络
计算机网络
超级战斗鸡2 天前
计算机网络中的地址体系全解析(包含 A/B/C 类地址 + 私有地址 + CIDR)
网络·计算机网络