前言
在对webRTC 原理分析中,发现访问STUN 得代理不生效,分析底层发现走的是UDP, 而目前使用的代理只支持TCP。 针对代理 http/https, socks5, vpn 只是知道他是代理,可以翻墙,其他很是模糊,所以写了这篇原理分析对比得文章。

一、 代理的工作原理
代理大概分为两种: http/https 代理, socks5代理。
1. 普通 HTTP/HTTPS 代理
  • 普通 HTTP 代理(“转发者”模式)

    当你访问一个普通的 http:// 网站时,代理扮演的是一个“信使”的角色。

  • 流程:

    • 客户端(你的浏览器)不直接连接目标服务器,而是连接代理服务器。

    • 客户端 发送请求给代理:GET http://www.example.com/index.html。

    • 代理 收到请求,解析 HTTP 头部,看懂你要去哪里。

    • 代理 代替你向 www.example.com 发起 TCP 连接并发送请求。

    • 代理 收到服务器的响应数据,再原封不动地转交给你。

  • 关键点: 代理服务器完全看懂了你的请求内容(URL、Header、Body),它是在应用层工作的。
        当你访问 https:// 网站时,数据是加密的,代理看不懂内容,也不知道你要请求哪个具体的页面(URL path),它只知道你要去哪个域名。这时它扮演的是“管道工”的角色。

    • 客户端 发送一个特殊的 HTTP 请求给代理:CONNECT www.google.com:443 HTTP/1.1。

    • 代理 收到 CONNECT 指令后,它知道你不想让它看内容,只想让它帮忙搭个桥。

    • 代理 向 www.google.com:443 建立一个 TCP 连接。

    • 代理 回复客户端:200 Connection Established(连接已建立)。

    • 盲转发: 此后,代理不再解析任何数据,它只负责把客户端发来的加密二进制流(TCP 包)直接转发给服务器,反之亦然。

    • 流程:

    • 关键点: 这就是所谓的 HTTP Tunnel(隧道)。代理此时退化成了一个 TCP 转发器。

    • HTTPS 代理(“隧道”模式 / CONNECT 方法)


2. SOCKS5 (Socket Secure Version 5) 代理
SOCKS5 介于 应用层(HTTP/FTP)和 传输层(TCP/UDP)之间。

  • 不解析协议: SOCKS5 根本不在乎你传的是 HTTP 网页、FTP 文件、SMTP 邮件还是比特币交易数据。它只负责转发二进制数据流(Bytes)。

  • 纯粹的转发: 一旦连接建立,它就变成了一根透明的管子。客户端发什么,它就转什么;服务器回什么,它就回什么。

这就是为什么它比 HTTP 代理更灵活、更快(因为它不需要解析复杂的 HTTP 头部)。

  • SOCKS5 的工作流程(握手过程)

    SOCKS5 的建立过程比 HTTP 代理稍微复杂一点,分为三个阶段:


    第一阶段:协商(Negotiation)

  • 客户端 连接到 SOCKS5 代理服务器(默认端口 1080)。

  • 客户端 发送一个包:“你好,我支持 SOCKS5 协议,我支持的认证方式有:无密码、账号密码认证。”

  • 代理 回复:“好的,我们就用‘账号密码’方式吧。”(或者“不需要密码,直接来”)。

   第二阶段:认证(Authentication - 可选)
    如果协商结果需要验证,客户端会发送用户名和密码,代理验证通过后继续。
   第三阶段:请求(Request)—— 关键步骤!
    这是 SOCKS5 最强大的地方。客户端会告诉代理:“请帮我连接到 1.2.3.4的 80 端口。”
    或者(这是 HTTP 代理做不到的):“我要发送 UDP数据,请给我分配一个 UDP 转发端口。”
   第四阶段:转发(Relay)

  • 如果是 TCP: 代理连接目标,连接成功后,直接把客户端的数据流对接过去。

  • 如果是 UDP: 代理会告诉客户端:“好的,你把 UDP 包发到我的 IP:Port X,我会帮你转给目标。”

   2. 为什么支持UDP
SOCKS5 专门设计了一个命令叫 UDP ASSOCIATE。
   原理如下:

  • TCP 握手: 客户端先通过 TCP 连接告诉 SOCKS5 代理:“我要发 UDP 数据。”

  • 分配端口: 代理服务器会在自己身上开一个临时的 UDP 端口(比如 50001),并把这个端口号通过 TCP 告诉客户端。

  • 打包发送: 客户端把要发送的 UDP 数据(比如游戏操作),加上一个SOCKS5 头部(告诉代理这包数据要去哪),发给代理的 50001 端口。

  • 拆包转发: 代理收到 UDP 包,剥掉 SOCKS5 头部,把原始数据发给目标服务器(比如游戏服务器)。

  • 回传: 游戏服务器回包给代理,代理再加个头部发回给客户端。


    注意: SOCKS5 的 UDP 转发依然需要一条 TCP 连接来维持“控制信令”(如果 TCP 断了,UDP 转发也会停止)。
   3. SOCKS5 的另一个杀手锏:远程 DNS 解析
   这是做爬虫或科学上网时非常重要的功能。

  • HTTP 代理: 通常是你本机解析好域名(DNS),拿到 IP,再告诉代理去连这个 IP。这会导致DNS 污染(你还没连上代理,DNS 就被劫持了)。

  • SOCKS5 代理: 支持服务端解析 (Remote DNS)。

  • 你可以直接告诉代理:“我要连 www.google.com”。

  • 代理服务器会在它的网络环境里解析这个域名,拿到真实的 IP,然后连接。

  • 这样你的 ISP(运营商)根本不知道你想访问哪个域名,只知道你连了代理。


二、VPN
当你安装 VPN 软件(如 OpenVPN, WireGuard, Cisco AnyConnect)时,你会发现电脑的网络设置里多了一个"虚拟网卡"(通常叫 TUN 或 TAP 适配器)。VPN 和代理最大的区别

  • 代理(Proxy): 只是一个运行在后台的软件程序。浏览器或 App 需要主动把数据发给它,它才能转发。如果 App 不理它(比如游戏或 WebRTC),流量就直连了。

  • VPN: 它欺骗了操作系统。它在系统里虚拟了一张网卡。

  • VPN 启动后,会修改操作系统的路由表 (Routing Table)。

  • 它告诉操作系统:“嘿,现在所有的网络流量(不管是什么协议),全部交给这张虚拟网卡处理!”

  • 操作系统非常听话,把所有要发往互联网的数据包(IP Packet)都塞给了这张虚拟网卡。

网络模型差异(OSI 模型)

  • 第 7 层(应用层): HTTP, FTP, SMTP —— HTTP 代理在这里工作。

  • 第 4 层(传输层): TCP, UDP —— SOCKS5 代理在这里工作。

  • 第 3 层(网络层): IP (Internet Protocol) —— VPN 在这里工作。

  • 原理

  • IP 协议(第 3 层)是 TCP 和 UDP(第 4 层)的载体。

  • TCP 数据包是包裹在 IP 包里的。

  • UDP 数据包也是包裹在 IP 包里的。

  • ICMP(Ping 命令)也是包裹在 IP 包里的。

因为 VPN 工作在第 3 层,它直接处理 IP 数据包。 它根本不关心这个 IP 包里面装的是 TCP 还是 UDP,甚至不关心是 HTTP 还是游戏数据。它只负责把这个 IP 包“打包带走”。VPN 处理 UDP 的具体流程如下

  • 拦截: 你的游戏/WebRTC 发出一个 UDP 数据包。操作系统根据路由表,把这个包交给了 VPN 的虚拟网卡。

  • 封装(打包): VPN 软件拿到这个 UDP 包,把它加密,然后再包一层。

  • 内层: 原始的 UDP 数据。

  • 外层: VPN 自己的协议头(比如 OpenVPN 协议,通常也是用 UDP 传输)。

  • 发送: VPN 把这个“包中包”通过真实的物理网卡(Wi-Fi/网线)发给 VPN 服务器。

  • 解包: VPN 服务器收到后,剥开外层,拿出原始的 UDP 数据包,帮你在目标网络中发送出去。


二、HTTP(<=2.0)/HTTPS, SOCKS5,VPN 对比

维度HTTP / HTTPS 代理SOCKS5 代理VPN (虚拟专用网)
OSI 模型层级第 7 层 (应用层)第 5 层 (会话层)第 3 层 (网络层)
核心角色比喻翻译官(读懂内容,帮你传话)接线员(帮你插线,不听内容)专用隧道/装甲车(打包所有数据,直接运走)
TCP 支持支持支持支持
UDP 支持
不支持(无法玩游戏/WebRTC)
支持(需开启 UDP Associate)
完美支持
ICMP (Ping) 支持不支持不支持
支持
生效范围局部 (App 级)仅对设置了代理的浏览器/脚本生效局部 (App 级)仅对支持 SOCKS5 的软件生效全局 (系统级)接管电脑/手机的所有流量
数据处理方式解析内容能看到 URL、Header,甚至修改网页透传数据只转发二进制流,不关心内容封装数据将 IP 包加密封装,操作系统底层转发
加密能力弱 / 无(HTTPS 仅加密内容,代理知道你去哪)无(标准协议不加密,需配合 SSH/TLS 使用)强(全程加密隧道,ISP 无法窥探)
速度与性能慢(需解析头部,开销大)快(纯转发,开销小)中(因加密解密和封装,有一定损耗)


评论(0条)

请登录后评论
ziyuan

ziyuan Rank: 16

0

0

0

( 此人很懒并没有留下什么~~ )

首页

栏目

搜索

会员