カスタム Wireshark ディセクタで欠落している UDP フレームをどのように特定しますか?
CQS フィード用のカスタム ディセクタを作成しました(リファレンス ページ)。このフィードを受信するときのサーバー ギャップの 1 つ。Wireshark によると、一部の UDP フレームはまったく受信されません。他のすべてのサーバーにギャップがないため、フレームが送信されたことはわかっています。
CQS フレームは複数のメッセージで構成され、それぞれに独自のシーケンス番号があります。私のカスタム ディセクタは、Wireshark に次のデータを提供します。
cqs.frame_gaps - the number of gaps within a UDP frame (always zero)
cqs.frame_first_seq - the first sequence number in a UDP frame
cqs.frame_expected_seq - the first sequence number expected in the next UDP frame
cqs.frame_msg_count - the number of messages in this UDP frame
そして、このスクリーンショットに示すように、これらの各値をカスタム列に表示しています。
最後に処理されたシーケンス番号を(ローカル静的として)保存し、ディセクタがフレームを処理するときにギャップにフラグを立てるコードをディセクタに追加しようとしましたcurrent_sequence != (previous_sequence + 1)
. GUI でクリックする場所に応じて、ディセクタがランダム アクセスの順序で呼び出される可能性があるため、これは機能しませんでした。したがって、フレーム 10、次にフレーム 15、次にフレーム 11 などを処理できます。
ディセクタがその前のフレーム (または次のフレーム) が欠落しているかどうかを知る方法はありますか?
ディセクタは C で書かれています。
( serverfault.com の関連投稿も参照してください)