免费注册 查看新帖 |

Chinaunix

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

__ip_conntrack_confirm函数问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-24 21:05 |只看该作者 |倒序浏览
今天在看连接跟踪表里__ip_conntrack_confirm这个函数的代码时,对它里面的一些流程没有明白,想请各位高手给解释一下,在看到这段代码时:
  1. list_for_each_entry(h, &ip_conntrack_hash[hash], list)
  2.                 if (ip_ct_tuple_equal(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple,
  3.                                       &h->tuple))
  4.                         goto out;
  5.         list_for_each_entry(h, &ip_conntrack_hash[repl_hash], list)
  6.                 if (ip_ct_tuple_equal(&ct->tuplehash[IP_CT_DIR_REPLY].tuple,
  7.                                       &h->tuple))
  8.                         goto out;
  9. ......

  10. out:
  11.         CONNTRACK_STAT_INC(insert_failed);
  12.         write_unlock_bh(&ip_conntrack_lock);
  13.         return NF_DROP;
复制代码
在上面的判断中,如果在连接跟踪表中可以找到和传过来的连接记录的tuple一样的信息,则丢包,请问这是为什么呢?还是我对ip_ct_tuple_equal这个函数理解的有误?
ip_ct_tuple_equal函数实际上是这样的:
  1. return t1->src.ip == t2->src.ip
  2.                 && t1->src.u.all == t2->src.u.all;
复制代码
请问 t1->src.u.all 判断的是什么呢?

论坛徽章:
0
2 [报告]
发表于 2010-03-24 21:36 |只看该作者
这个confirm是将一个tuple插入跟踪表的,confirm过的包不会再次进入这个函数的。
src.u.all里面有时候是port有时候是id的之类的吧,看协议啦

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
3 [报告]
发表于 2010-03-25 10:45 |只看该作者
LS正解。你看一下这个结构体就明白了。对于不同的协议,实际上比较的成员不一样,TCP和UDP都是端口,ICMP比的是type&code。但是从内存的使用角度上来看,都是一个16bit的数值。所有用all来代替,免得做协议的区分了。

论坛徽章:
0
4 [报告]
发表于 2010-03-25 15:23 |只看该作者
谢谢楼上两位的回答。src.u.all的问题现在基本搞清了。但是对于返回 return NF_DROP的问题还是没有搞清楚。为什么if (ip_ct_tuple_equal(&ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple,&h->tuple))判断为真的话就要返回NF_DROP呢?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
5 [报告]
发表于 2010-03-25 15:28 |只看该作者
那就搞清楚什么时候这个条件判断为真?

论坛徽章:
0
6 [报告]
发表于 2010-03-25 17:32 |只看该作者
判断的条件就是这个
  1. return t1->src.ip == t2->src.ip && t1->src.u.all == t2->src.u.all;
复制代码
如果返回1,就drop,我不理解
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP