5.5 周期检查分片(Fragment)接收缓存

间隔一段时间检查接收缓存,每个 Session 或者 Stream 独立处理各自的缓存,从序号 1 开始递增检查每个 Packet:

如果 Packet 处于 FRAGMENTING 状态,说明正在接收分片中,如果所有分片都已接收完成,则更新 Packet 状态为 SUCC,记录当前时间为 Packet 接收完成时间。把所有分片数据重新组装还原数据,通过已协商的加密参数(algorithm, key, iv)解密数据,并向上层应用程序交付数据。此时不必立刻从接收缓存中删除 Packet,可以等到设置的接收超时时间到了再删除。可防止此间发送端重复发送该 Packet。

如果有分片还未接收,而此时如果已接收超时,则更新 Packet 状态为 FAIL,并从接收缓存中删除。

如果当前序号对应的 Packet 不存在,则表示从未收到该 Packet,可能发生了丢包。如果已接收超时,则跳过该序号继续接收下个 Packet。