0

GSM ネットワークで内部的に使用される小さなプロトコルの技術文書を書いています。このプロトコルは、バイトの連続ストリームで [id1] + [byte[] data1]、[id2] + [byte[] data2] などのパターンを使用します。

ポイントは、さまざまな理由 (将来の拡張性と下位互換性) により、一部のフィールドが使用されないことです。このフィールドの値は、誰がプロトコルを実装するかの選択です (現時点では、デフォルト値はプロトコルの実装に使用される言語/フレームワーク、つまりバイト配列要素のデフォルト値に由来します)。

今質問です。未使用のフィールドにデフォルト値を課すことは、何らかの方法で役立ちますか?

4

3 に答える 3

0

一般的に、私は「はい」と言います。デフォルト値とフィル値を指定すると、将来、既存のフィル値に基づいてプロトコルを変更できます。現在ネットワーク上にあるバイトに依存できない場合、将来それらのバイトに構造を強制する良い方法はありません。言うまでもなく、「実装依存の値」がバイナリ仕様に漏れるのを許すのは一般的に悪い考えです。これが、8 バイトのパディングと Intel で順序付けられた IP アドレスを「ネットワーク上」の構造にした方法です。

于 2009-04-28T14:19:25.657 に答える
0

一般に、未使用のフィールドの値を次のように指定することをお勧めします。 - 送信者はフィールドをゼロに設定する必要があります - 受信者はフィールドを無視する必要があります

そうすれば、将来のある時点で、フィールドを新しい機能に使用することを選択できます。その場合、下位互換性のために必要なことは、フィールドの値 0 を「新しい機能の導入前の古い動作」を意味するように定義することだけです。

(実際には、一方の側がその機能をサポートしているかどうか、つまり、他方の側がゼロ以外の値を理解できるかどうかを一方が発見できるようにする何らかの形式の機能アナウンスメントを導入することも良い考えです。フィールド。)

于 2009-04-28T16:46:51.217 に答える
0

利点があるとすれば、フィールドが使用されるプロトコルの将来のバージョンにあります。デフォルトの「悪い」値により、受信者は古いバージョンのプロトコルが使用されていると判断できます。

于 2009-04-28T14:16:05.760 に答える