免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: jiufei19
打印 上一主题 下一主题

[网络子系统] ip_frag_reasm函数中的一个问题【已解决】 [复制链接]

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
11 [报告]
发表于 2016-10-20 19:34 |只看该作者
maybe IPinIP,  fragmented in both inner and outer layer?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
12 [报告]
发表于 2016-10-20 20:49 |只看该作者
nswcfd 发表于 2016-10-20 19:34
maybe IPinIP,  fragmented in both inner and outer layer?

没有理解IPinIP怎么就会产生这一现象呢?能否说得详细些?

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
13 [报告]
发表于 2016-10-20 20:54 |只看该作者
回复 11# nswcfd

nswcfd是否也看到我说的这个frag_list非空的问题了?

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
14 [报告]
发表于 2016-10-20 21:20 |只看该作者
没实际遇到过,只是猜想某些隧道协议会不会有多重分片的场景。
第一层是隧道本身的分片重组,第二层是原始报文的分片重组。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
15 [报告]
发表于 2016-10-20 22:20 |只看该作者
回复 14# nswcfd

比如IPTunnel的代码可以在内核中找到,能够看到内核处理tunnel的细节。但是这里我用cscope进行搜索,除了在ip_push_pending_frames中能看到ip分段与frag_list有关外,其他再也没有找到frag_list和报文分段相关的地方了,所以很奇怪内核为啥要如此写

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
16 [报告]
发表于 2016-10-21 12:47 |只看该作者
既然ip_defrag/ip_frag_reasm作为一个API存在,就得考虑适应各种奇奇怪怪的调用者吧(包括还未出现在代码树里的用法)。

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
17 [报告]
发表于 2016-10-21 14:15 |只看该作者
回复 16# nswcfd

仔细读了遍代码,之前看得不仔细,现在问题解决了一半,即我之前画的图没有问题,虽然是有两个分支在clone结点上,但是因为skb_copy_datagram_iovec函数内部有一个递归调用,所以即便有两个链表,也没有问题,递归调用时总是先把frag_list上的分段数据读完,之后才是在clone->next链表上继续遍历读取,之前没有看仔细,太囧了,但是为啥frag_list上会有数据,或者说在哪个场景中会有,还是不明白

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
18 [报告]
发表于 2016-10-21 15:31 |只看该作者
回复 16# nswcfd

晕死了,今天仔细阅读了下代码,发现还是自己看错了。
我提到的这个问题其实就是这样的场景就会产生,之前大意了:

1、是本地L4层进行了初步分段,因此ip_push_pending_frames后在首个分段的frag_list上有数据
2、经过1处理的报文由loopback dev的发送又重新投入到协议栈

之前我说ip_fragment会将所有分段拆开发送是错误的,代码并没有这样做,就是直接发送,并没有将frag_list链表断开!


评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 赞一个!

查看全部评分

论坛徽章:
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
19 [报告]
发表于 2016-10-21 18:23 |只看该作者
回复 18# jiufei19

看来只要死磕,肯定是可以找到原因的

论坛徽章:
1
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00
20 [报告]
发表于 2016-10-21 19:11 |只看该作者
感谢斑竹鼓励
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP