最近验证一个数据传输可靠性方案,走了不少弯路,在此记录,希望从中汲取教训。
需求为 能够检测数据在一条通道传输时是否发生异常,在发生异常后能够及时切换到备用通道,继续进行数据传输,保证数据传输速率和准确性;
在头几天,基于tcp协议进行验证,思路是,通过内核截包,检测是否传输速率发生异常,在速率低于一个阀值时,切换通道,在备用通道继续传输,
为保证连续和不丢包,考虑正常传输时在发送端缓存数据,在发生异常时接收端发送包的标识到发送端,发送端能够从该包开始通过备用通道继续传输,
然而,却因为缺乏对tcp协议栈实现原理的理解,竟然天真的认为在切换通道后发送端会继续传输!!实际是发送端在没有收到接收端的回复情况下会重传
相应的包直至停止发送,在做了大量准备工作和准备好实验时恍然发现,这种方案几乎是无法实现的!!
但是我们立刻停下,在确认这种天真想法无法进行后,实验了一个更为简单可靠地方案,直接切换路由!!最终不到两个小时,新的方案验证完毕!!
在高兴的同时,也懊悔不已,当时为了解决在截包模块中调试一个bug(在ip包中增加数据),甚至加班到第二天凌晨4点,走了不少弯路,其中有相应知识匮乏,
更有思路不严谨的问题,特此谨记!!