免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: platinum

应如何正确计算 TCP 序号? [复制链接]

论坛徽章:
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
发表于 2008-10-30 12:06 |显示全部楼层
转发过程中,某些设备就回去校验你的seq对不对,不用等到host


问一个比较弱的问题:设备是采用什么方式校验呢,难道它记录了发送包的相关信息。

论坛徽章:
0
发表于 2008-10-30 13:25 |显示全部楼层
原帖由 Jobs.AE@ 于 2008-10-30 11:58 发表
问题1:2楼解答了,再说一下方法,链接建立的第一个报文的seq相对为1,下一个报文(同方向)的seq等于1+len(第一个报文payload长度),以此类推
问题3:丢包就丢呗,跟你无关;重传,重新计算;乱序,与你无关;复制,所有字段保持一致;
问题4:同一个报文的seq与ack_seq是互为反方向的,按照2楼及问题1的解答处理;
问题5:如果不想处理复杂的协议校验修改,建议使用proxy模式。

大概明白了,但对问题 3 还有些不解
我怎么去判断这个包是这个 TCP 连接的什么情况?换言之,我怎么知道这个包是重传的,还是乱序的,还是复制的呢?
另外,能否详细讲述一下 proxy 的意思?有什么其他变相解决办法吗?比如 tun 之类的?

论坛徽章:
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
发表于 2008-10-30 13:29 |显示全部楼层
原帖由 platinum 于 2008-10-30 13:25 发表

大概明白了,但对问题 3 还有些不解
我怎么去判断这个包是这个 TCP 连接的什么情况?换言之,我怎么知道这个包是重传的,还是乱序的,还是复制的呢?
另外,能否详细讲述一下 proxy 的意思?有什么其他变相 ...


那就是首先修改数据包的这个地方,不修改序列号了吧.

对于这个proxy是不是可以参考syncookie的那种方式呢?

当对方相应的包经过你的桥时,桥就要将序列号还有ACK_SEQ都要修改吧,然后host再发出去的包呢,是否要修改序列号呢?

论坛徽章:
0
发表于 2008-10-30 13:31 |显示全部楼层
原帖由 Godbach 于 2008-10-30 13:29 发表


那就是首先修改数据包的这个地方,不修改序列号了吧.

对于这个proxy是不是可以参考syncookie的那种方式呢?

当对方相应的包经过你的桥时,桥就要将序列号还有ACK_SEQ都要修改吧,然后host再发出去的包 ...

如何修改 seq 和 ack_seq,我倒是看了一些 RFC,也通过本地抓包了解了一些,但对 proxy 的理解和你不同,感觉类似一个 userspace 下的 application,例如 squid

论坛徽章:
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
发表于 2008-10-30 13:33 |显示全部楼层
如何修改 seq 和 ack_seq,我倒是看了一些 RFC,


host再次发出去的包要修改seq吗,不是前面提到发出去的包的seq不能改吗?

论坛徽章:
0
发表于 2008-10-30 13:38 |显示全部楼层
原帖由 Godbach 于 2008-10-30 13:33 发表


host再次发出去的包要修改seq吗,不是前面提到发出去的包的seq不能改吗?

不是不能改,而是不用改
seq 是代表 ISN + M(M = 已经发送的所有七层 payload 总和)
ack_seq 代表 ISN + N(N = 已经收到的所有七层 payload 总和)
因为第一个 payload 的长度变化了,所以后面的所有 seq 和 ack_seq 都要随之变化,变化量是这个第一个包 payload 的 diff_len

论坛徽章:
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
发表于 2008-10-30 14:26 |显示全部楼层
原帖由 platinum 于 2008-10-30 13:38 发表

不是不能改,而是不用改
seq 是代表 ISN + M(M = 已经发送的所有七层 payload 总和)
ack_seq 代表 ISN + N(N = 已经收到的所有七层 payload 总和)
因为第一个 payload 的长度变化了,所以后面的所有 s ...


应该是这样的

论坛徽章:
0
发表于 2008-10-30 14:52 |显示全部楼层
你只能对两边都分别建立TCP SESSION了,类似PROXY的样子. 或者维护seq的对应关系.
举例说, 你要记住增加了几个字节, 等返回ack_seq的时候要记得减少那几个字节. 否则发送方会糊涂掉的.

论坛徽章:
0
发表于 2008-10-30 14:55 |显示全部楼层
例子:
A给B发送, 你往里面多塞了2字节后
那么:
所有后续的B返回的ack, 你要减少2, 然后RELAY给A
所有后续的A发送的seq, 你要增加2, 然后RELAY给B

[ 本帖最后由 Au_Hank 于 2008-10-30 19:04 编辑 ]

论坛徽章:
0
发表于 2008-10-30 16:35 |显示全部楼层
原帖由 Au_Hank 于 2008-10-30 14:55 发表
例子:
A给B发送, 你往里面多塞了2字节后
那么:
所有后续的B返回的ack, 你要减少2, 然后RELAY给A
所有后续的A发送的seq, 你要减少2, 然后RELAY给B

可是我不知道应该怎么处理异常数据包
比如这个过来的数据包本身序号是错的,我如果正常计算并维护,有可能整个都错了
也就是说,我需要分析出来哪些包是错误的,从而不再计算
因为在 session 中途可能还要继续修改数据包内容,可能还会改变数据包的长度,lendiff 可能还会改变,这时怎么办?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP