データを転送するために Web ソケットを利用するサービスがあります。
ツリー構造をエンコードし、そのツリー構造を websocket 経由で転送する方法が必要です。TLV およびサブ TLV エンコーディングについて読んだことがありますが、これは素晴らしいアイデアのようです。つまり、Radius や LLDP などのプロトコルですでに使用されており、これが機能していることを証明していますが、私の問題は、これらのプロトコルが通常、信頼できるデバイス、つまりスイッチ/ルーター間 (LLDP を除く)。私の問題は、ランダムなサイズ/長さを持ち、静的に定義された構造を持たないサブ TLV を含む TLV を転送することです。サブ TLV が定義されている、つまり
Extended IS Reachability TLV #22 の場合、この tlv には次のような構造があることがわかります。
/* +-------+-------+-------+-------+-------+-------+-------+-------+
* | Type | 1
* +---------------------------------------------------------------+
* | Length ID | 1
* +---------------------------------------------------------------+
* | Neighbour ID | 7
* +---------------------------------------------------------------+
* | TE Metric | 3
* +---------------------------------------------------------------+
* | SubTLVs Length | 1
* +---------------------------------------------------------------+
* | SubTLVs value | variable
* +---------------------------------------------------------------+
* : :
*/
構造上、7 バイトのネイバー ID、3 バイトの Metric 、1 バイトの SubTLVs Length が事前定義されており、変数部分が来るだけですが、少なくとも高度に定義されていて変更できないビットがいくつかあることを意味します。
今、いくつかの本を読んで(主にH Gredler The Complete IS-IS Routing Protocol 2005 - page 296)、これらのTLVを検証する4つの手法を見つけました。
1) 最大長チェック
2) サブ TLV オーバーラン チェック
3) 離散長チェック
4) TLVコンテンツのパターンチェック
ユーザーからの情報はまったく信用できませんが、他に 2 つの問題があります。つまり、値が a) ランダムな長さ/サイズである TLV を検証する方法です。つまり、値が持つことができる範囲があります。つまり、1 バイト以上です。 700 kb 以下であり、b) その値は暗号化されているため、つまり読み取り可能な形式ではないため、その値に対してパターン チェックを実行できず、パターンを実行できません。
したがって、私の質問は次のとおりです。同じ目標を達成するにはどうすればよいですか。つまり、ツリー構造を他の構造内に送信することです。つまり、キーと値のペアまたは同様のものを送信することです (http はこれを使用していますが、それには理由があるはずです)。
ツリー構造でデータを転送するには、TLV の方法が本当に最適な方法でしょうか。それをバイナリ形式で送信すると、1発で2匹のウサギを攻撃できます。つまり、写真などのファイルを送信するときに、面白いbase64エンコーディングなどを使用する必要はありませんが、本当に欲しいのは、動作するプロトコルですL5-7 (つまり、websocket 経由) を使用すると、シリアル化と逆シリアル化の部分について考える必要なく、受信部分がツリーを識別して再構築できるツリー構造の形式でデータを送信できます。では、TLV の 2 番目に優れた代替手段は何でしょうか?一方の側で Java を使用し、もう一方の側で javasctipt を使用していることを考慮してください。