4

私はいくつかのプロトコルを使用し、独自のプロトコルを作成しました。メッセージを識別するために 1 文字のみのメッセージ形式と、4 文字のメッセージ形式を作成しました。どちらが優れているかを判断するのに十分な経験があるとは思わないので、どのシナリオでどちらが優れているかを説明する回答を探しています。

A%1iパフォーマンスについては、2 バイトを送信する ( ) 方が 5 バイトを送信する ( ) よりも高速であると想像できますABCD%1i。ただし、1 バイトのプレフィックスを使用してプロトコルを記述する場合、コードがソケットから十分なデータを読み取れないバグがある場合、システムに不要なデータが入ってくる可能性があることに気付きました。

では、4 バイトのプレフィックスの目的は、メッセージがクリーンであることを保証するためだけですか? あなたが犠牲にするパフォーマンスには価値がありますか?あなたは本当にパフォーマンスを犠牲にしていますか?たぶん、2バイトまたは3バイトのプレフィックスを付けたほうがよいでしょうか?

この質問が TCP に固有のものなのか、それともすべてのトランスポート プロトコルに当てはまるのかはわかりません。これに関するアドバイスは興味深いでしょう。

更新:興味深いことに、Synergy は 4 バイトのメッセージ プレフィックスを使用することに言及します。そのため、マウス移動デルタの場合、ヘッダーは実際のデータと同じサイズになります。効率を改善するために、1 バイトまたは 2 バイトのプレフィックスを付けることを提案する人もいます。これにはどんな欠点があるのだろうか?

更新:また、ガベージデータが心配な場合は、ハンドシェイクだけが本当に重要なのだろうか. Synergy のハンドシェイクは長い (数バイト) ため、4 バイトのメッセージ プレフィックスが必要ですか? 私は最近、1 バイトのハンドシェイクしか持たないプロトコルを作成しましたが、互換性のないプロトコルがシステムに不正なデータをスパム送信していたため、それは悪い考えであることが判明しました (この裏から、少なくとも長いハンドシェイクをお勧めするかもしれません)。 .

4

2 に答える 2

1

ヘッダーの目的は、フレーム同期の問題(シリアル通信におけるバイト アラインメント)を解決しやすくすることです。同期するために、受信側はデータ ストリーム内でメッセージ開始ヘッダーに「似ている」ものを探します。さまざまな種類の有効なメッセージ開始ヘッダーがあり、それらすべてが 1 バイト長である場合、必然的に多くの「誤ったフレーム同期」が発生します。 -of-message ヘッダーですが、そうではありません。シリアル データ ストリーム内の何かが有効なメッセージ開始ヘッダーに「見える」可能性が低い他のヘッダーを選択することをお勧めします。

パケット ヘッダーをどのように設計しても、システムに不要なデータが入ってくることは避けられません。これらの他の問題 (メッセージの途中で時折発生するビット エラーなど) を処理するために使用するものは、時折発生する「誤ったフレーム同期」のガベージを処理するのにも十分なはずです。一部のシステムでは、不良データが新しい正常データによってすぐに上書きされ、まばたきしても不良データが表示されない場合があります。他のシステムでは、不良データを拒否するために、フッターで少なくとも何らかのエラー検出が必要です。しかし、他のシステムは、そのようなエラーを検出するだけでなく、そのメッセージのエラーのないバージョンが正常に受信されたと両側が確信するまで、何らかの方法でそのメッセージを再送信し続ける必要があります。

Oleksi が暗示したように、一部のシステムでは、1 つのバイナリ ビット (100 ミリ秒) を送信する場合と 10 バイト (102.4 ミリ秒) を送信する場合とでレイテンシに大きな違いはありません。したがって、小さなヘッダーを使用する利点 (2.4% 少ないレイテンシー!) は、より冗長なヘッダーを使用する利点 (デバッグが容易、後方互換性と前方互換性が容易、効果のテストが容易) に比べれば価値がないかもしれません。古いプロトコルとは完全に互換性のない新しいプロトコルにロックステップで両側をアップグレードすることなく、「孤立して」マイナーな変更を行います)。

おそらく、(a) 非常にめったに使用されないため、小さなヘッダーの影響が小さすぎて測定できないメッセージ (ほぼすべてのメッセージであると思われます) に、冗長でデバッグしやすいヘッダーを保持することで、両方の世界を最大限に活用できます。 、および (b) あらゆる種類のメッセージに対して、小さなヘッダーの効果が「著しく優れている」か、少なくとも測定可能な「小さなヘッダー」形式を導入します。Synergy プロトコルは、他の種類のメッセージ ヘッダーと簡単に区別できる方法で、このような「小さなヘッダー」形式を追加するのに十分な柔軟性を備えているようです。

ラップトップといくつかのデスクトップ マシンの間でSynergyを使用しています。誰かがそれをさらに良くしようとしていることを嬉しく思います。

于 2012-07-24T18:36:34.353 に答える
0

パフォーマンスは、送信するメッセージの内容によって異なります。コンテンツが数キロバイトの場合、ヘッダーが何バイトかは問題ではありません。1 バイトを送信する場合と 4 バイトを送信する場合のパフォーマンスの違いは、送信している実際のデータと比較して無視できるため、今のところ、最も簡単に使用できるスキームを選択します。

于 2012-07-22T17:09:21.330 に答える