1.背景
最近在项目中,由于使用TD网络传输数据,数据掉包严重,软件组老大叫我来处理掉包问题。于是我就想起了在计算机网络中讲数据链路层协议时的“选择重传ARQ”协议(见《计算机网络》第四版 AndrewS.Tanenbaum的p187)来解决丢包问题。我不是一个好学生,所以具体细节忘了一些,遂找出那本书,把那一小节迅速浏览了一遍便想起了其具体工作流程。但是这个协议还不能直接应用于项目,因为发送方是搭载一颗arm芯片的传感器,arm的处理能力很弱,所以如此复杂的协议肯定是用不了。
2.具体设计
在本项目中,某个功能模块需要传感器采集5次数据,然后通过TD网络上传到PC端进行处理。每次数据作为一个大包,每个大包有128个小包。该模块需要一个大包数据收全才能使用。但是由于TD网络不稳定,所以在传输过程中,总是有小包丢失,导致这次数据就不能用。而这些传感器分布在离PC端几公里到几百公里的广阔范围内,传感器采集一次数据的时延很大(估计要1分钟左右),所以为提升系统性能,数据重传显得尤为重要。
如前所述,发送方为处理能力很弱的传感器。现成的复杂的协议不能使用,所以只能参考已有的重传方案设计新的方案。
综合以上因素,我们设计了被我称为“完成补包停等协议”的补包协议。具体过程如下图所示:
如上图所示,左边是数据重传的