传输协议中未使用的字段值

时间:2009-04-28 14:12:50

标签: networking communication protocols

我正在编写GSM网络内部使用的小协议的技术文档。该协议在连续的字节流中使用模式[id1] + [byte [] data1],[id2] + [byte [] data2]等。

关键是由于各种原因(未来的可扩展性和向后兼容性),不使用某些字段。这些字段的值是谁实现协议的选择(目前默认值来自用于实现协议的语言/框架,即字节数组元素的默认值)。

现在的问题。以某种方式为未使用的字段强加默认值很有用吗?

3 个答案:

答案 0 :(得分:0)

如果有的话,优势在于使用字段的协议的未来版本。默认的“坏”值会让接收方确定正在使用旧版本的协议。

答案 1 :(得分:0)

一般来说,我会说“是”。指定了默认值和填充值后,您可以在将来根据现有填充值对协议进行更改。如果您现在无法依赖线路上的字节数,那么将来就没有好办法在这些字节上强制执行结构。更不用说,允许“实现依赖值”泄漏到二进制规范中通常是个坏主意。这就是我在“线上”结构中最终得到8字节填充和英特尔订购的IP地址的方式。

答案 2 :(得分:0)

通常最好指定未使用字段的值,如下所示: - 发件人必须将字段设置为零 - 接收方必须忽略字段

这样,在未来的某个时间点,您可以选择使用该字段来获取某些新功能。执行此操作时,为了向后兼容,您需要做的就是将字段的值0定义为“引入新功能之前的旧行为。”

(实际上,引入某种形式的能力公告也是一个好主意,它允许一方发现另一方是否支持该功能,换句话说,另一方是否能够理解非该字段的值为零。)