Update 计算机网络 - 应用层.md

重新绘制配图,补充 DNS 解析和输入 URL 之后的过程。
This commit is contained in:
CyC2018
2026-10-26 22:04:19 +08:00
parent 2a364648c9
commit 5b40bdd263
7 changed files with 32 additions and 7 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

+32 -7
View File
@@ -15,6 +15,7 @@
* [2. ARP 解析 MAC 地址](#2-arp-解析-mac-地址)
* [3. DNS 解析域名](#3-dns-解析域名)
* [4. HTTP 请求页面](#4-http-请求页面)
* [参考资料](#参考资料)
<!-- GFM-TOC -->
@@ -24,7 +25,11 @@ DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/b54eeb16-0b0e-484c-be62-306f57c40d77.jpg"/> </div><br>
以解析 www.example.com 为例:主机先查浏览器缓存、操作系统缓存和 hosts 文件,没有命中就向本地 DNS 服务器查询。本地 DNS 服务器依次询问根服务器、com 顶级域服务器和 example.com 的权威服务器,前两者只返回下一级服务器的地址,权威服务器返回最终的 IP 地址。
<div align="center"> <img src="pics/dns-resolve.png" width="760px"/> </div><br>
主机到本地 DNS 服务器是递归查询,主机只等最终结果;本地 DNS 服务器到其它服务器是迭代查询,由它自己一步步问下去。每一级的结果都按 TTL 缓存,所以大多数查询在本地 DNS 服务器甚至主机上就能得到结果。
DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP 进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。在两种情况下会使用 TCP 进行传输:
@@ -42,11 +47,9 @@ FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件:
- 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0\~1023 是熟知端口号。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/03f47940-3843-4b51-9e42-5dcaff44858b.jpg"/> </div><br>
- 被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/be5c2c61-86d2-4dba-a289-b48ea23219de.jpg"/> </div><br>
<div align="center"> <img src="pics/ftp-modes.png" width="760px"/> </div><br>
主动模式要求客户端开放端口号给服务器端,需要去配置客户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为开放了过多的端口号。
@@ -63,7 +66,7 @@ DHCP 工作过程如下:
3. 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/23219e4c-9fc0-4051-b33a-2bd95bf054ab.jpg"/> </div><br>
<div align="center"> <img src="pics/dhcp.png" width="780px"/> </div><br>
## 远程登录协议
@@ -77,13 +80,13 @@ TELNET 可以适应许多计算机和操作系统的差异,例如不同操作
邮件协议包含发送协议和读取协议,发送协议常用 SMTP,读取协议常用 POP3 和 IMAP。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/7b3efa99-d306-4982-8cfb-e7153c33aab4.png" width="700"/> </div><br>
<div align="center"> <img src="pics/email-flow.png" width="760px"/> </div><br>
### 1. SMTP
SMTP 只能发送 ASCII 码,而互联网邮件扩充 MIME 可以发送二进制文件。MIME 并没有改动或者取代 SMTP,而是增加邮件主体的结构,定义了非 ASCII 码的编码规则。
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/ed5522bb-3a60-481c-8654-43e7195a48fe.png" width=""/> </div><br>
<div align="center"> <img src="pics/mime.png" width="720px"/> </div><br>
### 2. POP3
@@ -101,14 +104,31 @@ IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删
| 动态主机配置协议 | DHCP | 67/68 | UDP | |
| 简单网络管理协议 | SNMP | 161/162 | UDP | |
| 文件传送协议 | FTP | 20/21 | TCP | 控制连接 21,数据连接 20 |
| 安全外壳协议 | SSH | 22 | TCP | |
| 远程终端协议 | TELNET | 23 | TCP | |
| 超文本传送协议 | HTTP | 80 | TCP | |
| 超文本传送安全协议 | HTTPS | 443 | TCP | HTTP/3 使用 UDP |
| 简单邮件传送协议 | SMTP | 25 | TCP | |
| 邮件读取协议 | POP3 | 110 | TCP | |
| 网际报文存取协议 | IMAP | 143 | TCP | |
## Web 页面请求过程
在浏览器中输入 https://www.example.com/ 并回车后,主要经过以下步骤:
1. 浏览器解析 URL,检查缓存,有未过期的缓存时直接使用;
2. DNS 解析域名,得到 IP 地址;
3. 与服务器进行 TCP 三次握手,HTTPS 还要进行 TLS 握手;
4. 发送 HTTP 请求,服务器处理后返回响应;
5. 浏览器解析 HTML,再请求其中引用的 CSS、JavaScript、图片等资源,最后渲染出页面;
6. 连接保持一段时间供后续请求复用,空闲后关闭。
以下是本机访问该网址时各阶段的耗时:
<div align="center"> <img src="pics/url-timeline.png" width="760px"/> </div><br>
下面从网络各层的角度,看一台刚接入网络的主机发出这个请求的完整过程。
### 1. DHCP 配置主机信息
- 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取。
@@ -166,3 +186,8 @@ IMAP 协议中客户端和服务器上的邮件保持同步,如果不手动删
- HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。
- 浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。
## 参考资料
- [RFC 1035: Domain Names - Implementation and Specification](https://www.rfc-editor.org/rfc/rfc1035)
- [RFC 2131: Dynamic Host Configuration Protocol](https://www.rfc-editor.org/rfc/rfc2131)