🕸️ 该篇内容的引入问题为:为什么 Clash for Window 打开了全局代理,但我的 UWP 应用仍然无法走代理?

1. 网络的基本层级

🌐 OSI 网络七层模型是基本,但实际应用过程中对该模型进行了简化,改为了一个四层模型,包含:应用层、传输层、网络层、链路层。省略了表示层和会话层,将物理层和数据链路层进行了合并。

  • 🤔 我们简单的理解以下数据通过最上层逐层往下都发生了什么
    • 应用层:为应用程序提供网络服务和功能
      • ✍ 比如你要访问百度,那封装一个向百度的请求数据
    • 表示层:对数据进行加密
    • 会话层:负责管理和协调不同设备之间的会话(略过,暂不理解
    • 传输层:负责提供可靠的端到端通信和数据传输服务
      • ✍ 上层访问百度的请求数据经过加密后来到这一层,这一层会添加对应的 端口号
    • 网络层:负责在不同网络之间进行数据的路由和转发
      • ✍ 在上层数据的基础上,该层会添加 源IP目的IP ,此外还有一些控制字段和额外信息,如协议类型、数据包长度、TTL等。其中 TTL 全称是 Time to Live,用于设置数据包在网络中的存活时间,即该数据包最多能经过多少跳,超过该数值就丢弃了
    • 数据链路层:该层会对数据包进行分帧,包括帧头和帧尾,帧头包含一些控制字段,用于标识帧的开始和帧的接收方;帧尾则包含了用于错误检测的校验和信息,确保数据在传输过程中的完整性
      • ✍ 我的简单理解会添加物理设备的 MAC 地址
    • 物理层:将比特流转化为电信号或光信号,并将其发送到物理媒介上,以及接收并解析接收到的信号

2. 网关 & NAT & DHCP服务

☁️ 子网,怎么样的网络算一个子网,也就是在一个同局域网内。将 设备IP地址 & 子网掩码 ,如果两个设备与的结果相同,那就属于同一子网

🪁 网关的作用就是 连接两个不同的子网。如下图:

  • 🔗 当 PC1 访问 192.168.24.20 时,也就是 PC2 ,路由器会发现它们属于同一个子网,不用进行 NAT ,这时的路由器就相当于一个交换机。也因为访问的设备处于同一个子网,网关也是不发挥作用的
  • 🔗 当 PC1 访问 PC3 时,其数据包中的目的IP其实会是路由器WAN口的IP,为简化我们就相当于是 PC3 的 IP地址,数据包从 PC1 发出,发现该地址不属于该子网,这个时候就会发送给默认的网关,一般情况下默认网关就是默认的路由器地址,这时数据包来到路由器,路由器发现访问的是外网的设备,就经过 NAT ,然后通过路由器的 WAN 口将数据发出,最后经过互联网到达路由器2,再到达 PC3 ,之后将访问的数据发回,就完成了访问

🍎 简单总结网关的作用:访问不同子网的设备,数据包就需要发送到网关设备处理

📋 上面说到的 NAT ,是路由器最主要的功能,全称是 Network Address Translation,即网络地址转换。如下图访问百度:

PC1 上的一个应用,运行在本机的 9000 端口,其要访问百度首页,那其发出的数据包,在网络层写入的 IP 和传输层添加的 PORT 就是 192.168.24.10:9000 ,因为百度服务器和 PC1 不在一个子网,所以数据发送到默认的网关设备,也就是路由器1,路由器 LAN口 收到该数据包一看,要访问百度,但是内网的 IP 只在内网使用,所以路由器对数据包的数据进行了一个更改,将数据包的 源IP地址 改为自己 WAN口 的 IP地址,端口号也可能改为其它端口,假设为10000,那从 WAN口 发出的数据包的信息就为 89.45.21.5:10000 ,为了防止数据发回时路由器不知道要将数据转发给谁,路由器就自己内建了一个关系对应表,将转换前的信息和转换后的信息对应起来,这样数据返回时,路由器根据该表的记录,就可以将数据正确的转发给 PC1 ,这就是 NAT

🛰️ 最后一个 DHCP 的概念,全称为 Dynamic Host Configuration Protocol,即动态主机配置协议,其主要作用是 自动分配和管理网络设备的IP地址、子网掩码、网关等网络配置信息。一个子网中,一般路由器会自动运行一个 DHCP服务 ,为连接路由器的设备自动配置这些信息。

3. 网络协议 & 回答引子

🙋 先回答一下前面提到的问题,原因在于 Clash for Window 处于应用层,当你设置了全局代理后,可以在 Window 设置里面看到开启了系统代理,这个时候,符合系统代理规范的应用,其网络浏览就会通过代理软件处理,但 UWP 应用其层级低于应用层,处于更低的系统层,这个时候其网络浏览是不会通过处于应用层的 Clash for Window 进行处理的

典型的网络协议如上表,我自己了解得也不多,映像较深的是 ARP ,该协议是将 IP地址 转为实际设备的 MAC 地址