1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
|
Network Working Group K. Schneider
Request for Comments: 1967 ADTRAN, Inc.
Category: Informational R. Friend
Stac Technology
August 1996
PPP LZS-DCP Compression Protocol (LZS-DCP)
Status of This Memo
This memo provides information for the Internet community. This memo
does not specify an Internet standard of any kind. Distribution of
this memo is unlimited.
Abstract
The Point-to-Point Protocol (PPP) [1] provides a standard method for
transporting multi-protocol datagrams over point-to-point links.
The PPP Compression Control Protocol [2] provides a method to
negotiate and utilize compression protocols over PPP encapsulated
links.
This document describes the use of the Stac LZS data compression
algorithm for compressing PPP encapsulated packets, using a DCP
header [6]. This protocol is an enhanced version of the non-DCP
(Option 17) PPP Stac LZS compression protocol [5], and will be
referred to as the LZS-DCP Compression Protocol.
Table of Contents
1. Introduction .......................................... 2
1.1 Licensing ....................................... 3
1.2 Specification of Requirements ................... 3
1.3 Terminology ..................................... 3
2. LZS-DCP Packets ....................................... 4
2.1 Example LZS-DCP Packets ......................... 5
2.2 Padding ......................................... 6
2.3 Reliabliity and Squencing ....................... 6
2.4 Data Expansion .................................. 6
2.5 Packet Format ................................... 7
2.5.1 PPP Protocol .................................... 7
2.5.2 DCP-Header ...................................... 8
2.5.3 History Number .................................. 9
2.5.4 Sequence Number ................................. 9
2.5.5 Data ............................................ 10
2.5.6 Longitudinal Check Byte ......................... 10
Schneider & Friend Informational [Page 1]
^L
RFC 1967 LZS-DCP August 1996
2.5.7 Compressed Data ................................. 11
3. Sending Compressed Datagrams ..................... 11
3.1 Transmitter Process ............................. 11
3.2 Receiver Process ................................ 12
3.3 History Maintenance ............................. 13
3.4 Anti-Expansion Mechanism ........................ 14
3.5 History Resynchronization Mechanism ............. 14
4. Configuration Option Format ........................... 15
SECURITY CONSIDERATIONS ...................................... 16
REFERENCES ................................................... 17
CHAIR'S ADDRESS .............................................. 17
AUTHORS' ADDRESSES ........................................... 18
1. Introduction
Starting with a sliding window compression history, similar to LZ1
[3], Stac Electronics developed a compression algorithm identified as
Stac LZS. A PPP Compression Protocol for this compression algorithm
was developed and published [5]. That protocol was taken as a basis
for data compression work done in TIA for DSU/CSUs. As a part of
that standardization process, the concept of a portable Data
Compression Protocol (DCP) was introduced [6]. The resulting
(pending) TIA/EIA-655 standard uses this LZS-DCP protocol, which
ncorporates DCP into a PPP compression protocol for Stac LZS. A very
similar protocol is currently out for ballot in the Frame Relay
Forum. (It is identical except for the size of the history number
field.)
This publication of the LZS-DCP compression protocol is in the
interest of providing a common compression protocol for Stac-LZS, and
to provide features that are not available with the LZS compression
protocol [5]. Some of the differences between the LZS-DCP and LZS
(compression type 17) protocols are as follows:
1) LZS-DCP provides an option which allows packets containing
uncompressible data to be transferred without requiring the
compression history to be cleared, potentially allowing a
higher compression ratio. A bit is included in the DCP
header to indicate whether the packet contains compressed or
uncompressed data.
2) LZS-DCP uses reset request and acknowledgment bits in the DCP
header that is included on each packet rather than using
CCP's reset request and acknowledge packets, which may result
in fewer discarded data packets during the REQ/ACK handshake.
3) LZS-DCP allows simultaneous use of both sequence numbers and
the LCB for compression error detection.
Schneider & Friend Informational [Page 2]
^L
RFC 1967 LZS-DCP August 1996
The Stac LZS compression algorithm supports both single and multiple
compression histories. A single compression history will require the
minimum amount of memory to implement, but may not provide as much
compression as a multiple history implementation.
Often, many streams of information are interleaved over the same
physical link. Each virtual connection will transmit data that is
independent of other virtual connections. Using multiple compression
histories can improve the compression ratio of a communication link
by associating separate compression histories with separate virtual
links of communication.
1.1. Licensing
Source and object licenses are available on a non-discriminatory
basis. Hardware implementations are also available. Contact Stac
Electronics (hardware.sales@stac.com) for further information.
1.2. Specification of Requirements
In this document, several words are used to signify the requirements
of the specification. These words are often capitalized.
MUST This word, or the adjective "required", means that the
definition is an absolute requirement of the specification.
MUST NOT This phrase means that the definition is an absolute
prohibition of the specification.
SHOULD This word, or the adjective "recommended", means that there
may exist valid reasons in particular circumstances to
ignore this item, but the full implications MUST be
understood and carefully weighed before choosing a
different course.
MAY This word, or the adjective "optional", means that this
item is one of an allowed set of alternatives. An
implementation which does not include this option MUST be
prepared to interoperate with another implementation which
does include the option.
1.3. Terminology
This document frequently uses the following terms:
datagram The unit of transmission in the network layer (such as IP).
A datagram may be encapsulated in one or more packets
passed to the data link layer.
Schneider & Friend Informational [Page 3]
^L
RFC 1967 LZS-DCP August 1996
frame The unit of transmission at the data link layer. A frame
may include a header and/or a trailer, along with some
number of units of data.
packet The basic unit of encapsulation, which is passed across the
interface between the network layer and the data link
layer. A packet is usually mapped to a frame; the
exceptions are when data link layer fragmentation is being
performed, or when multiple packets are incorporated into a
single frame.
peer The other end of the point-to-point link.
silently discard
This means the implementation discards the packet without
further processing. The implementation SHOULD provide the
capability of logging the error, including the contents of
the silently discarded packet, and SHOULD record the event
in a statistics counter.
2. LZS-DCP Packets
Before any LZS-DCP packets are communicated, PPP MUST reach the
Network-Layer Protocol phase, and the CCP Control Protocol MUST reach
the Opened state.
Exactly one LZS-DCP datagram is encapsulated in the PPP Information
field, where the PPP Protocol field indicates type hex 00FD
(compressed datagram) or type hex 00FB (Individual link compressed
datagram). Type hex 00FD is used when compression is negotiated over
a single physical link or when compression is negotiated over a
single bundle consisting of multiple physical links. Type hex 00FB
is used when compression is negotiated separately over individual
physical links to the same destination. For more information, please
refer to PPP Compression Control Protocol.
The maximum length of the LZS-DCP datagram transmitted over a PPP
link is the same as the maximum length of the Information field of a
PPP encapsulated packet.
Prior to compression, the uncompressed data begins with the PPP
Protocol ID Field. Protocol-Field-Compression MAY be used on this
value, if has been successfully negotiated for the link.
The PPP Protocol ID Field is followed by the original Information
field. The length of the uncompressed data field is limited only by
the allowed size of the compressed data field and the higher protocol
Schneider & Friend Informational [Page 4]
^L
RFC 1967 LZS-DCP August 1996
layers.
PPP Link Control Protocol packets MUST NOT be sent within LZS-DCP
packets. PPP Network Control Protocol packets MUST NOT be sent
within LZS-DCP packets.
2.1. Example LZS-DCP packets (shown using PPP in HDLC-like framing,
using Address-and-Control-Field-Compression and Protocol-Field-
Compression. - RFC 1662 )
Compressed Packet:
PPP | | PPP
PID | HDR SEQ DATA LCB | FCS
+-----+-----+-----+---................---+-----+-----+
| F D | C 0 | n n | Compressed Data | y y | z z |
+-----+-----+-----+---................---+-----+-----+
/ \
/ Compression \
/ Transformation \
/ \
/PPP \
/ PID PPP Information Field \
+-----+----....................----+
| x x | upper layer protocol data |
+-----+----....................----+
Uncompressed Packet
PPP | | PPP
PID | HDR SEQ DATA | FCS
+-----+-----+-----+---................---+-----+
| F D | 8 0 | n n | Un-compressed Data | z z |
+-----+-----+-----+---................---+-----+
/ \
/ \
/ \
/ \
/PPP \
/ PID PPP Information Field \
+-----+----....................----+
| x x | upper layer protocol data |
+-----+----....................----+
where: C0 and 80 are representative LZS-DCP headers; nn, xx, yy,
and zz are values determined by the packet's context.
Schneider & Friend Informational [Page 5]
^L
RFC 1967 LZS-DCP August 1996
2.2. Padding
PPP padding is not allowed in a LZS-DCP packet. However, on
compressed packets, padding may be accomplished by extending the
data field with zeros following the last compressed data octet
(see Section 2.1.1). This is referred to as LZS Padding. The
LCB, if present, MUST be the octet preceding the frame CRC.
2.3. Reliability and Sequencing
When no Compression History is kept, the algorithm does not depend
on a reliable link, and does not require that packets be delivered
in sequence. However, per packet compression results in a lower
compression ratio than it could be on a stream.
Some reasons for clearing the history on a per packet basis
include:
- The link has a high error rate.
- The resources of the transmitter or receiver limit the ability
to maintain a compression history between packets.
When one or more compression Histories are negotiated, the packet
sequence MUST be preserved within specific History Numbers. There
is no sequence requirement between different History Numbers.
When using one or more compression histories, the implementation
MUST rely on either a lower layer reliable link protocol (RFC
1663), use a technique to keep the compressor and decompressor
histories in synchronization, or both. The LZS-DCP protocol
provides the Request-Req and Request-Ack bits in the DCP header
for this purpose. Since this synchronization is done on a per
history basis, the history number fields are required to be the
same size in both directions of the link. Any data contained in
the packet is processed after the signaling bits are processed.
The transmitter MAY clear a Compression History at any time.
The transmitter MUST clear a history after a receiving a Reset-
Request for a given History Number.
2.4. Data Expansion
The maximum expansion of Stac LZS is 12.5%.
A Maximum Receive Unit (MRU) MAY be negotiated that is 12.5%
larger than the size of a normal packet. Then, packets can always
be sent compressed regardless of expansion.
Schneider & Friend Informational [Page 6]
^L
RFC 1967 LZS-DCP August 1996
The transmitter MAY send an uncompressed LZS-DCP packet at any
time, although the typical use of uncompressed LZS-DCP packets is
as an anti-expansion mechanism.
When the expansion plus compression header exceeds the size of the
peer's MRU for the link, the data MUST be sent as an uncompressed
LZS-DCP packet.
An uncompressed LZS-DCP packet is transmitted according to the
format shown in Section 2.1, with the C/U bit set to 0
(Uncompressed-Data). If the Configuration Option Field 'Process
Mode', is set to a value of 1 (Process-Uncompressed), uncompressed
LZS-DCP packets are processed by both the compressor and the
decompressor, updating the histories of each. If the Process Mode
Field is set to a value of 0 (None), and the compressor has
modified its history before sending the uncompressed packet, the
compressor history MUST be clear.
2.5. Packet Format
A summary of the LZS-DCP packet format is shown below. The fields
are transmitted from left to right.
0 1 2
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PPP Protocol | DCP-Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| (History Number) | (Seq Num) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| (LCB) |
+-+-+-+-+-+-+-+-+
2.5.1. PPP Protocol
The PPP Protocol field is described in the Point-to-Point Protocol
Encapsulation [1].
When the LZS-DCP compression protocol is successfully negotiated
by the PPP Compression Control Protocol [2], the value is 00FD or
00FB hex. This value MAY be compressed when Protocol-Field-
Compression is negotiated.
Schneider & Friend Informational [Page 7]
^L
RFC 1967 LZS-DCP August 1996
2.5.2. DCP-Header
The DCP-Header is nominally one octet in length, but may be
extended through the use of the extension bit.
The format of the DCP-Header is as follows:
0 1 2 3 4 5 6 7
+-----+-----+-----+-----+-----+-----+-----+-----+
| E | C/U | R-A | R-R | Res | Res | Res | C/D |
+-----+-----+-----+-----+-----+-----+-----+-----+
E - Extension Bit
The E bit is the extension bit. If set to 0, it indicates that
another octet of the DCP-Header is present. Currently, this
bit is always set to 1, since the DCP-Header field is only one
octet long.
C/U - Compressed/Uncompressed Bit
The C/U indicates whether the data field contains compressed or
uncompressed data. A value of 1 indicates compressed data
(often referred to as a compressed packet), and a value of 0
indicates uncompressed data (or an uncompressed packet).
R-A - Reset-Ack
The R-A bit is used to inform the decompressing peer that
the history buffer specified by the history number in the
packet was in the cleared state just before the data contained
in the packet was processed by the compression transformation
(see section 3., Sending Compressed Datagrams). This bit MUST
be set to a value of "1" to indicate a Reset-Ack, and to
acknowledge a receive failure (R-R) (see section 3., Sending
Compressed Datagrams). This bit is specific to the history
number of the packet containing it.
R-R - Reset-Request
The R-R bit is used to request that the compressing peer
clear the history buffer specified by the history number in the
packet. This bit MUST be set to a value of "1" to indicate a
Reset-Request, and to respond to a receive failure (R-R) (see
section 3., Sending Compressed Datagrams). This bit is
specific to the history number of the packet containing it.
Schneider & Friend Informational [Page 8]
^L
RFC 1967 LZS-DCP August 1996
Res - Reserved
These bits are reserved and MUST be set to 0
C/D - Control/Data
This bit is used by DCP to provide in-band negotiation in
applications where out-of-band negotiation methods are not
provided (i.e. Frame Relay). Since CCP provides an out of band
negotiating mechanism, this feature is not used in this
application. All packets MUST set this bit to a value of 0,
which signifies that the packet is a data packet. (Packets
containing only Reset- Requests are classified as data
packets.)
2.5.3. History Number
The number of the compression history which was used, ranging from
1 to the negotiated value in the History Count field.
If the negotiated History Count is less than 2, this field is
removed. If the negotiated History Count is 2 or more, but less
than 256, this field is 1 octet. If 256 or more histories are
negotiated, this field is 2 octets, most significant octet first.
If multiple histories are used in one direction on a link, the
history number field MUST be present on all packets in both
directions, and sized according to the largest number of histories
in either direction.
If multiple histories are used, this field MUST be present in
uncompressed as well as compressed packets.
2.5.4. Sequence Number
The sequence number field is one octet in length. When the check
mode field is set to the "Sequence Number" or "Sequence Number +
LCB" options, the sequence number field MUST be present in all
data compression packets that contain a data field.
The value of the sequence number field (the sequence number of the
packet) MUST begin with "1" and increment modulo 256 on successive
packets that contain data fields. This number is relative to the
history number used.
On receipt of a packet with the R-A bit set to "0", if the
sequence number of the packet is any number other than (N+1) mod
256, where N is the sequence number of the last packet received
Schneider & Friend Informational [Page 9]
^L
RFC 1967 LZS-DCP August 1996
for the same history, or an initial value of "0", a receive
failure for that history has occurred. The receive failure MUST
be handled according to the synchronization procedure in section
3.5.
The sequence number MUST NOT be reset by the transmitter when a
packet containing a Reset-Ack is sent. The decompressor MUST
resynchronize its sequence number reference for the indicated
history when a packet containing a Reset-Ack is received.
2.5.5. Data
The data field MUST contain a single datagram in either compressed
or uncompressed form, depending on the state of the C/U bit in the
Header. This length of this field is always be an integer number
of octets. This field is required in all packets that do not have
the R-R bit set to "1".
If the C/U bit is set to "0", the data field contains the
uncompressed form of the datagram.
If the C/U bit is set to "1", the form of the data field is one
block of compressed data as defined in 3.2 of X3.241-1994, with
the following exceptions: 1) the end marker may be followed with
additional octets containing only zeros; 2) if the final octet in
the block of compressed data has a value of "0", then it MAY be
removed from the data field.
There is only one end marker per block of compressed data.
2.5.6. Longitudinal Check Byte
The LCB field is one octet in length, and if present MUST be the
last octet in the data compression packet. When the check-mode
field is set to "LCB" or "Sequence Number + LCB", this field MUST
be present in all packets where the data field contains compressed
data. This field MUST NOT be present in data compression packets
where the data field contains uncompressed data. This field
contains the result of the LCB calculation, in accordance with the
following paragraph.
The LCB octet is the Exclusive-OR of FF(hex) and each octet of the
uncompressed datagram (prior to the compression transformation).
On receipt, the receiver computes the Exclusive-OR of FF(hex) and
each octet of the decompressed packet. If this value does not
match the received LCB, then a receive failure for that history
has occurred. The receive failure is handled according to the
history synchronization procedure in section 3.5.
Schneider & Friend Informational [Page 10]
^L
RFC 1967 LZS-DCP August 1996
2.5.7. Compressed Data
The Stac LZS compression algorithm is Defined in ANSI X3.241-1994
[7]. The format of the compressed data is repeated here for
informational purposes ONLY.
<Compressed Stream> := [<Compressed String>] <End Marker>
<Compressed String> := 0 <Raw Byte> | 1 <Compressed Bytes>
<Raw Byte> := <b><b><b><b><b><b><b><b> (8-bit byte)
<Compressed Bytes> := <Offset> <Length>
<Offset> := 1 <b><b><b><b><b><b><b> | (7-bit offset)
0 <b><b><b><b><b><b><b><b><b><b><b> (11-bit offset)
<End Marker> := 110000000
<b> := 1 | 0
<Length> :=
00 = 2 1111 0110 = 14
01 = 3 1111 0111 = 15
10 = 4 1111 1000 = 16
1100 = 5 1111 1001 = 17
1101 = 6 1111 1010 = 18
1110 = 7 1111 1011 = 19
1111 0000 = 8 1111 1100 = 20
1111 0001 = 9 1111 1101 = 21
1111 0010 = 10 1111 1110 = 22
1111 0011 = 11 1111 1111 0000 = 23
1111 0100 = 12 1111 1111 0001 = 24
1111 0101 = 13 ...
3. Sending Compressed Datagrams
The reliable and efficient transport of datagrams on the data link
depends on the following processes.
3.1. Transmitter Process
The compression operation results in either compressed or
uncompressed data. When a network datagram is received, it is
assigned to a particular history buffer and processed according to
ANSI X3.241-1994 to form compressed data or used as is to form
uncompressed data. Prior to the compression operation, if a
Reset-Request is outstanding for the history buffer to be used,
the buffer is cleared. In performing the compression operation,
if the process mode field is set to the value None ("0"), the
history MUST only be updated if the result is compressed data. If
process mode field is set to the value Process-Uncompressed ("1"),
Schneider & Friend Informational [Page 11]
^L
RFC 1967 LZS-DCP August 1996
the history MUST be updated when either compressed data or
uncompressed data is produced. Uncompressed data MAY be sent at
any time. Uncompressed data MUST be sent if compression causes
enough expansion to cause the data compression datagram size to
exceed the Information field's MRU.
If the Process Mode field is set to the value None ("0") and the
compressor has modified the history buffer before sending an
uncompressed datagram, the history buffer MUST be cleared before
the next datagram is processed.
The output of the compression operation is placed in the
information field of the datagram. The C/U bit is set according
to whether the data field contains compressed or uncompressed
data. If the sequence number field is present according the value
of the check mode field, the sequence number counter for the
applicable history number MUST be incremented and its value placed
in the sequence number field. If the data field contains
compressed data, and Check Mode field is set accordingly, the LCB
field is present and its value is computed as specified in section
2.2.6.
Upon reception of a packet containing a Reset-Request, the
transmitting compressor MUST be cleared to an initial state, which
includes clearing the history buffer. If the data field of the
packet containing the Reset-Request contains data, it is delivered
to the local receiver as a normal data packet. In addition to the
reset of the compressor, a packet MUST be transmitted with Reset-
Ack bit set to 1. The data field of this packet MUST be filled
with data. If no data is ready for transmission, the transmitter
MUST wait until data is ready before sending the Reset-Ack.
If the history buffer is in the clear state (the history buffer
contains no data bytes) prior to performing the compression
operation, the resulting compressed or uncompressed packet MUST be
sent with the R-A bit set to "1".
3.2. Receiver Process
When a data compression datagram is received from the peer, the
R-R and R-A bits MUST be checked. If the R-R bit is set, the
local compression engine MUST be signaled that a Reset-Request has
been received for the history specified by the history number
field. If the R-A bit is set, any outstanding receive failure for
the specified history MUST be cleared. If no receive failure is
outstanding, and the sequence number field is present, its value
checked. If a receive failure has occurred, it MUST be handled
according to the history resynchronization mechanism described
Schneider & Friend Informational [Page 12]
^L
RFC 1967 LZS-DCP August 1996
below, and the remainder of the datagram is discarded. If no
receive failure is detected, the data is assigned to the indicated
decompression history buffer and processed according to process
mode field and C/U bit.
If the C/U bit is set to "1", a single octet containing the value
0x00 MUST be appended to the data field and the resulting
compressed data block MUST be decompressed according to ANSI
X3.241-1994. If the LCB field is present on the received
datagram, an LCB for the uncompressed data MUST be computed and
checked against the received LCB according to section 2.1. If a
receive failure has occurred, it MUST be handled according to the
History Resynchronization Mechanism described below.
If the C/U bit is set to "0" and the process mode field is set to
the value Process-Uncompressed ("1"), the specified decompression
history buffer MUST be updated with the received uncompressed
data.
If the C/U bit is set to "0" and process mode field is set to the
value None ("0"), the specified decompression history buffer MUST
NOT be modified.
If the R-A bit is set to "1", the receiving decompressor MAY be
reset to an initial state. (However, due to the characteristics
of the Stac LZS algorithm, a decompressor reset is not required).
After reset, any compressed or uncompressed data contained in the
packet is processed.
On the occurrence of a receive failure, an implementation MUST
transmit a packet with the R-R bit set to "1" (a Reset-Request)
and with the history number matching the history that had the
failure. The data field may be present if data is waiting to be
transported for that history, or the R-R bit may be set in a
packet transmitted without sequence number, data, or LCB fields.
Once a receive failure has occurred, the data in any subsequent
packets received for that history MUST be discarded until a packet
containing a Reset-Ack is received. It is the responsibility of
the receiver to ensure the reliability of the reset request-
acknowledge mechanism. This may require the transmission of an
additional Reset-Request before a Reset-Ack will be received.
3.3. History Maintenance
The History Count field determines the number of history buffers
to be maintained for the compression protocol. For example, each
history buffer could represent a separate logical connection
between the data compression peers. When maintaining a history,
Schneider & Friend Informational [Page 13]
^L
RFC 1967 LZS-DCP August 1996
the peers MUST use link error detection and signaling to ensure
that both the compressor and decompressor copies of each history
buffer are always identical.
Setting the History Count field to the value "0" indicates that
the compression is to be on a connectionless basis. In this case,
a single history buffer is used and MUST be cleared at the
beginning of every datagram. The compressing entity MUST set the
R-A bit on all outgoing datagrams.
When the History Count field is set to the value "1", a single
history buffer is maintained by each of the data compression
peers. (A single logical connection.)
When the History Count field is set to a value greater than "1",
separate history buffers, error detection states, and signaling
states are maintained by the decompressing entity for each
history. The compressing peer may transmit data on any number of
separate histories, up to the value of the History Count field.
3.4. Anti-Expansion Mechanism
When one or more histories are negotiated and the Process Mode
field is set to None ("0"), there are 2 options on how to handle
packets that expand:
1) Send the expanded data and keep the history, thus allowing
loss of current bandwidth but preserving future bandwidth on
the link.
2) Send the uncompressed data and clear the history, thus
conserving current bandwidth, but allowing possible loss of
future bandwidth on the link.
When 1 or more histories are negotiated and the Process Mode field
is set to Process-Uncompressed ("1"), there is an additional
option:
3) Send the uncompressed data and do not clear the compression
history; the decompressor will update its history, thus
conserving the current bandwidth and future bandwidth on the
link.
3.5. History Resynchronization Mechanism
The DCP-Header includes R-R (Reset-Request) and R-A (Reset-Ack)
bits in order to provide a mechanism for indicating a receiver
failure in one direction of a compressed link without affecting
traffic in the other direction. A receive failure is determined
Schneider & Friend Informational [Page 14]
^L
RFC 1967 LZS-DCP August 1996
using the sequence number and/or LCB mechanism, according to the
value of the check mode field.
Reset-Requests and Reset-Acks are specific to the history number
of the packet containing them.
Reset-Request/Reset-Ack history synchronization signaling is
provided to recover from a loss of synchronization between peers,
especially in unreliable transport layers. As with all
compression algorithms, the decompressor can not recover from
dropped, erroneous, or mis-ordered datagrams, and will propagate
errors catastrophically until both peers are reset to an initial
state.
The LZS-DCP protocol provides a means to detect these error
conditions: LCB for erroneous datagrams, and sequence number for
dropped or mis-ordered datagrams. There is a means for correcting
a loss of synchronization: clear both the failing compression and
decompression histories, and follow the transmitter and receiver
processes in sections 3.1. and 3.2.
4. Configuration Option Format
The LZS-DCP Configuration Option negotiates the use of LZS-DCP on the
link. By default or ultimate disagreement, no compression is used.
This Configuration Option is used in CCP, and can be used in other
negotiation mechanisms [2].
All implementations MUST support the default values.
A summary of the LZS-DCP Configuration Option format is shown below.
The fields are transmitted from left to right.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length | History Count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Check Mode | Process Mode |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Type
23
Length
6
Schneider & Friend Informational [Page 15]
^L
RFC 1967 LZS-DCP August 1996
History Count
The History Count field is two octets, most significant octet
first, and specifies the maximum number of Compression Histories.
The value 0 indicates that the implementation expects the peer to
clear the Compression History at the beginning of every packet.
If this value is selected, the transmitter MUST set the Reset-Ack
bit of every packet that contains compressed data.
The value 1 is the default value and is used to indicate that only
one history is maintained.
Other valid values range from 2 to 65535. The peer is not
required to send as many histories as the implementation indicates
that it can accept. However, it should be noted that resources
are allocated in each peer to support the number of negotiated
histories in this field.
Check Mode
The Check Mode indicates support of LCB and/or Sequence checking.
The use of check mode None (0) MUST NOT be used for history counts
greater than zero.
0 None
1 LCB
2 Sequence Number
3 Sequence Number + LCB (default)
Process Mode
The Process Mode specifies how uncompressed packets are handled.
A value of None (0) indicates that uncompressed packets are not
processed by the decompressor. A value of Process-Uncompressed
(1) indicates that uncompressed packets are processed by the
decompressor to update the history.
0 None (default)
1 Process-Uncompressed
Security Considerations
Security issues are not discussed in this memo.
Schneider & Friend Informational [Page 16]
^L
RFC 1967 LZS-DCP August 1996
Acknowledgments
This document is based on, and uses much of the text of [5].
References
[1] Simpson, W., Editor, "The Point-to-Point Protocol (PPP)", STD
51, RFC 1661, Daydreamer, July 1994.
[2] Rand, D., "The PPP Compression Control Protocol (CCP)", RFC
1962, June 1996.
[3] Lempel, A., and J. Ziv, "A Universal Algorithm for Sequential
Data Compression", IEEE Transactions On Information Theory,
Vol. IT-23, No. 3, May 1977.
[4] Rand, D., "PPP Reliable Transmission", RFC 1663, Novell, July
1994.
[5] Friend, R., and W. Simpson, "PPP Stac LZS Compression
Protocol", RFC 1974, August 1996.
[6] Motorola Information Systems Group, "Data Compression Protocol
(DCP) Proposal", TR-30.1 ad hoc contribution (email
reflector), September 21, 1995.
[7] ANSI X3.241-1994, "American National Standard Data Compression
Method, Adaptive Coding with Sliding Window of Information
Interchange".
Chair's Address
The working group can be contacted via the current chair:
Karl Fox
Ascend Communications
3518 Riverside Drive, Suite 101
Columbus, Ohio 43221
EMail: karl@ascend.com
Schneider & Friend Informational [Page 17]
^L
RFC 1967 LZS-DCP August 1996
Authors' Addresses
Questions about this memo can also be directed to:
Kevin Schneider
Adtran, Inc.
901 Explorer Blvd.
Huntsville, AL 25806
Phone: (205) 971-8024
EMail: kschneider@adtran.com
Robert Friend
Stac Technology
12636 High Bluff Drive
San Diego, CA 92130-2093
Phone: (619) 794-4542
EMail: rfriend@stac.com
Schneider & Friend Informational [Page 18]
^L
|