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!