免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1543 | 回复: 0
打印 上一主题 下一主题

[网络子系统] 连接跟踪中tcp_conntracks数组的含义? [复制链接]

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-09-25 09:39 |只看该作者 |倒序浏览
本帖最后由 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;
  }



希望得到大家的帮助,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP