有关Microsoft点对点压缩(MPPC)的问题?

时间:2012-04-17 05:48:46

标签: compression

我在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协议”的值。它应该是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.第二个问题是算法。

我只是粘贴rfc2118中的单词。

压缩机贯穿框架的长度,产生为    输出Literal(要解压缩的字节)或Copy元组,其中Offset是字节数    之前在比赛所在的历史和比赛的长度是    从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!

1 个答案:

答案 0 :(得分:1)

请问,我找到了答案。 我犯了一个错误。我会解释它,希望它能帮助像我一样困扰的人。

Q1: 我认为我捕获的数据包是加密的。我捕获了更多的数据包,结果是正确的。

Q2: 早些时候,我一直在考虑“偏移”是从历史字符串的头部偏移,然后我最终发现它实际上意味着“从指向历史字符串的当前指针返回”。

我将编辑我的问题标题。希望它对其他人有帮助。