1

我在 MPPC 协议下做了一些关于压缩的工作。我在 Internet 上能找到的关于这个协议的只有 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...
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

那么,那么这个文档告诉Bit A表示初始化历史buf,Bit C表示“这是一个压缩包”,而Bit 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协议”的值,应该是0x00fd,但是压缩成0xfd。下面是 0x90 00,即 1001 0000 0000 0000。所以,Bit A 为 1,Bit B 为 0,Bit C 为 0,Bit D 为 1。

下面的 0000 0000 0000 是 Coherency Count,没关系。

我被 Wireshark 捕获的每个数据包都显示相同的内容,0xfd90。但它一定有问题,不是吗?每个数据包的位 A 为 1?并且每个数据包的位 D 都是 1?

任何人都可以就这个问题给我一些建议吗?

2.第二个问题是关于算法的。

我只是粘贴来自 rfc2118 的单词。

"

压缩器通过帧的长度运行,产生一个字面量(要发送的未压缩字节)或一个复制元组作为输出,其中 Offset 是匹配所在的历史中之前的字节数,而 Length-of-Match 是数字从偏移指示的位置复制的字节数。

例如,考虑以下字符串:

   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 回答