源码分析到这个部分,为了让大家明白源码中的编码逻辑,不得不开始从头梳理程序内部的复杂连接和链接组织形式。否则大家后期会更加一头雾水。笔者开始分析源码之时,没有这些宏观的概念,只能死嚼代码,硬猜硬想,再加以检查代码进行验证,才得以明白程序的主要框架逻辑。如果再以猜测验证的模式向大家讲述源码,必定会越来越混乱。所以,在本节之中,我们会将系统中所有的连接类型,链路类型和他们之间的关系和代码之中的关联方式尽量讲明。若大家遇到不明晰的部分,可以参照代码进行查阅。
在我们进行详细分析之前,先再次给出连接和链接的框架位置图。这个简单的层次图帮助我们理解不同连接和链接所处层次的位置关系,其实已经在我们分析OR连接源码之时给出,之时当时没有进行过多的深入介绍。
DIR连接,LISTENER连接 |
----------------- |
AP连接,EXIT连接…… Tor协议上层 |
---------------------------- | 应用层
Circuit链路…… Tor协议中层 |
---------------------------- |
OR连接…… Tor协议下层 |
------------------------------------
TLS连接 传输层
1. 连接
很明显,系统中的连接类型多种多样,各有各自的不同职能。在此处,我们先罗列出所有系统中存在的连接,其后再对一些我们比较重视的连接类型进行相关说明。
//OR监听连接:本地用于监听远端传来的OR请求,为每个新请求建立一个OR连接;OR监听连接本地全局只有一个;
#define CONN_TYPE_OR_LISTENER 3
//OR连接:基于TLS连接的,主要负责To