我在 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!