免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9472 | 回复: 3

求助TCP数据包乱序问题 [复制链接]

论坛徽章:
0
发表于 2012-10-18 21:37 |显示全部楼层
本帖最后由 boyjimeking 于 2012-10-18 21:42 编辑

请教一个TCP通信问题!!!!
1)客户端依次发送2个包,为了好记,我标记为1号包,2号包;
2)假设1号包到达服务器的时间戳为0,2号包到达服务器的时间戳为0+2ms;
3)服务器处理单条socket流采用的是单线程异步,所以1号包、2号包会同时被处理;
5)处理1号包耗时4ms,得到1'包,处理2号包1ms,得到2'包;
6)在0+3ms的时候,把2'号包发往客户端,0+4ms的时候把1'号包发往客户端;
7)客户端接收到的包序为2‘ 、 1’

而我期待的收包顺序为1' 2' , 请问这种接收端的乱序问题,有什么成熟的机制来避免吗?

因为某些情况下如果乱序,会导致应用层数据错误。比如:挥刀砍了敌人2刀,产生2个数据包,第一刀敌人没死,第二刀敌人死了,如果第二个包的处理结果先返回来,客户端会播放敌人死亡的动画,倒地变成尸体后收到第一个包的处理结果,就会发生砍尸体现象。

谢谢大家!

论坛徽章:
0
发表于 2013-03-15 16:44 |显示全部楼层
回复 1# boyjimeking


    tcp有个sequence number,tcp重组后,在转发。内核tcp_data_queue()处理了,可以仿照一下

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
发表于 2013-03-18 10:34 |显示全部楼层
TCP是自动重组的,无需考虑乱序。UDP需要应用程序自行处理,一般是采用缓存,重排解决。

论坛徽章:
0
发表于 2016-06-10 17:29 |显示全部楼层
客户端缓存数据包,然后在数据包前面加个4字节tag,收到后重新排序下吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP