应用层
网络层应用模型
应用层对应用程序的通信提供服务
应用层协议的定义
应用进程交换的报文类型——即该报文是请求报文( Request )还是响应报文( Response )
各种报文类型的语法,如报文中的各个字段及其详细描述
字段的含义,即包含在字段中的信息的含义
进程何时、如何发送报文,以及对报文进行响应的规则
应用层的功能
文件传输、访问和管理—— FTP
电子邮件—— SMTP 、 POP3 、 *IMAP
虚拟终端—— HTTP
查询服务、远程作业登录—— DNS
常用的网络通信模型
客户-服务器模型( C/S 模型)
对等模型( P2P 模型)
C/S 模型
该模型下网络通信的双方分为客户( Client )和服务器( Server )
服务器:提供计算服务的设备
服务器具有以下特点:
永久提供服务,提供 24 小时不间断的服务(服务器正常运行期间)
需要有一个永久性的地址或者域名
中心服务器损坏对应全局有较大影响
服务器负载大
客户:请求计算服务的主机
客户具有以下特点
与服务器通信,使用服务器提供的服务
可间歇性接入网络(不需要一直在线)
可能使用多个 IP 地址进行连接
不与其他客户机直接通信
C / S 模型主要应用于 Web 服务、文件传输 FTP 、远程登录、电子邮件等
P2P 模型
在这个模型中,网络上的每台主机都具有上传下载的功能
不存在永远在线的服务器
每个主机既可以提供服务,也可以请求服务;即每个主机既是客户,也是服务器
各节点间可以分摊负载
任意端 / 系统 / 节点之间可以直接通信
节点间歇性接入网络
节点可能改变 IP 地址
可拓展性好(可以随时加入新节点)
网络健壮性好(节点失败后,不会影响整个网络的运行)
DNS 域名解析系统
对于直接使用 IP 地址访问服务,不方便记忆,因此通过引入域名这一概念来方便人们记忆网站
域名解析系统( DNS )是一个分布式数据库,它将域名映射到 IP 地址上,实际上访问的还是 IP 地址
DNS 工作流程
网络中存在多个 DNS 服务器节点
访问特定网站时,会先通过 DNS 服务器将域名解析为 IP 地址,然后再通过 IP 地址访问网站
DNS 请求为 UDP 协议,端口为 53
域名
域名是一个由多个部分组成的字符串,每个部分之间用点号( . )分隔
域名的每个部分称为域名标签( Domain Label )
域名不区分大小写
域名的每个标签只能使用字母、数字和减号( - )
域名的第一个标签和最后一个标签不能是减号
从右到左,由( . )分隔的第一个服务为顶级域名( TLD ),往后分别为二级域名、三级域名……
在域名最后实际上是一个点号( . ),这个叫做“根”
顶级域名分为三种
国家顶级域名: cn 、 uk 、 us 等
通用顶级域名: com 、 org 、 net 、 edu 、 gov 等
基础结构域名 / 反向域名: in-addr.arpa 、 ip6.arpa ( ip 地址解析到域名)
二级域名分为两类
类别域名: ac 、 com 、 org 、 net 等
行政区域名,用于我国各省、自治区、直辖市: bj 、 js 等
接下去就是三级域名,一般可以是自己组织机构的名称或简写
四级域名一般可以填该域名所承担的功能如:
www :表示该域名是一个网站
mail :表示该域名是一个邮箱
ftp :表示该域名是一个 ftp 服务器
其他:根据实际情况填写
域名服务器( DNS )
域名服务器维护着一个域名数据库,数据库中存储着域名和 IP 地址的映射关系
域名服务器根据域名的层级不同,分为以下几种:
- 根域名服务器
当本地域名服务器无法查询到记录时,就会向根域名服务器发起查询
根域名服务记录着所有顶级域名服务器的地址
- 顶级域名服务器
负责管理由该服务器注册的所有二级域名
核心功能:
存储权威记录:权限域名服务器保存着其所负责域名的各类 DNS 记录,如 A 记录(将域名映射到 IPv4 地址)、AAAA 记录(映射到 IPv6 地址)、MX 记录(指定邮件服务器)等。这些记录由域名的管理者设置和维护,具有权威性,即其他 DNS 服务器会以其提供的信息为准。
响应查询请求:当递归域名服务器(或其他 DNS 服务器)查询某个域名的解析信息时,会向该域名的权限域名服务器发送请求,权限域名服务器会返回对应的权威记录。
- 权限域名服务器
权限域名服务器(Authoritative Name Server)是域名系统(DNS)中的核心组件,负责存储并提供特定域名的权威 DNS 记录,是域名解析过程中不可或缺的一环。
- 本地域名服务器
当一个主机发出 DNS 查询请求时,这个查询请求就会先发给本地域名服务器,每个小范围局域网一般都会配置本地 DNS 服务器提高查询效率
域名解析过程
主要分为两种查询过程
假设目前我需要访问 a.b.example.com 这个域名
- 递归查询
递归查询的做法是,先向本地域名服务器发起查询,如果本地域名服务器没有记录,那么本地域名服务器会去向根域名服务器发起查询,以此类推,层层查询,最后返回记录也是层层返回
- 迭代查询
而迭代查询的做法是:查询本地服务器无果,便会去查询根服务器,而根服务器会返回对应的顶级域名服务器给本地服务器,服务器再去查询顶级域名服务器,以此类推直到查询到对应 IP 地址,本地域名服务器就会将结果返回给查询主机
两者区别在于去查询记录的主体在过程中的不同,简单说:递归查询是 “你问我,我帮你查到最终答案”;迭代查询是 “你问我,我告诉你该找谁问,你自己去问”。在实际解析中,两者通常配合使用(用户→递归服务器是递归查询,递归服务器→根 / 顶级 / 权威服务器是迭代查询)。
所有域名解析只要成功就会存到对应的高速缓存中,下次查询就会直接从缓存中获取,而不会再去查询域名服务器;主机包括各 DNS 服务器都有这样的功能
同时,缓存也会设置一个过期时间,过期后会删除这一表项,以确保缓存中的记录是最新且正确的
文件传输协议
文件传输协议分为两种,分别为 FTP 、 TFTP
- 文件传输协议 FTP ( File Transfer Protocol ) 👍
提供不同种类主机系统(软、硬件系统等都可以不同)之间的文件传输能力
- 简单文件传输协议 TFTP ( Trivial File Transfer Protocol )
面向小文件,简单,效率高
FTP 👍
FTP 是一种基于 C / S 模型的协议,用户通过客户端上的一个程序和服务端上的程序相连接
依照 FTP 协议提供服务、进行文件传输的计算机就是 FTP 服务器
连接 FTP 服务器,遵循 FTP 协议与服务器传输文件的电脑就是 FTP 客户端
FTP 采用 TCP 传输协议进行可靠传输
服务器进程通常由一个主进程和多个从属进程组成
FTP 一般有两个进程提供服务,一个是控制进程,一个是数据传输进程,这两者都是从属进程,控制进程始终保持运行状态(在 FTP 会话存在过程中,但会话关闭随之销毁),而数据传输进程则根据需要创建和销毁
FTP 工作原理
登录 FTP 服务器 21 端口,需要提供用户名和密码,但也有部分 FTP 服务器支持采用匿名登录(即使用 anonymous 作为用户名,密码任意进行登录操作,并且不需要鉴权等操作)
客户端发起连接请求,服务器端接受连接请求,建立连接
客户端发起文件传输请求,控制进程会在特定端口创建一个数据传输进程,数据传输进程会在特定端口进行数据传输(主动模式下端口号为 20 ,而被动模式下会分配一个大于 1024 的端口号进行数据传输)
传输完成后,控制进程会关闭数据传输进程,等待下一条指令
客户端主动发出断开连接请求,服务器端接受请求,关闭连接,控制进程销毁
FTP 的传输模式(仅了解)
文本模式: ASCII 模式,以文本序列传输数据
二进制模式: BINARY 模式,以二进制序列传输数据
电子邮件
电子邮件通常通过 SMTP 协议进行发送,通过 POP3 或 IMAP 协议进行接收,并且存储在对应的电子邮件服务器上
电子邮件的格式
需要指明发件人、收件人、主题、内容等信息
收发件人一般填写的是邮箱地址、格式一般为: 用户名@域名
SMTP 协议
SMTP 规定了两个相互通信的 SMTP 进程之间如何交换信息
SMTP 进程分为两种,一种是 SMTP 客户端进程(负责发送邮件),一种是 SMTP 服务器进程(负责接收邮件)
SMTP 规定了 14 条命令(几个字母)和 21 种应答信息(三位数字代码 + 简单文字说明)
采用 TCP 协议进行可靠传输,端口号 25
发送流程大致如上:分为三个步骤
- 建立连接
发件人将编辑好的邮件发送到 SMTP 服务器, SMTP 服务器会定期检索是否有邮件需要发送,一旦发现有邮件需要发送,就会先和目的 SMTP 服务器建立 TCP 连接,完成 TCP 连接后,目的 SMTP 服务器会返回 220 Service Ready 应答信息,发送服务器会回复一个 HELLO 信息并附带自己的主机名,此时若接收服务器有能力接收会返回 250 OK ,反之返回 421 Service not available (此时若在规定时间内未能将邮件顺利发出,发送的邮件服务器会将对应的发送失败信息返回给发件人)
邮件发送(分别以 A 、 B 表示发送服务器和接收服务器)
A → B : MAIL FROM <xxx1@xxx1.com>
B → A : 250 OK 或 451 、 452 、 500
A → B : RCPT TO <xxx2@xxx2.com>
B → A : 250 OK 或 550 NO SUCH USER HERE
A → B : DATA
A → B : 354 START MAIL INPUT; END WITH <CR><LF>.<CR><LF>
A → B :
邮件内容A → B : .
B → A : 250 OK
释放连接
A → B : QUIT
B → A : 221 Service closing transmission channel
SMTP 的缺点
不能传输可执行文件或者其他二进制对象
仅限于传输 7 位 ASCII 码,不能传输其他非英语国家的文字
SMTP 服务器会拒绝超过一定长度的邮件
MIME
为了解决上述问题,SMTP 协议引入了 MIME ( Multipurpose Internet Mail Extensions )协议
MIME 是指在邮件头中的 MIME 头部字段来表明发送内容的类型并且通过特殊编码,将非 ASCII 码的类型转换为 ASCII 码
其中包含的字段主要有: Content-Type 、 Content-Transfer-Encoding 、 Content-Disposition 等
POP3 协议
POP3 协议( Post Office Protocol )同样采用 TCP 连接、 C / S 模型,用户通过客户端上的一个程序和服务端上的程序相连接
端口采用 110
POP3 有两种工作模式:第一种是在客户端下载并在服务端保存邮件,第二种是在客户端下载并删除邮件
IMAP 协议
IMAP 协议( Internet Message Access Protocol )比 POP3 协议更加复杂
IMAP 允许用户在客户端查看、操作服务器上的邮件,而 POP3 协议只能在客户端下载邮件
IMAP 可以只阅读邮件头的信息,根据各种信息确定自己想要看的邮件再进行下载
对于附件,IMAP 协议也可以选择性下载
基于互联网的电子邮件系统
目前大多采取的方案,即不需要专门的软件来进行邮件的发送和接收,而是通过浏览器来进行
客户端到达邮件服务器的协议也变更为 HTTP 协议,邮件服务器之间的通信仍然采用 SMTP 协议
WWW 万维网
一个网页由 1 个 HTML 文件和 1 个或多个相关的文件(如图片、视频、音频等)组成
浏览器访问网页的过程 👍
用户输入网址(域名)
浏览器通过 DNS 服务器将域名解析为 IP 地址 (并且将
域名 → IP缓存在本地)浏览器与
< Web 服务器 IP 地址:80 端口>建立 TCP 连接浏览器在握手 ③ 中携带 HTTP 请求报文(指明要访问哪个 html 网页)
服务器返回 HTTP 响应报文(携带 html 文件)
如果 html 引用了 n 个元素,还需要 n 组 HTTP 请求 & 响应(持续、非持续工作方式有所区别)
持续连接和非持续连接的区别 👍
- 非持续连接
与之前的 TCP 连接相同,在握手 ③ 中携带 HTTP 请求报文,随后 Web 服务器返回 html 文件,接收完成后释放 TCP 连接,浏览器解析后发现该网页还需要引用其他元素,如图片、视频、音频等,浏览器会重新建立 TCP 连接、接收数据并释放,重复以上过程,直到所有元素都被引用完成,过程中会多次建立释放 TCP 连接
注意
实际上可以在还没释放完连接时就迅速建立下一次连接,在这种情况下,非持续方式每请求一个文件至少需要 2 倍 RTT
HTTP 请求报文通常很小,一般不考虑 TCP 报文段传输时延
HTTP 响应报文通常比较大,因此需要考虑 TCP 报文段传输时延
- 持续连接,非流水线
与非持续连续相似,不同在于接受完 HTTP 响应报文后不会释放 TCP 连接,而是继续发送 1 个 HTTP 请求报文并接收下 1 个 HTTP 响应报文,直到没有资源需要加载或者到达设定的空闲等待时间,过程中只会建立一次 TCP 连接,一次 HTTP 请求报文对应 1 个 HTTP 响应报文,一来一回
- 持续连接,流水线
与持续连接非流水线相似,区别在于一次性将多个 HTTP 请求报文发送出去,服务器处理完者一系列报文并返回一系列的资源
握手 ③ 发送获取 html 请求,服务器响应 html 文件,浏览器解析 html 文件发现引用了 n 个元素,浏览器会统一发送需要的一系列资源 HTTP 请求报文,服务器响应一系列的资源给浏览器,图中不再需要有来有回地发送请求报文,过程中需要发送 2 次 HTTP 请求报文,第一次仅请求 html 文件,第二次则发送一系列的资源 HTTP 请求报文,然后等待资源接收,全部接收完成后,等待一段时间释放连接
HTTP / 1.0 默认采用非持续连接
HTTP / 1.1 默认采用持续连接,但是可以通过 Connection 字段来改变,将 Connection 字段改为 Close 可以实现非持续连接
HTTP 超文本传输协议
HTTP 报文各字段含义
- 请求报文
| 字段名 | 含义 | 备注 |
|---|---|---|
| 方法 | 请求的类型,希望服务器做哪些操作 | 如: GET 、 POST 、 PUT 、 DELETE 等 |
| URL | 请求的资源的路径或请求的服务路径 | 如: /index.html 、 /img/1.jpg 等 |
| 协议版本 | 通信使用的 HTTP 版本 | 如: HTTP / 1.1 |
| 首部字段名 | 请求首部携带的参数名称 | |
| 值 | 请求首部携带的参数值 | |
| 实体主体 | 通常请求报文不携带实体主体,特定情况下会携带,比如上传服务 |
- 响应报文
| 字段名 | 含义 | 备注 |
|---|---|---|
| 协议版本 | 通信使用的 HTTP 版本 | 如: HTTP / 1.1 |
| 状态码 | 服务器对请求的处理结果 | 如: 200 、 404 等 |
| 短语(状态码描述) | 状态码的文字描述 | 如: OK 、 Not Found 等 |
| 首部字段名 | 响应首部携带的参数名称 | |
| 值 | 响应首部携带的参数值 | |
| 实体主体 | 响应的资源或服务数据,特定场合也可以不携带数据 | 如:图片资源、视频资源等 |
- 一些状态码的含义
| 状态码 | 含义 |
|---|---|
| 1xx | 信息性状态码 |
| 2xx | 成功状态码 |
| 3xx | 重定向状态码 |
| 4xx | 客户端错误状态码 |
| 5xx | 服务器错误状态码 |
- 请求报文中常用的方法
| 方法 | 含义 |
|---|---|
| GET | 请求获取资源 |
| POST | 请求提交资源,通常用于登录、注册、提交表单等 |
| PUT | 请求更新资源 |
| DELETE | 请求删除资源 |
| HEAD | 请求获取资源的元数据,和 GET 类似,但是不返回实体主体,仅有头部信息 |
| OPTIONS | 请求查询服务器的支持功能 |
| TRACE | 请求回显服务器收到的请求 |
| CONNECT | 请求建立隧道连接,用于代理服务器 |
Cookie 的作用
通常请求报文中可能含有 Cookie 字段,该字段的具体作用如下
客户端刚开始访问 Web 服务器时(如登录个人账户),服务器会为该用户生成一个 Cookie 识别码,并通过 HTTP 响应报文返回给客户端
客户端如果已获得 Cookie,就在每次发出 HTTP 请求时携带 Cookie,亮明身份
Cookie 识别码相当于给网站的访客制作一张“临时身份证”(一段时间后会过期)。 Cookie 识别码需要分别缓存在 Web 服务器、客户端
更新日志
f247f-于7e3ba-于
