我正在设计一个基于UDP的简单协议,现在我意识到其他人可以将数据包发送到我正在监听的端口。对于我的应用程序来说,这样的数据包显然是不正确的(我现在不关心安全性)
是否有 过滤这些无效邮件的方法?我想在每个数据包的开头添加一些固定的幻数,但它应该有多大? 16位是不够的?
答案 0 :(得分:0)
可能。 Java使用32个.class文件(0xcafebabe)。但实际UDP中只有534个字节,因此您可能需要保存一对。
答案 1 :(得分:0)
我认为典型的解决方案是在会话开始时要求握手(可能包括“足够长”的幻数)。当然,“会话”是您的协议需要跟踪的内容,UDP没有这个概念。保持所有当前会话的列表ip,端口和最后一个数据包接收时间应该这样做:然后您可以从未事先完成握手的对等体中丢弃所有数据包。这不仅可以防止随机未知的应用流量中断您的应用,还可以防止多个合法对等方阻止其他流量。
此外,如果您需要确保对等方与您就哪个会话同意,您可以向数据包添加会话ID或增加的数据包序列号(允许丢失数据包)。