Skip to content

Commit ef6bc58

Browse files
committed
feat: 增加读书笔记
1 parent 8b359da commit ef6bc58

File tree

3 files changed

+102
-1
lines changed

3 files changed

+102
-1
lines changed

docs/.vuepress/config.js

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ module.exports = {
8686
"framework"
8787
],
8888
"/book/": [
89+
"book-how-network-connect",
8990
"book-regular",
9091
"book-code",
9192
"book-http2",

docs/book/book-how-network-connect.md

+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# 《网络是怎么连接的》总结
2+
3+
书中从输入网址到显示页面信息这个一个流程做了很细节的分析,先列一个提纲:
4+
5+
- 客户端
6+
- 浏览器
7+
- socket 库
8+
- tcp 协议栈
9+
- ip 协议栈
10+
- 网卡
11+
- 客户端局域网
12+
- 双绞线
13+
- 集线器
14+
- 交换机
15+
- 路由器
16+
- 运营商网络
17+
- 待总结
18+
- 服务器
19+
- 防火墙
20+
- 缓存服务器
21+
- 网卡
22+
- ip 协议栈
23+
- tcp 协议栈
24+
- socket 库
25+
- web 服务器
26+
27+
## 客户端
28+
29+
客户端发起一个请求,会经过一下几个过程:
30+
31+
- 解析 url ,获取需要请求的文件。
32+
- dns 解析域名,获取 ip 地址(从跟域名开始查找,例如:a.b.com,先找 com,再找 b,再找 a)。
33+
- 浏览器生成 http 消息,并转交给 socket 库。
34+
- **进入 tcp 协议栈**
35+
- 创建 tcp 头(包括发送方,接收方端口号,ip 等信息)。
36+
- 根据 tcp 头部信息,找到需要连接的套接字。
37+
- 连接套接字(3 次握手)。
38+
- 将大的数据包拆分成小的数据包。
39+
- 通过传递 ACK 和序号,验证双方收到的信息是否可靠。
40+
- **滑动窗口**,管理 ACK,协商服务器端处理能力。(每一次请求都会返回服务器端剩余的带宽,当服务器带宽很小时,发送方也会减慢上传数据)。
41+
- 每一个请求响应都会返回服务带宽和 ACK,如果请求很快,则会传输大量的验证信息,tcp 会进行合并处理(即:每次发送带宽信息时,会等待一段时间,如果时间内有其他的链接占用了带宽,也会合并后,发送给客户端)。
42+
- **拥塞处理**,慢开始算法,拥塞避免算法等,在传输开始时将发送窗口慢慢指数级扩大。(避免网络负载过大)。
43+
- **进入 ip 协议栈**
44+
- 根据服务器 ip,包裹 ip 头部。
45+
- 根据网卡的唯一 mac 地址,包裹 mac 头部。
46+
- **进入网卡**
47+
- 收到 ip 包裹的包,检查以太网可发送状态。
48+
- 将数据信号的包转换成电信号,通过双绞线发送出去。
49+
50+
## 客户端局域网
51+
52+
- 信号通过**双绞线**,到达集线器。
53+
- 双绞线的作用是为了抑制噪音,防止其他信号干扰。
54+
- **集线器**将信号广播到所有端口,这样信号便能到达交换机。
55+
- 集线器:将一些机器连接起来组成一个局域网。(OSI 第一层,物理层)
56+
- **交换机**
57+
- 交换机又叫交换式集线器:根据 mac 地址表,查找 mac 地址,然后将信号发送到 mac 地址上(**mac 地址对应的就是路由器**)。
58+
- **路由器**
59+
- 根据收到的包的接收方 ip 地址查询自身的路由表找到输出端口,并将包转发到输出端口(可能是目的地,也可能是下一个路由器)。
60+
- 地址转换,可以在转发时,对 ip 和端口号进行改写(解决公网 ip 有限问题)
61+
- 包过滤,可以根据 mac 头,ip 头等,选择转发 or 丢弃包。
62+
63+
::: tip 路由器和交换机的关系
64+
65+
路由器:将 ip 转发到目标地址的过程。
66+
67+
交换机:将包传给下一个路由器时,需要交换机转发。
68+
69+
路由器是在 ip 层,而交换机在 mac 层。当进行数据传递时,会经过 mac 层,在到 ip 层,如果当前 ip 没有找到目标地址,则会被转发到下一个路由器,仍然是先通过 mac 层,再到 ip 层,直到找到为止。
70+
71+
:::
72+
73+
## 运营商网络
74+
75+
这一部分设计到了很多硬件知识,我也没有完全理解,以后待完善。
76+
77+
## 服务器
78+
79+
- **防火墙**,对进入的包进行检查,判断是否允许通过。
80+
- 通过接收方 ip 地址和发送方 ip 地址,进行过滤。
81+
- 通过接收方端口号和发送方的端口号,进行过滤。
82+
- 通过三次握手的方向,控制单向连接,例如只允许 web 端->服务器,或者只允许服务器->web 端发起请求。
83+
- 控制内网 ip,禁止指定 ip 不能访问外网。
84+
- 控制外网 ip,禁止指定 ip 外网不能访问内网。
85+
- **缓存服务器**,如果用户请求的页面已经缓存在服务器上,则代替服务器想用户返回页面数据。
86+
- **网卡**将电信号,转换成数字信息,交给协议栈。
87+
- **ip 协议栈**
88+
- 判断是不是发给自己的包。
89+
- 判断网络包是否经过分片。
90+
- 检查 ip 头部,取出对应的 tcp 数据包。并转交给 tcp 模块。
91+
- **tcp 协议栈**
92+
- 根据收到的包的发送方 ip 地址,发送方端口号,接收方 ip 地址,接收方端口号找到相应的套接字。
93+
- 根据 tcp 头部,取出对应的 http 数据包。
94+
- 将数据拼合起来并保存在接收缓冲区中。
95+
- 通过 socket 库将原始的 http 数据包转交给 web 服务器。
96+
- web 服务器分析 http 消息的内容。
97+
- 读取 url,转换为实际文件名。
98+
- 检查文件访问控制,确保有权限访问文件。
99+
- 将文件经过处理后,返回给客户端。
100+
- 客户端根据 content-type 字段来渲染不同的内容。

docs/interview/css.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ id 选择器权重: 0100
1616

1717
BFC 生成了一套封闭的布局空间,内部子元素无论怎么布局,都不会影响到外部的元素。BFC 可以用来**清除浮动****防止 margin 重叠****去除 float 文字环绕**等。
1818

19-
以下几种元素会生成BFC
19+
以下几种元素会生成 BFC
2020

2121
- html 元素
2222
- float 不是 none 的元素

0 commit comments

Comments
 (0)