在跑实验的时候想顺便查个GitHub,但是网络出错。加之计算机网络基础也忘得差不多了,所以撰写此文,梳理脉络。
我先开Clash后开VPN,发现实验室连接没问题,但是访问google出现问题。从底层细节来讲,VPN往往拥有更高的系统权限,会酷盖路由表的默认网关,把所有流量拉走。即使clash没关,我的google请求也会被VPN卷走发往实验室。因为实验室防火墙通常不具备翻墙功能,google访问会失败,但实验室服务器连接正常。
网络基础
路由器
- NAT转换
- 全球的公网IP地址是有限的,运营商通常只会分配一个公网IP。但是家里的设备都需要上网,所有路由器会给家里的每个设备分配一个内网IP。
- 当家中的设备上网发请求时,路由器把包裹拦下来,把发件人从内网IP改成它自己手里的那个真实公网IP。当回信寄到时,在查询自己的list,看回信是给哪一个设备的,分发下去。
- 路由选择
- 数据包从电脑发出,只知道终点,但是中间的路径不确定。
- 路由器内部存储着一张实时更新的路由表:
- 会判断这个包裹是发给家里另一台设备的还是发给外面的,如果是发送给外面的,会把包裹投递给它的上一级,即运营商机房的更大号路由器。
- 协议转换
- 路由器接收到空气中的电磁波信号,把它们还原成数字数据,然后通过光信号发送出去。
协议栈:五层模型
- 第五层:应用层 – 原始数据(Data) – HTTPS – 内容
- 最接近用户的一层,负责处理特定的应用程序细节。
- 定义数据格式。
- 第四层:传输层 – 段(Segment) – TCP – TCP头部(目的端口/源端口)
- 负责两台计算机的端到端通讯,确保数据可靠或快速地送达。
- 使用TCP(可靠传输)或者UDP(快速传输)协议,给数据贴上端口号。
- 第三层:网络层 – 包(Packet) – IPV4/IPV6 – IP头部(源IP/目的IP)
- 负责在不同的网络之间进行路径选择(寻址)。
- 使用IP协议。这一层定义了数据的起点和终点IP地址。
- 第二层:数据链路层 – 帧(Frame) – Wi-Fi – MAC头部(源MAC/目的MAC)
- 负责在同一个局域网内移动数据。
- 识别硬件地址(MAC地址)。WI-FI协议就在这一层工作。
- 第一层:物理层 – 比特(Bits) – 无线电波
- 负责将比特流(0和1)转换成物理信号进行传输。
- 定义电压、接口形状、无线电频率等。
网络请求
普通情况:连接家庭Wi-Fi
- 路径:设备(发起端,手机/电脑) -> 家用路由器(网关层,负责NAT转换,将私网IP映射为公网IP) -> 运营商(ISP)网关(管道层,城域网与骨干网) -> 目标服务器
- 处理过程:
- DNS查询:浏览器问运营商:“baidu.com在什么地方?”运营商告诉它一个IP。
- 直接发包:设备把包裹发给这个IP
- 特点:
- 运营商对访问的网站完全透明。
- 无阻拦:访问国内网站飞快,但访问被封锁的国外网站会直接在“运营商网关”被GFW拦截,丢进垃圾桶。
- 拦截方式:DNS污染(GFW 抢在真正的 DNS 服务器之前给你返回一个错误的 IP,让你还没出发就走错路。)/TCP重置(如果你跳过了 DNS 直接访问 IP,GFW 会识别出黑名单 IP,并向你的设备和目标服务器发送 RST 包,强行中断你的连接)
开启clash:智能导流模式
clash在设备上建立了一个智能分拣中心
核心机制:本地代理与流量接管(clash启动后,会在设备上运行一个本地代理服务器。)
- 流量截获:当设置了“系统代理”或开启“TUN”模式时,所有的应用程序发出的包裹都会先交给clash。
- 剥离与检查:clash会拆开包裹的最外层,查看收件地址(域名或者IP)
匹配规则逻辑
- 关键词/后缀匹配:看到 .baidu.com → 匹配 DOMAIN-SUFFIX → 分类为 DIRECT。
- 地理位置判定:看到目标 IP 属于中国大陆 → 匹配 GEOIP,CN → 分类为 DIRECT。
- 黑名单/海外名单:看到 google.com → 匹配 Final 或特定规则 → 分类为 PROXY。
加密隧道与伪装(当包裹被分类为PROXY时):
- 套壳与加密:clash把原始请求整体打包,塞进一个高度加密的集装箱。这个集装箱使用的协议(Trojan,Vmess,Shadowsocks)具有极强的隐蔽性。
- 修改目的地:clash把集装箱的收件人改为远程服务器(机场节点)IP。
- GFW视角:防火墙看到发出来一个数据包,但由于加密,它既看不出目标网站,也看不出数据包的内容,是能看到是在和一个合法的海外服务器通信,于是只能放行。
DNS污染防护:Fake- IP模式
- 当浏览器询问“google.com在哪里?”,clash并不真的去查,而是返回一个假IP给浏览器,浏览器带着这个假IP发包,clash截获之后再去远程服务器查询真实的物理地址并完成访问。结果完美避开了运营商DNS的干扰,从根源上解决了找不到路的问题。
访问国内网站:
- 路径:设备 -> clash -> 家用路由器 -> 运营商 -> 国内网站
- 底层细节:
- clash识别到目标IP在国内,匹配到DIRECT(直连)规则。
- 不对包裹做任何特殊包装,直接推给路由器
- 速度与普通Wi-Fi一致,几乎没有延迟损耗。
访问国外网站:
- 路径:设备 -> clash(加密分拣) -> 家用路由器 -> 运营商 GFW(放行) -> 落地服务器(解密) -> 目标网站
- 底层细节:
- 套壳:clash发现目标网站在国外,匹配PROXY规则。把原始请求塞进一个特殊的“加密集装箱(Shadowsocks/Trojan)”。
- 伪装:这个集装箱的收件地址不是目标网站,而是代理服务器IP。
- 穿透:GFW检查时,只看到在给一个海外服务器发加密数据,只要伪装的像普通网页流量,就会放行。
- 中转:代理服务器收到后,拆开集装箱,取出原始请求发给目标网站。
走VPN:连接实验室服务器/内网
把自己伪装成内网的一员,通过公用网络建立一条私有的安全通道,一旦连接成功,设备在逻辑上就变成了实验室局域网的一部分。
- 核心作用
- 虚拟网卡:当点击“连接”时,VPN驱动会在系统中生成一张虚拟网卡,有点像电脑里多插了一根透明的网线,这根线长达几百公里,另一头插在实验室的交换机中。
- 隧道协议:VPN使用如 L2TP、IPsec、AnyConnect 或 WireGuard 等协议。
- 封包:电脑想访问实验室服务器。
- 加固:VPN客户端把这个内网请求整个塞进一个强大的加密信封里。
- 穿越:这个信封通过互联网送到实验室的VPN网关(防火墙)。
- 拆封:网关拆开信封,把原始请求丢进实验室真实的交换机中。
- 路径:设备 -> VPN客户端 -> 公网 -> 实验室/公司防火墙 -> 内网服务器
- 底层细节:
- 虚拟网卡:VPN启动后会在电脑里生成一个虚拟网卡,分配一个实验室内部的IP。
- 全局加密隧道:无论访问什么,VPN都会把流量封装进一个隧道协议。
- 内网权限:包裹到达实验室的VPN网关后,网关会认为是内部人员,允许访问原本不对外开放的实验室GPU服务器或内部数据库。
- 特点:
- 排他性:如果没开分流,开启VPN时可能连不上家里的打印机,因为所有的流量全被拉到实验室中。不过现代企业级VPN支持分流,会下发一套路由表给电脑,如果访问内网就走VPN,其余访问依旧走自家的Wi-Fi。
- 安全性:即使在公共Wi-Fi下,;流量也是完全加密发送到实验室中。