Skip to content

Commit

Permalink
🚀 add: VPN 软路由 旁路由 DHCP OpenClash
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-qtp committed Jan 16, 2025
1 parent fbc4be6 commit d121908
Show file tree
Hide file tree
Showing 14 changed files with 1,439 additions and 5 deletions.
22 changes: 21 additions & 1 deletion src/.vuepress/sidebar/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,28 @@ export const zhSidebar = sidebar({
icon: "github",
text: "九、开源推荐",
prefix: "opensource/",
children: "structure",
collapsible: true,
children: "structure"
},
{
icon: "xiayu",
text: "十、技术琐碎",
collapsible: true,
prefix: "rain/",
children: [
{
icon: "clash",
text: "Clash",
prefix: "clash",
collapsible: true,
children: [
"Openclash"
],
},
"1.VPN",
"2.Soft Router Prerequisite Home Network Communication",
"3.Side Router"
]
},
],
"/life/": [
Expand Down
2 changes: 1 addition & 1 deletion src/.vuepress/theme.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export default hopeTheme({
},

// iconAssets: 'iconfont',
iconAssets: '//at.alicdn.com/t/c/font_4791007_akxvrehyr4g.css',
iconAssets: '//at.alicdn.com/t/c/font_4791007_j1e8hdhzv8.css',


logo: '/logo.svg',
Expand Down
Binary file not shown.
Binary file not shown.
453 changes: 453 additions & 0 deletions src/fundamental/network/4.If you were to design a network copy.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
---
order: 5
author:
title: "软路由前提篇:家庭网络通信"
category:
- 计网
- 路由器
- 交换机
- DHCP DNS ARP

---

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116011641002.png)

### 1. **家庭网络的基本设置**

你在运营商拉了一条宽带,运营商会给你分配一个光猫。你通常会单独再买一台路由器,使用网线将路由器的 WAN 口与光猫相连。通常情况下,颜色不一样的接口就是路由器的WAN口。路由器通过 PPPoE 拨号获取运营商分配的公网 IP(假设为 `2.2.2.2`),或者光猫负责拨号,路由器获取内网 IP(如 `192.168.0.2`)。

总之不管怎样,你的路由器WAN口会获取到一个IP。

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116012735730.png)

除了WAN口,路由器还有多个颜色一样的LAN口,为了让大家思路清晰,我们需要单独提取出这4个LAN口,把它当做一台交换机,并且和路由器这个虚拟的网口`LAN`建立了连接,路由器连接交换机的这个网口有一个IP地址,假设为`192.168.1.1`,这个是路由器的内网IP。

访问这个IP可以进入路由器的**管理页面**,同时也是你家里整个局域网的网关,你家里所有的网络设备,都会通过网线或者WIFI的方式,连接到这台交换机,这是大部分家庭的网络拓扑,装宽带的师傅会帮你配置好,确保你能正常上网。

路由器的虚拟LAN口连接交换机,交换机连接家中的其他设备(如电脑、手机等)。路由器的内网 IP 通常是 `192.168.1.1`,这是局域网的网关。

------

### 2. **电脑获取 IP 地址(DHCP 协议)**

当电脑通过网线或 Wi-Fi 连接到网络时,会通过 DHCP(动态主机配置协议)自动获取 IP 地址。

电脑的 DHCP 客户端(**操作系统内置了**)会发起一个 DHCP 请求,找DHCP服务器获取IP地址,这个请求会被一层层的封装。

以TCP/IP四层网络模型为例,每一层都有其特定的任务。

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116130747581.png)

==数据来到传输层==,传输层会指定这个DHCP请求-通过什么传输协议发往什么端口。DHCP规定客户端默认使用68号UDP端口,服务端默认使用67号UDP端口,也就是请求会使用UDP的68号端口发往UDP的67号端口,所以源端口是68,目标端口是67,使用UDP的方式传输,这些都是规定好的。

==接着数据来到网络层==,网络层需要确定,数据包发给哪个网络设备,也就是负责封装IP地址。电脑现在的目的,是找DHCP服务器要IP地址,但他并不知道现在谁是DHCP服务器,不知道该发给谁,所以干脆一不做二不休,直接发给这个网络里的所有设备,所以目标IP是一个广播IP,`255.255.255.255`,同时接收方也需要知道是谁发给他的数据,所以还需要加上**源IP****但是电脑现在还没有IP**,于是会直接用`0.0.0.0`这个未指定的IP。

接着数据会继续向下

==来到网络接口层==,这一层会封装MAC地址,每个网卡都有唯一的MAC地址,也叫物理地址,源MAC是你电脑网卡的MAC地址,这里假设`CC:CC:CC:CC:CC:CC`,同样由于不知道数据该发给谁,所以目标MAC是一个全F的广播MAC地址,然后这个经过层层封装的数据包,会从电脑的网卡接口发出,顺着网线来到了交换机的1号接口,普通的家用交换机是一个,**只能解析网络接口层数据**的设备,也就是说他**只能看到MAC**地址,里面的IP和端口等信息,对他来说就是一堆无规则的数据,他看不懂也没必要看懂,交换机内部有一个MAC地址映射表,他会根据MAC地址对数据进行转发,至于你转发的什么内容,它并不关心。

交换机从LAN1收到数据后,会将LAN1对应的MAC地址保存到映射表中,然后查看目标MAC,发现是全F的广播MAC地址,于是交换机会将电脑的数据,给每一个连接的LAN口(Wifi也算)发送一份,当这台电脑收到数据包的时候,会根据网络模型一层一层的解封装,首先网络接口层会查看目标MAC地址是不是发给自己的,发现是全F,虽然不是自己的MAC地址DD,但这是一个广播MAC地址,所以会接受它,继续向上来到网络层,查看目标IP是全255,虽然不是自己的IP,但这是一个广播IP,广播就类似学校的广播,当广播里说全体注意的时候,**你肯定要听一下广播里他在讲啥**,所以电脑为了看里面的内容,也会接受这个数据包。

==来到传输层==,发现是通过UDP的方式发给67号端口,**由于这台电脑没有运行DHCP服务**,所以并没有监听67号端口,于是会将这个数据包丢弃。

同样的数据来到路由器,一般的家用路由器会提供很多服务,比如DHCP DNS DDNS Qos UPnP DMZ 端口转发 防火墙等等,接口层会接受这个目标MAC全F的广播,同样网络层会接受这个目标IP是全255的广播,向上来到传输层,发现目标端口是UDP的67,一般情况下路由器默认就开启了DHCP服务,而DHCP默认的监听端口就是UDP的67,于是这个数据包将会交给DHCP服务,DHCP服务收到数据后,将会从自己的IP地址池中,选择一个未被占用的IP地址。

假设为`192.168.1.3`,除了IP地址,还会包含子网掩码 网关 DNS服务器租约等信息。假设租约为12个小时,然后重新封装数据包,源端口是本机的DHCP服务67端口,目标端口是对方发过来的端口也就是68,并且通过UDP传输,网络层封装源IP地址为路由器自己的IP,也就是192.168.1.1,由于对方没有IP,所以目标IP还是全255的广播IP。

来到网络接口层,源MAC是路由器LAN口的MAC地址,路由器从刚才电脑发过来的数据包中,已经知道了电脑的MAC地址,所以目标MAC是电脑的MAC地址,数据来到交换机,刚才说过交换机只能解析MAC地址,当他看到目标MAC是CC的时候,会查看自己的MAC地址映射表,发现CC插在接口1上,于是会将这个数据包从接口1发送出去。电脑收到数据后会一层层的解封装。接口层发现目标MAC是自己。

于是接受该数据。网络层发现目标IP是广播IP,同样也接受了,传输层发现是发往UDP的68号端口,而DHCP客户端监听了该端口,于是数据将会由DHCP应用程序处理,DHCP会拿着这些信息,给电脑进行相关配置,于是我们的电脑就有了IP地址 网关DNS等信息了,并且在6个小时之后,也就是租约的1/2,会再次发起DHCP请求续约IP地址,**续约成功**的话,租期就会再次变成12个小时。

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116133729319.png)![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116133842328.png)

如果DHCP服务器没有回应的话。会在时间剩余1/4 1/8的时候,再尝试发送续约请求,如果续约成功,将会再次变成12个小时。如果失败了。说明路由器提供的DHCP==服务挂了==。等到租约到期之后。将会自动释放IP。然后重新发起DHCP获取IP的广播请求

但是由于这个局域网内,唯一的DHCP服务器挂了,所以电脑永远也得不到DHCP回应,当尝试多次都没有收到回复之后,DHCP客户端会给电脑,自动分配一个全球统一的网段,IP地址为169.254.X.X,确保和局域网的其他设备,还能正常通信,所以当你发现电脑获取到了169.254开头的IP,说明你家里的局域网中,没有提供DHCP服务的设备,建议检查网络。

除了一台都没有的情况,还有可能配置不当,导致整个局域网中,存在多台DHCP服务器的情况,这也会出现网络问题,这里存在**DHCP攻击**

如果电脑关机了,没有再次发送续约请求,租约到期后,路由器的DHCP服务就会释放掉这个IP,重新放回地址池,再分配给其他有需要的人,所以像是机场或者商场之类的公共场所,WIFI设置的DHCP租期都会比较短,一般十来分钟,确保你人走后,IP能够尽快的释放出来给别人用,防止地址池被占满,家庭网络的话可以设置的久一点,一般默认是720分钟,也就是12个小时,这就是DHCP的整个执行流程。

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116135453759.png)

实际的DHCP要更复杂。

==所以简单一点流程就是==:广播(目标 IP 为 `255.255.255.255`,目标 MAC 为 `FF:FF:FF:FF:FF:FF`)。路由器收到请求后,从 IP 地址池中分配一个 IP(如 `192.168.1.3`)给电脑,并附带子网掩码、网关和 DNS 信息。DHCP 分配的 IP 有租期(通常为 12 小时),电脑会在租期过半时尝试续约。如果续约失败,IP 会被释放,电脑会重新发起 DHCP 请求。

------

### 3. **域名解析(DNS 协议)**

当你在浏览器输入 `baidu.com` 时,浏览器需要将域名转换为 IP 地址。电脑向路由器的 DNS 服务发送 DNS 请求(目标端口为 UDP 53)。路由器作为 DNS 中继,将请求转发给运营商提供的上游 DNS 服务器。上游 DNS 服务器返回 `baidu.com` 的 IP 地址(如 `220.181.38.148`)。路由器将 IP 地址缓存一段时间,局域网内的其他设备再次访问 `baidu.com` 时,可以直接从缓存中获取 IP。

------

### 4. **地址解析协议(ARP 协议)**

ARP协议就是根据IP地址查询Mac地址的协议

我是`192.168.1.3`

谁是`192.168.1.1`

这里贴一个YouTube地址,讲的非常好,

[https://www.youtube.com/watch?v=P38FmPAq09E&t=183s](https://www.youtube.com/watch?v=P38FmPAq09E&t=183s)

------

### 5. **访问百度服务器(HTTP 请求)**

拿到百度服务器的 IP 地址后,浏览器向这个IP发起一条 HTTP 请求(目标端口为 TCP 80)。电脑发现目标 IP 不在同一网段(通过子网掩码判断),于是将数据包发送给默认网关(路由器)。路由器通过 NAT(`Network Address Translation`网络地址转换)将内网 IP(`192.168.1.3`)转换为路由器WAN口公网 IP(`2.2.2.2`),并随机选择一个端口,替换掉源端口,并记录端口映射,此时数据就可以在公网上路由了。

接着封装MAC地址,源MAC是路由器WAN的MAC地址,目标MAC是吓一跳某个路由设备的MAC,然后数据从WAN口发送到了互联网,经过十几个路由设备转发,最终到达百度服务器。百度服务器处理请求后,将网页数据返回给路由器,路由器通过 NAT 将数据转发给电脑。

------

### 6. **关键技术与协议**

- **DHCP**:动态分配 IP 地址,简化网络配置。
- **DNS**:将域名转换为 IP 地址,方便用户访问网站。
- **NAT**:将内网 IP 转换为公网 IP,实现多设备共享公网 IP。
- **ARP**:通过广播获取目标设备的 MAC 地址。
- **TCP/IP**:分层网络模型,确保数据可靠传输。

------

### 7. **总结**

从输入 `baidu.com` 到页面加载完成,背后涉及了 DHCP、DNS、ARP、NAT、TCP/IP 等多种网络协议和技术的协同工作。虽然过程复杂,但现代网络设备和协议的高效性使得这一切在不到1秒的时间内完成。
87 changes: 87 additions & 0 deletions src/fundamental/network/8.DHCP协议.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
---
order: 8
author:
title: "DHCP协议?"
category:
- TCP
- UDP
- 计网

---

<img src="https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116113353161.png" style="zoom:50%;" />

每一个网络设备,都有一个此网络中的独一无二的IP地址,也用来作为网络通信中的唯一标识,那:

- 每个设备的ip地址是如何得到的呢?

- 又是如何保证不冲突的呢?

那就引出了下面的,**DHCP(动态主机配置协议)**

:::info

静态 IP是手动分配给设备的固定 IP 地址,不会自动更改,适合需要长期稳定连接的设备,如服务器、打印机等,但是需要手动输入 IP 地址、子网掩码、网关和 DNS 服务器。需要手动输入 IP 地址、子网掩码、网关和 DNS 服务器。

比如,对于拥有一千台服务器的集群,网络管理员需要根据设备编号,对每台设备设置固定的IP。

还有,你要静态设置的话,你要提前知道你家里的局域网的网段是哪个,比如我家的路由器地址是,![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116135646690.png),那么你的设别就要在`192.168.1.2`~`192.168.1.254`之间。

网关和DNS默认设置为路由器的IP。

:::

DHCP 是一种自动化的 IP 地址分配协议,设备(如电脑、手机、路由器等)在连接到网络时,它会向 DHCP 服务器发送一个请求,DHCP 服务器会从可用的 IP 地址池中选择一个未被使用的地址,分配给设备。这个 IP 地址通常有一个租期,租期到期后设备可能会获得不同的 IP 地址。

**优点**

- 自动化分配 IP 地址,节省手动配置的时间和精力。
- 可以动态管理网络中的设备,不需要手动干预。
- 避免了 IP 地址冲突,DHCP 服务器会确保每个设备得到唯一的 IP 地址。

**缺点**

- 因为 IP 地址是临时分配的,设备的 IP 地址可能会发生变化,适用于不需要固定 IP 的设备。
- 一些应用需要固定 IP 地址来进行通信(如服务器、打印机等)。

**巴拉巴拉:**

当你的电脑通过网线连接到路由器,当电脑开机进入操作系统后,此时其还没有IP地址,操作系统会通过UDP协议,此时其还没有IP地址,操作系统会使用udp协议通过68端口向67端口广播一包DHCP discover数据包,用来寻找DHCP服务器。

由于这是一个广播数据包,所以网络中的所有设备都会收到这一条数据。但是只有DHCP服务器才会做出响应,在家庭网络中路由器就是DHCP服务器的角色。

他收到的DHCP discover数据包后,知道网络中有设备需要分配IP地址。所以他需要在自己的IP地址池中拿到一个空闲IP,比如192.168.1.10,并决定把这个IP地址分配给路由器。

路由器会把此IP封装成一包DHCP offer包,回复给我的PC。PC收到后要决定用不用这个IP地址。

为什么会有这一步?是因为假设网络中有多个DHCP服务器,他们有可能会同时收到discover包,各自分配IP地址后回复DHCP offer包。此时PC会收到多个他要决定用哪一个IP地址,一般情况下都是用收到的第一个IP地址。

![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116121017109.png)

决定好后,PC会向网络中广播自己的决定,通知路由器接受了其分配的IP地址。这一包称为DHCP request包。

:::danger
其实上图并不准确,如果电脑用网线连接,电脑广播的时候,会先向LAN口发送,然后由交换机(路由器)中的MAC地址映射表负责转发,

转发的对象也不只是其他DHCP服务器,普通设备也会被发送,但是由于MAC地址的不同,普通设备就会被pass掉。

:::





![](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116120935207.png)

路由器收到request包后会回复给PC DHCP ack包,表示已经接受了PC的选择,可以使用此IP地址,此时pc拥有了自己的IP地址。

以上四步就是DHCP获取IP地址的完整流程。不过前两部并不是必须的,当PC重启后,PC无需重新获取IP地址。只需要再次确认就可以了。

![重启后,PC无需重新获取IP地址](https://qtp-1324720525.cos.ap-shanghai.myqcloud.com/blog/image-20250116121218769.png)

就是从第三步开始发送DHCP request的包,直接请求使用此IP。DHCP服务器需要检查此IP是否可用,若可以使用则直接回复ack包确认可以继续使用此IP地址,若不可用比如此IP已被其他设备占用,则回复DHCP nack包拒绝申请,此时PC需要从DHCP discover开始再来一次完整的申请流程。

家庭网络中的包括通过网线连接路由器的电脑,以及通过WiFi连接的手机,电视,游戏机等。都是通过以上的步骤获取IP地址的,获取IP地址后,他们就可以在网络中互相通信了。



9 changes: 9 additions & 0 deletions src/opensource/Clash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
order: 4
author:
title: "Clash技术架构及内核"
category:
- Clash
- 内核
---

4 changes: 3 additions & 1 deletion src/opensource/tool.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ category:

electron-egg

ip代理池
ip代理池

双币信用卡,动物之森,Half Life Alyx
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ category:
:::
```



### 2. 提示

:::tip
Expand Down Expand Up @@ -130,6 +128,14 @@ category:
- [ ] 发布博客文章
- [ ] 学习 React

```
- [x] 完成 Markdown 学习
- [ ] 发布博客文章
- [ ] 学习 React
```



### 10.内嵌视频

<style>
Expand Down
Loading

0 comments on commit d121908

Please sign in to comment.