1

MPPC のプロトコルの下で圧縮に関する作業を行っています。このプロトコルについてインターネットで見つけられるのは、RFC2118 だけです。

この RFC では、理解できないことがいくつかあります。

1.以下、MPPCのパケットフォーマットについて説明します。

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         PPP Protocol          |A|B|C|D| Coherency Count       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Compressed Data...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

さて、このドキュメントでは、ビット A は履歴 buf の初期化を意味し、ビット C は「これは圧縮されたパケットです」を意味し、ビット D は常に「0」に設定されていることを示しています。

ただし、Wireshark でキャプチャしたものは、次のようなものです。

0000   xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx fd  ...C...<=....j0@
0010   90 00 dd 43 ed bf e9 3c 3d b1 bc fe 07 6a 30 40  ...C...<=....j0@
0020   c8 8e 15 c6 f8 3d 5a 27 6d 24 db 37 be f8 c9 e5  .....=Z'm$.7....
0030   28 ae 0e 85 3a ae 15 32 10 ed ce d4              (...:..2....

0xfd は「PPP Protocol」の値です。0x00fd のはずですが、0xfd に圧縮されています。次は 0x90 00 で、1001 0000 0000 0000 です。したがって、ビット A は 1、ビット B は 0、ビット C は 0、ビット D は 1 です。

次の 0000 0000 0000 は Coherency Count です。

Wireshark でキャプチャしたすべてのパケットは、同じ 0xfd90 を示しています。すべてのパケットのビット A は 1 ですか? また、すべてのパケットのビット D は 1 ですか?

この質問についてアドバイスをくれる人はいますか?

2. 2 番目の質問は、アルゴリズムに関するものです。

rfc2118 からの単語を貼り付けただけです。

"

コンプレッサーはフレームの長さ全体にわたって実行され、出力としてリテラル (圧縮されずに送信されるバイト) またはコピー タプルが生成されます。ここで、オフセットは一致が存在する履歴内の前のバイト数であり、長さの一致は数値です。 Offset で示される位置からコピーするバイト数。

たとえば、次の文字列を考えてみます。

   0         1         2         3         4
   012345678901234567890123456789012345678901234567890
   for whom the bell tolls, the bell tolls for thee.

   The compressor would produce:

   for whom the bell tolls,<16,15> <40,4><19,3>e.

"

それで、「16」、「40」、「19」はどこから来たのですか?

私は何日もこの質問に悩まされています。

これは私がここに投稿する最初の質問です。私が明確にしたかどうかわかりませんか? しかし、誰かが助けを提供してくれるなら、私はそれを高く評価します.THX!

4

1 に答える 1

1

ウィル、私は答えを見つけます。私のように困っている人の助けになることを願って、説明します。

Q1: キャプチャしたパケットは暗号化されていると思います。さらにいくつかのパケットをキャプチャしたところ、正しいことがわかりました。

Q2:以前、「オフセット」は履歴文字列の先頭からのオフセットであると考えていましたが、実際には「履歴文字列を指す現在のポインターから戻る」ことを意味することが最終的にわかりました。

質問のタイトルを編集します。他の人に役立つことを願っています。

于 2012-04-18T09:07:40.947 に答える