首先我们先想像下,有一台电脑,装了代理软件、macos、chrome;
我们再明确下,http代理工作在应用层(TCP/IP模型中),仅支持http协议,sockets工作在会话层(OSI模型中是会话层,TCP/IP模型中可以理解为传输层和应用层中间的一个特殊层),支持所有应用层协议;
1.在代理软件打开代理,Chrome没有配置代理,macos没有配置系统代理时:
chrome没有检测到系统代理,自己也没有配置代理,于是直接和服务器进行通讯,发送http数据;
2.在代理软件打开代理,Chrome配置了代理软件的侦听地址,macos没有配置系统代理时:
1)配置的代理是http代理时:chrome将原请求的url和数据作为数据封装到http协议的数据字段中(有点绕,语句没毛病),此时新的http报文的目的地址是代理服务器的地址,代理服务器收到数据后进行再请求即可完成访问;
2)配置的代理是socks代理时:chrome将原请求的url和数据作为数据封装到socks报文中,然后通过tcp协议发送给代理服务器;
3.在代理软件打开代理,Chrome没有配置代理,macos配置了指向代理软件侦听地址的系统代理时:
chrome会自动读取系统代理的配置,因此若系统只配置了http代理或socks代理,情况和上述一样,若系统同时配置了http和socks代理,香港vps则由chrome选择使用哪个代理;
4.若代理软件打开代理,chrome配置了指向代理软件侦听端口的代理,macos系统配置了其他代理时:
chrome肯定是通过代理软件进行代理,再转发到代理服务器的;
5.若代理软件打开代理,chrome配置了指向代理软件侦听端口的代理,macos系统配置了其他代理时:
1)不管代理软件是什么代理,系统代理为什么代理,chrome都代理到代理软件,不通过系统代理
2)猜测:tor代理软件为socks代理,系统代理或有其他代理软件为socks代理时(tor代理软件可以自动发现本地的代理服务!),在tor浏览器中,tor浏览器先代理到tor代理,tor代理剥离出数据,如此,tor代理软件(此时是个客户端)会通过系统代理从目录服务器获取全球部分结点信息(此过程不是http请求,猜测是udp),然后随机选三个,交换秘钥,再进行正式的网站的访问,获得返回的数据后由tor代理再返回给tor浏览器;
综述就是:tor浏览器发出请求会通过tor代理,tor代理在从目录服务器获取结点需要通过系统代理,与跳板通讯时不需要通过系统代理(因为与跳板通讯很可能使用的是socks的代理方式通讯,这也解释了本地的tor代理(用的是socks5协议)监听默认的9150端口不仅给本地tor浏览器提供代理,同时给其他人当跳板用)
?
参考资料:https://wrfly.kfd.me/posts/socks%E4%BB%A3%E7%90%86%E5%92%8Chttp%E4%BB%A3%E7%90%86%E7%9A%84%E5%8C%BA%E5%88%AB/
https://www.xiongjunhan.com/archives/2354
https://blog.csdn.net/Extraordinarylife/article/details/52512860
72034623