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

由于网络延时导致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端无法排序,我不知道有什么可以从原理上解决,我的预期是能区分出来先后顺序,如果不行我只能从我的业务逻辑中改动来进行排序

谢谢大家!!

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

相关推荐