wanghao19920907 2019-01-16 10:23 采纳率: 0%
浏览 1189

由于网络延时导致TCP连接乱序的问题

具体情况是这样的:
最近在做一个C/S架构的模块,Server和client是在两台机器上,运行环境是window
client所在的机器上由于是生产环境,不知道为什么具有很大的网络延时,偶伴有丢包。

正常三次握手连接之后正常通信,当时客户端的read报错了,之后客户端会关闭连接然后重建连接,socket已经设置了SO_LINGER选项,close时会立刻关闭
然后关闭连接之后没有等待就立刻进行了重连

但当server端看到的情况是,先处理了client重连的请求,然后处理了socket关闭的请求,由于根据业务要求,一个IP只能存在一个节点信息,当先收到重连请求时,会存在两个一样IP的节点信息,server就将新来的节点关闭了,导致client退出了

但其实client是先关闭再重连的,但是由于网络的原因还是不知道什么样的原因,到这srver端面这是先进行的重连再进行的关闭,导致出现BUG

TCP连接虽然是可靠的连接,根据协议会进行乱序重排,但是那应该是一个连接之内的情况,由于是新建的连接,TCP应该不会对旧连接和新连接的顺序进行校验,导致连接乱序的发生

各位大神,请问我理解的对不对,如果有问题请指正出来,遇到此类问题如果解决,TCP是工作在3层网络中,凭借TCP的接口函数,貌似从server端拿不到socket时间的时间戳,server端无法排序,我不知道有什么可以从原理上解决,我的预期是能区分出来先后顺序,如果不行我只能从我的业务逻辑中改动来进行排序

谢谢大家!!

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-09 16:22
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题