- 论坛徽章:
- 1
|
本帖最后由 jiufei19 于 2014-09-25 10:17 编辑
我在阅读V2.6.23(后续版本也一样)的连接跟踪代码的tcp_new函数时,发现对其中的tcp_conntracks这个3维数组的内容不太理解,不知道这样设计的意思是什么?
static const u8 tcp_conntracks[2][6][TCP_CONNTRACK_MAX] = {
{
/* ORIGINAL */
/* sNO, sSS, sSR, sES, sFW, sCW, sLA, sTW, sCL, sS2 */
/*syn*/ { sSS, sSS, sIG, sIG, sIG, sIG, sIG, sSS, sSS, sS2 },
/*synack*/ { sIV, sIV, sSR, sIV, sIV, sIV, sIV, sIV, sIV, sSR },
。。。
}
这个数组中TCP_CONNTRACK_MAX=10,因此共有2*6*10=120个元素,以上面第1行红色元素组为例,这是第0行第0列的10个元素,该行前面有个注释/*syn*/,表示这10个元素都和syn有关,但是我没有明白这10个元素为啥如此赋值。
另外,从get_conntrack_index函数可以看出,连接跟踪将该数组的第2维分为了6种情况,然而第6种情况TCP_NONE_SET在实际中到底是对应什么样的tcp数据?
static unsigned int get_conntrack_index(const struct tcphdr *tcph)
{
if (tcph->rst) return TCP_RST_SET;
else if (tcph->syn) return (tcph->ack ? TCP_SYNACK_SET : TCP_SYN_SET);
else if (tcph->fin) return TCP_FIN_SET;
else if (tcph->ack) return TCP_ACK_SET;
else return TCP_NONE_SET;
}
希望得到大家的帮助,谢谢! |
|