查看: 10709|回复: 12

请教tcp分段重组!!!

[复制链接]
发表于 2010-8-6 11:23:40 | 显示全部楼层 |阅读模式
      哪位高手做过tcp分段重组,我现在做tcp分段重组,正常情况下,能知道标记位为FIN的分段是对后一个分段。但是对于标记位是PUSH的分段,我就无法判断了,哪位大哥做过,请赐教!!!

评分

1

查看全部评分

回复

使用道具 举报

发表于 2010-8-6 11:43:14 | 显示全部楼层
兄弟,你根本没描述清楚你想表达的东西,看不明白
回复

使用道具 举报

发表于 2010-8-6 11:53:19 | 显示全部楼层
本帖最后由 long_323 于 2010-8-6 11:55 编辑

应该是FIN ack 的确认为tcp重组会话的最后一个分段,以下是tcp的状态图:



以下是对tcp各字段的解释



另外要想了解整个会话的重组,可以比对科来分析系统2010,“TCP会话“视图中的 时序图部分,如图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?CSNA会员注册

×
回复

使用道具 举报

 楼主| 发表于 2010-8-6 14:27:06 | 显示全部楼层
15815

以下是对tcp各字段的解释

15814

另外要想了解整个会话的重组,可以比对科来分析系统2010,“TCP会话“视图中的 时序图部 ...
long_323 发表于 2010-8-6 11:53 [/quote]



这位大哥,我是用endace采集卡抓到的数据包,就有很多tcp分段的包,如果最后一个分段的flags标记是FIN|ACK,这样我能知道这是最后一个分段,我就能将其重组。但是还有一种分段包的flags标记都是ACK|PUSH,对于这种包,我不知道哪个是最后一个分段包?对于这种包我的算法就失效了。你能给我点这方面的资料吗?或者建议!
回复

使用道具 举报

发表于 2010-8-6 14:44:06 | 显示全部楼层
本帖最后由 孤独的意尹者 于 2010-8-6 14:55 编辑

4# I_wireshark
明白你的意思了,兄弟,站在TCP层面,那个是segment,应该叫数据段,使用“分段”,感觉措辞不是很合适。
一个会话是由五元组决定的,如果这个会话已经结束,比如,包中F标志位置1或者R标志位置1,那么就说明这个会话结束了,你就可以重组这个会话了。
如果在一个TCP会话中,没有F标志位或者R标志位置1的数据包,而只看到P标志位置1的数据包,那么说明该TCP会话的数据包还未交互完毕。
回复

使用道具 举报

发表于 2010-8-6 14:45:12 | 显示全部楼层
建议就是:
根据五元组来重组会话,而不需要根据tcp数据段中的标志位来重组会话。
回复

使用道具 举报

 楼主| 发表于 2010-8-6 17:31:54 | 显示全部楼层
ps:孤独的意尹者

这位大哥, 我是按照五元组为关联条件,如何区分p置为1的分段包,如果我不知道最后一个分段包,我不知道什么时候该合成?我是一个新手,你能说的详细点吗?我觉得我对tcp分段原理不清楚,但是我也找了很多书籍,都没什么收获,请您给点建议或方法!谢谢!
回复

使用道具 举报

发表于 2010-8-7 08:44:00 | 显示全部楼层
7# I_wireshark
一定要会话结束才能重组吗?一边捕包一边重组不行吗
回复

使用道具 举报

发表于 2010-8-7 22:35:52 | 显示全部楼层
这个问题   我也不是很明白     看有人给解释一下吧
回复

使用道具 举报

发表于 2010-8-9 09:28:59 | 显示全部楼层
请教I_wireshark,你是怎么如何重组数据包的,是用工具还是手工?
回复

使用道具 举报

 楼主| 发表于 2010-8-10 11:14:49 | 显示全部楼层
PS:long_323

我是手工重组,边解析边重组,我用的是c语言
回复

使用道具 举报

 楼主| 发表于 2010-8-10 11:17:42 | 显示全部楼层
8# 孤独的意尹者


我现在的代码有两种模式:一种是在线实时抓包解析,如有tcp分段,则需要重组,重组完后交给上层协议解析函数;
     另一种是读本地数据包文件,这种模式的流程和上面的一样。
回复

使用道具 举报

 楼主| 发表于 2010-8-10 11:26:56 | 显示全部楼层
10# long_323


我是手工重组,边解析边重组,我用的是c语言
回复

使用道具 举报

您需要登录后才可以回帖 登录 | CSNA会员注册

本版积分规则

快速回复 返回顶部 返回列表