MST

星途 面试题库

面试题:网络编程:当FTP传输遭遇网络丢包时,如何设计一种可靠的文件传输恢复机制

假设在FTP文件传输过程中,网络出现丢包情况。请你设计一套基于FTP协议的文件传输恢复机制,包括如何检测丢包、确定丢包位置,以及怎样在不重新传输整个文件的前提下恢复传输,并阐述这套机制与FTP原有错误处理机制的结合方式。
10.9万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

1. 检测丢包

  • 基于ACK确认机制:FTP在数据传输时,接收方会对收到的数据块发送ACK确认包。发送方若在设定的超时时间内未收到ACK,可判定发生丢包。例如,发送方发送数据块1、2、3,若在超时时间内未收到数据块2的ACK,可初步认为数据块2丢包。
  • 心跳检测:在传输过程中,双方定期发送心跳包。若发送方连续多次未收到接收方的心跳包,可推测网络出现异常,可能存在丢包情况。

2. 确定丢包位置

  • 序号标记:在FTP传输数据时,为每个数据块添加序号。当发送方未收到某个序号数据块的ACK时,即可确定该序号对应的数据块丢包。如上述例子中,未收到数据块2的ACK,就知道是序号为2的数据块丢包。
  • 哈希校验:接收方对收到的数据块计算哈希值,并与发送方在传输前提供的整个文件哈希值进行对比。若对比不一致,可通过对文件分段计算哈希值,逐步缩小范围确定丢包位置。

3. 不重新传输整个文件前提下恢复传输

  • 重传丢包数据块:发送方在检测到丢包后,重新发送对应序号的数据块。如确定数据块2丢包,发送方重新发送数据块2。
  • 前向纠错(FEC):发送方在发送数据时,同时发送一些冗余纠错数据。接收方利用这些冗余数据,对丢包的数据块进行恢复,而无需发送方重传。例如,发送方发送数据块1、2、3时,额外发送一些基于1、2、3计算得出的冗余数据,接收方若数据块2丢包,可尝试利用冗余数据恢复数据块2。

4. 与FTP原有错误处理机制结合方式

  • 融合错误报告:FTP原有错误处理机制有对一般性错误的报告。将丢包检测到的错误信息,按照FTP错误报告格式进行整合,使得错误报告更统一。例如,将丢包错误编码融入到FTP错误码体系中,便于接收方和发送方清晰识别。
  • 状态机调整:FTP协议有自己的状态机,在传输状态下增加丢包处理状态。当检测到丢包时,进入丢包处理状态,执行确定丢包位置、恢复传输等操作,完成后再回到正常传输状态。