diff --git a/ComputerNetwork/Chapter6/README.md b/ComputerNetwork/Chapter6/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e19707aafaa07526a529a8406dd8acfe780bffb6 --- /dev/null +++ b/ComputerNetwork/Chapter6/README.md @@ -0,0 +1,344 @@ +# Table of Contents + +* [1 应用层概述](#1-应用层概述) +* [2 `C/S`方式与`P2P`方式](#2-cs方式与p2p方式) + * [2.1 `C/S`方式](#21-cs方式) + * [2.2 `P2P`方式](#22-p2p方式) +* [3 `DHCP`](#3-dhcp) + * [3.1 为什么需要`DHCP`](#31-为什么需要dhcp) + * [3.2 工作过程](#32-工作过程) + * [3.3 中继代理](#33-中继代理) +* [4 `DNS`](#4-dns) + * [4.1 简介](#41-简介) + * [4.2 顶级域名](#42-顶级域名) + * [4.3 域名空间](#43-域名空间) + * [4.4 域名服务器](#44-域名服务器) + * [4.5 域名解析过程](#45-域名解析过程) + * [4.5.1 递归查询](#451-递归查询) + * [4.5.2 迭代查询](#452-迭代查询) + * [4.6 高速缓存](#46-高速缓存) +* [5 文件传送协议`FTP`](#5-文件传送协议ftp) + * [5.1 简介](#51-简介) + * [5.2 基本工作原理](#52-基本工作原理) + * [5.2.1 主动模式](#521-主动模式) + * [5.2.2 被动模式](#522-被动模式) +* [6 电子邮件](#6-电子邮件) + * [6.1 简介](#61-简介) + * [6.2 `SMTP`基本工作过程](#62-smtp基本工作过程) + * [6.3 电子邮件信息格式](#63-电子邮件信息格式) + * [6.4 `MIME`](#64-mime) + * [6.5 邮件读取协议](#65-邮件读取协议) + * [6.6 基于万维网的电子邮件](#66-基于万维网的电子邮件) +* [7 万维网](#7-万维网) + * [7.1 简介](#71-简介) + * [7.2 `URL`](#72-url) + * [7.3 `HTTP`](#73-http) + * [7.3.1 简介](#731-简介) + * [7.3.2 请求报文格式](#732-请求报文格式) + * [7.3.3 响应报文格式](#733-响应报文格式) +* [8 `Cookie`](#8-cookie) + * [8.1 简介](#81-简介) + * [8.2 基本工作原理](#82-基本工作原理) +* [9 代理缓存服务器](#9-代理缓存服务器) + + +# 1 应用层概述 +在应用层之下的各种中: + +- 物理层解决了使用何种信号传输比特的问题 +- 数据链路层解决了在一个网络或一个链路中分组的传播问题 +- 网络层解决了在多个网络中传输的问题 +- 传输层解决了应用进程之间的通信问题 + +而应用层解决通过应用进程的交互来实现特定网络应用的问题。 + +# 2 `C/S`方式与`P2P`方式 +## 2.1 `C/S`方式 +也就是客户/服务器方式,客户和服务器指的是通信中涉及的两个应用进程,描述的是进程之间服务和被服务的关系,客户是服务请求方,而服务器是服务提供方,服务器总是处于运行状态并等待客户的请求。 + +基于`C/S`方式的应用服务通常是服务集中型的,应用服务集中在比客户机少得多的服务器计算机上,因此常常会出现服务器无法应对过多客户机请求的状况,常见的解决方法是使用集群。 + +## 2.2 `P2P`方式 +全称`Peer-to-Peer`,在`P2P`中,没有固定的服务请求者和服务提供者,分布在网络边缘系统中的应用进程是对等的,对等方之间相互通信。基于`P2P`的应用是服务分散型的,服务并不是集中在少数几个服务器计算机中,而是分散于各个地方。 + +`P2P`的一个特点是可扩展性,系统的性能不会因规模的增大而降低,另外`P2P`具有成本上的优势。 + +# 3 `DHCP` +## 3.1 为什么需要`DHCP` +使用`DHCP`可以减少手工配置的操作,不需要手动给网络中的各个主机手动配置`IP`地址,而只需一台`DHCP`服务器即可,各个主机开机就启动`DHCP`,通过`DHCP`自动获取网络配置信息,包括`IP`地址、子网掩码、默认网关、`DNS`服务器等: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210529195809829.png) + +## 3.2 工作过程 +`DHCP`是一个应用层协议,基于`UDP`,服务器使用`67`端口,客户端使用`68`端口,工作流程如下: + +- 客户端启用`DHCP`后,发送`DHCP`发现报文,其中源`IP`为`0.0.0.0`(因为此时客户端还没有`IP`地址),目标`IP`为`255.255.255.255`,也就是广播。另外`DHCP`发现报文中封装有事务`ID`和客户端的`MAC`地址 +- 服务器收到后,查看有没有该`MAC`对应的配置信息,如果有就使用,如果没有就用默认配置信息构建并发送`DHCP`提供报文,该报文的源`IP`为`DHCP`服务器自己的`IP`,而目的`IP`为`255.255.255.255`,因为主机还没有`IP`地址。另外在该提供报文中,还封装有`IP`地址、子网掩码、地址租期、默认网关、`DNS`服务器、事务`ID`等信息 +- 客户端收到提供报文后,会检查事务`ID`是否与自己之前发送的发现报文中的事务`ID`一致,若一致,则接受报文,否则丢弃报文。另一方面,如果有多台`DHCP`服务器,则客户端会收到多个`DHCP`提供报文,此时客户端会选择其中一个,并向选择的`DHCP`服务器发送请求报文 +- `DHCP`请求报文中的源`IP`并不是提供报文中的`IP`,使用该`IP`之前,需要得到`DHCP`服务器的同意,之后才能使用`DHCP`服务器租用的`IP`地址。广播报文中的源`IP`为`0.0.0.0`(此时还没有分配`IP`地址),目的地址为`255.255.255.255`(这样不用向每一个`DHCP`服务器发送单播请求报文)。`DHCP`请求报文中包含客户端`MAC`地址、事务`ID`、接受的租约中的`IP`地址、`DHCP`服务器`IP`等信息 +- `DHCP`服务器收到`DHCP`请求报文后,回送`DHCP ACK`报文,原地址为`DHCP`服务器地址,目的地址为`255.255.255.255` +- 客户端收到`DHCP ACK`报文后,会使用`ARP`检测该`IP`是否被同一个网络中的其他主机使用,若没有,则使用该`IP`地址,若有,则给`DHCP`服务器发送`DHCP DECLINE`报文撤销租约,并重新发送`DHCP`发现报文 + +这样客户端就可以租约到`DHCP`的`IP`地址了,下面是续租的过程: + +- 经过`0.5倍`租用期时间,客户端会重新向`DHCP`服务器发送`DHCP`请求报文,请求续租,若服务器同意,回送`DHCP ACK`报文,`IP`地址得到续租,并更新租用期,若服务器不同意,回送`DHCP NACK`报文,此时客户端需要立刻停止使用正在租用的`IP`地址,并重新发送`DHCP`发现报文 +- 若经过`0.5`倍租用期时间,客户端发送的`DHCP`请求报文没有被服务器响应,则到了`0.875倍`租用时间再次发送`DHCP`请求报文,如果还是没有响应,则当租用期到达后自动停止使用租用的`IP`地址,并重新发送`DHCP`发现报文 +- 另外,客户端可以随时提前终止租用期,只需要向服务器发送`DHCP`释放报文段即可 + +整个流程图如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531090746515.png) + +另外,关于`ARP`,有两个使用到`ARP`的地方: + +- 服务器回送提供报文:服务器选择`IP`地址的时候,会使用`ARP`确保`IP`地址未被其他主机占用 +- 客户端接受`IP`地址:接受之前也会使用`ARP`确保`IP`地址未被占用 + +## 3.3 中继代理 +中继代理用于`DHCP`服务器与客户端在不同的局域网中的网络拓补中,如下图所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531091232781.png) + +客户端如果想要获取`IP`地址,需要先发送`DHCP`发现报文,目的`IP`为广播地址,会被路由器丢弃: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531091324214.png) + +解决方法就是使路由器成为中继代理,并给路由器配置`DHCP`服务器中的`IP`地址: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531091418308.png) + +使用中继代理的其中一个好处是可以减少`DHCP`服务器的数量。 + +# 4 `DNS` +## 4.1 简介 +`DNS`的域名采用层次树状结构的域名结构,域名的结构由若干个分量组成,各分量之间用`.`分隔: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531091925147.png) + +要求: + +- 每一级域名不超过`63个字符`,不区分大小写 +- 级别最高的域名位于右边 +- 整个域名不超过`255字符` + +## 4.2 顶级域名 +顶级域名分三类: + +- 国际顶级域名:比如`cn`表示中国,`us`表示美国 +- 通用顶级域名:比如`com`表示公司企业、`net`表示网络服务、`org`表示非营利性组织等等 +- 反向域`arpa`:用于反向域名解析,`IP`地址反向解析为域名 + +## 4.3 域名空间 +域名空间其实是一棵树: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531092510595.png) + +## 4.4 域名服务器 +域名和`IP`地址的关系必须保存在域名服务器中,供其他所有应用查询,`DNS`使用分布在各地的域名服务器来实现域名到`IP`的转换。域名服务器可以分为以下四种类型: + +- 根域名服务器:最高层次的域名服务器,每个根域名服务器都知道所有的顶级服务器的域名以及`IP`地址,因特网上共有`13`个根域名服务器,严格意义上来说,是`13`个分布在世界各地的计算机构成的服务器集群。本地域名服务器向根域名查询的时候,路由器就会把查询请求报文转发到距离客户端最近的一个根域名服务器。一般情况下根域名服务器不会直接解析域名,而是返回该域名所属的顶级域名的服务器的`IP`地址 +- 顶级域名服务器:管理在该顶级域名服务器注册的所有二级域名,收到查询请求的时候给出最后的结果或者下一级权限域名服务器的`IP`地址 +- 权限域名服务器:管理某个区的域名,还知道下级域名服务器的地址 +- 本地域名服务器:当一个主机发出`DNS`请求报文的时候,这个报文首先被送往该主机的本地域名服务器,本地域名服务器起着代理的作用,会将查询请求报文转发到根域名、顶级域名、权限域名服务器。本地域名服务器也叫默认域名服务器,离用户较近,一般不超过几个路由器的距离 + +## 4.5 域名解析过程 +有两种方式: + +- 递归查询 +- 迭代查询 + +### 4.5.1 递归查询 +图示如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/2021053111244270.png) + +- 主机向本地服务器进行递归查询 +- 本地服务器采用递归查询方式向根域名服务器查询 +- 根域名服务器也采用递归查询方式向顶级域名服务器查询 +- 顶级域名服务器也采用递归查询方式向权限域名服务器查询 +- 权限域名服务器找到`IP`后,先返回顶级域名服务器 +- 再返回根域名服务器 +- 再返回本地域名服务器 +- 最后返回用户主机 + +### 4.5.2 迭代查询 +图示如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531112755216.png) + +- 本机先向本地域名服务器进行递归查询 +- 本地域名服务器采用迭代查询,查询根域名服务器,根域名服务器返回下一次应查询的顶级服务器的`IP`地址 +- 本地域名服务器再次采用迭代查询,查询顶级域名服务器,顶级域名服务器返回下一次应查询的权限域名服务器的`IP`地址 +- 本地域名服务器最后查询权限域名服务器,权限域名服务器返回域名对应的`IP`,并返回给本地域名服务器 +- 本地域名服务器将结果返回给主机 + +## 4.6 高速缓存 +为了提高`DNS`的查询效率,并减轻域名服务器的压力,在域名服务器中采用了高速缓存,存放最近查询过的域名以及从何处获得的域名映射信息记录: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531113312217.png) + +另外由于映射关系并不是永远不变,因此域名服务器需要为每个映射设置合理的过期时间。 + +# 5 文件传送协议`FTP` +## 5.1 简介 +`FTP`是使用的最广泛的文件传送协议,提供了交互式的访问,允许客户指明文件的类型和格式,并允许文件具有存取权限。`FTP`屏蔽了各计算机系统的细节,适合于在异构网络中任意计算机之间传送文件。 + +## 5.2 基本工作原理 +有两种模式: + +- 主动模式 +- 被动模式 + +### 5.2.1 主动模式 +主动模式就是建立数据通道的时候`FTP`服务器主动连接`FTP`客户,步骤如下: + +- `FTP`客户随机选择一个端口号发起`TCP`连接,连接服务器的`21`端口,这个连接用于传送控制命令 +- 当有数据需要进行传输的时候,客户端通过“传送控制命令”的连接告知服务器与自己的另一个临时端口,该连接由服务器发起,通过源端口`20`,目的端口为客户端发送的临时端口,该连接用于传送数据,当数据传送完成的时候关闭 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531114954295.png) + +- 控制连接在整个会话期间一直保持打开,用于传送控制命令 +- 数据连接用于文件传输,每次文件传输的时候才建立,传输结束就关闭 + +### 5.2.2 被动模式 +主动模式与被动模式的相同之处是都是由客户端发起的主动连接,用于传送控制命令,而不同之处是,数据传送的时候`FTP`服务器被动等待客户端的连接,而不是客户端主动连接。 + +数据传送的时候: + +- 客户端通过命令通道告知服务器打开某个临时端口 +- 客户端再次随机选择端口,与服务器的某个临时端口连接 +- 进行数据传输 +- 传输完成后关闭 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210531115621600.png) + +# 6 电子邮件 +## 6.1 简介 +电子邮件系统采用`C/S`方式,三个主要组成构件为: + +- 用户代理:用户与电子邮件系统的接口 +- 邮件服务器:功能是发送和接收邮件,同时维护用户的邮箱 +- 协议:包括发送协议(`SMTP`等)和接收协议(`POP3`、`IMAP`等) + +如果发送协议使用`SMTP`,接收协议使用`POP3`,则基本流程如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601143323687.png) + +- 发送方用户代理与发送方邮件服务器建立`TCP`连接,并使用`SMTP`发送邮件 +- 发送方邮件服务器与接收方邮件服务器建立`TCP`连接,并使用`SMTP`发送邮件 +- 接收方用户代理与接收方邮件服务器建立`TCP`连接,并使用`POP3`读取邮件 + +## 6.2 `SMTP`基本工作过程 +`SMTP`全称`Simple Mail Transfer Protocol`,简单邮件传送协议,基本工作过程如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601143924911.png) + +- 建立`TCP`连接后服务器主动推送就绪应答 +- 客户端告知自己域名,服务器检查后若合法返回`250` +- 客户端告知服务器发件人,服务器检查后若合法返回`250` +- 客户端告知服务器收件人,服务器检查后若合法返回`250` +- 客户端告知准备发送邮件内容,服务器准备好后返回`354` +- 客户端开始发送邮件内容,发送完毕后再发送结束符,服务器收到后返回`250` +- 客户端请求断开连接,服务器返回`221` + +以上省略了认证过程,还省略了应答代码后面一般都跟随的简单的描述信息。 + +## 6.3 电子邮件信息格式 +一个电子邮件分为两部分: + +- 信封 +- 内容:由首部和主体构成 + +![在这里插入图片描述](https://img-blog.csdnimg.cn/202106011449250.png) + +## 6.4 `MIME` +因为`SMTP`协议只能传送`ASCII`码文本数据,不能传送可执行文件或其他的二进制对象,为了解决这个问题就提出了`MIME`,也就是多用途因特网邮件扩展,用途如下所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601145130435.png) + +`MIME`增加了5个新的邮件首部字段,定义了许多邮件内容格式,也定义了传送编码。 + +## 6.5 邮件读取协议 +常用的邮件读取协议有: + +- `POP`:邮局协议(`Post Office Protocol`),`POP3`是第三个版本,是一个非常简单,功能有限的邮件读取协议,用户不允许在邮件服务器上管理自己的邮件 +- `IMAP`:因特网邮件访问协议(`Internet Message Access Protocol`),`IMAP4`是第四个版本,功能比`POP3`强大,用户可以在自己的计算机上操作邮件服务器中的邮箱 + +区别: + +- 两者都是基于`TCP`的`C/S`方式 +- `POP3`使用端口`110` +- `IMAP4`使用端口`143` + +## 6.6 基于万维网的电子邮件 + +如图所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601150253232.png) +# 7 万维网 +## 7.1 简介 + +万维网`World Wide Web`是一个大规模、联机式的信息储藏所,是运行在因特网上的一个分布式应用,利用网页之间的超链接将不同的网页链接成一张逻辑上的信息网。 + +## 7.2 `URL` +`URL`是统一资源定位符的缩写,格式如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601150824537.png) + +## 7.3 `HTTP` +### 7.3.1 简介 +`HTTP`是超文本传输协议,其中: + +- `HTTP1.0`采用非连接方式,每次一浏览器要请求一个文件都要与服务器建立`TCP`连接,收到响应后立即关闭 +- `HTTP1.1`采用持续连接方式,还能使用流水线方式工作,也就是浏览器收到响应报文之前就能够连续发送多个请求报文 + +### 7.3.2 请求报文格式 +![在这里插入图片描述](https://img-blog.csdnimg.cn/2021060115141673.png) + +由请求行、首部行以及实体主体组成: + +- 请求行:包含方法(`GET`、`POST`等)、`URL`、版本 +- 首部行:可以有多个,格式为`字段名: 值` +- 实体主体:通常不用 + +比如: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601151604673.png) + +支持的请求方法如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601151644828.png) + +### 7.3.3 响应报文格式 +也是分为三个部分: + +- 状态行 +- 首部行 +- 实体主体 + +格式与请求报文类似: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601192933685.png) + +常见状态行如下: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601193020867.png) + +# 8 `Cookie` +## 8.1 简介 +`Cookie`是一种对无状态的`HTTP`进行状态化的技术,可以使用`Cookie`记录用户的信息。 + +## 8.2 基本工作原理 +如图所示: + +![在这里插入图片描述](https://img-blog.csdnimg.cn/20210601193323937.png) + +- 客户端首先发起`HTTP`请求,服务器收到后,会为该客户创建一个唯一的`Cookie`识别码,并在`HTTP`响应中返回给客户端,其中的响应头包含`Set-Cookie:Cookie识别码` +- 客户端收到后,将`Cookie`保存在文件中,当下次需要发送`HTTP`请求的时候,自动从文件中读取信息,并在请求报文中带上`Cookie`识别码 +- 服务器收到后,从`Cookie`识别码识别出该用户,返回个性化的`HTTP`响应 + +# 9 代理缓存服务器 +当主机通过`URL`请求资源的时候,会通过代理服务器(存放缓存)发送请求,而代理服务器会首先判断有没有缓存: + +- 如果有缓存:判断是否过期,若没有过期直接返回缓存,若过期通过`URL`请求资源,如果返回的是`HTTP`响应是`304`,也就是资源没有修改,代理服务器会更新缓存时间并返回原来的缓存给主机,如果缓存修改,则代理服务器会收到新的`HTTP`响应报文,其中包含新的数据,代理服务器缓存后再发送给主机 +- 如果没有缓存:通过`URL`获取资源,并缓存资源最后返回主机 diff --git a/ComputerNetwork/README.md b/ComputerNetwork/README.md index 7473f5353c11df390b0060f5a283fa24400927fd..b840a4883d5d62156c50c982d54574b2e1fbc2d1 100644 --- a/ComputerNetwork/README.md +++ b/ComputerNetwork/README.md @@ -5,3 +5,4 @@ - [第三章:数据链路层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter3/README.md) - [第四章:网络层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter4/README.md) - [第五章:运输层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter5/README.md) +- [第六章:应用层](https://github.com/2293736867/CSBookNotes/blob/main/ComputerNetwork/Chapter6/README.md)