-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
14 changed files
with
1,439 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
Binary file not shown.
453 changes: 453 additions & 0 deletions
453
src/fundamental/network/4.If you were to design a network copy.md
Large diffs are not rendered by default.
Oops, something went wrong.
119 changes: 119 additions & 0 deletions
119
src/fundamental/network/5.Soft Router Prerequisite Home Network Communication.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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秒的时间内完成。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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地址后,他们就可以在网络中互相通信了。 | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
--- | ||
order: 4 | ||
author: | ||
title: "Clash技术架构及内核" | ||
category: | ||
- Clash | ||
- 内核 | ||
--- | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,4 +14,6 @@ category: | |
|
||
electron-egg | ||
|
||
ip代理池 | ||
ip代理池 | ||
|
||
双币信用卡,动物之森,Half Life Alyx |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.