【发布时间】:2013-07-05 21:23:55
【问题描述】:
您好,我有一台服务器通过 UDP 与客户端通信。基本上,客户端流向服务器 UDP 数据包。每个数据包由标头和有效负载组成。在标题中,只有一个短整数 - 我称之为 seqnum,从 0 到 SHORT_MAX。当客户端发送到 SHORT_MAX 时,它会从 0 重新开始。
在服务器上我需要以这种方式重构流:
a) 如果数据包到达时将预期的 seqnum 附加到流中。
b) 如果数据包以低于预期的 seqnum 到达 - 丢弃它 - 这是迟到的数据包
c) 如果数据包以比预期更高的 seqnum 到达 - 将预期和实际 seqnum 之间的数据包视为丢失并尝试重建它们,然后附加实际数据包
我现在正在处理与计数器溢出有关的两个问题:
1) 如何在 SHORT_MAX 边界上检测情况 c)(例如,预期为 SHORT_MAX-2,数据包中的实际 seqnum 为 2)-在我的情况下,它会被错误地检测为情况 b)
2) 同样的问题 b) 被错误地检测为 c)
非常感谢
【问题讨论】:
-
(C) 需要一个合理大小的窗口。任何比你现在所在位置早十个的数据包编号要么是一个错误,要么至少是不切实际的遥远,应该被丢弃。