tor core
这里讲解Tor /src/core/or文件夹里的模块和代码,也是tor协议的核心.
首先,介绍connection_t结构体,从这个结构体派生出了or_connection_t, edge_connection_t, entry_connection_t, dir_connection_t, listener_connection_t, control_connection_t 6个子类。刚开始读代码时,以为这些子类都在Tor一个层。后来发现不是,connection_t结构体只是从这些子类中抽象出来的一个父类。
Tor协议里面分为3层从上到下为:stream,circuit,channel & or_connection.
stream是用户的特定网上行为的流量。如:打开某网页,上传文件,发送email等。
circuit是tor协议的核心,负责选择三个OR,与OR协商加密密钥,stream数据进行层层加密等等。
channel: 连接or connection和circuit的抽象层,与or connection是1对1的映射关系。
or_connection(这一层其实tor文献里没有命名,源代码里只是or_connection_t结构体存储了相关信息,所以先这么用):这个层负责两个相邻的主机的连接。相邻指的是在circuit上相邻。负责socket连接,TLS握手,Tor协议握手等等。
下面从or_connection说起,可能需要好几天。
channel: channel_t (类)
具体的 channel_t的instance:channel_tls_t(目前只有一个)
struct channel_tls_t {
/* Base channel_t struct */
channel_t base_;
/* or_connection_t pointer */
or_connection_t *conn;
};