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
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
|
Network Working Group R. Friend
Request for Comments: 1974 Stac Electronics
Category: Informational W. Simpson
DayDreamer
August 1996
PPP Stac LZS Compression Protocol
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, with single or multiple compression histories, for
compressing PPP encapsulated packets.
Table of Contents
1. Introduction .......................................... 2
1.1 Licensing ....................................... 2
1.2 Specification of Requirements ................... 3
2. LZS Packets ........................................... 3
2.1 Padding ......................................... 4
2.2 Zero Deletion/Insertion ......................... 4
2.3 Reliability and Sequencing ...................... 4
2.3.1 Reset-Request and Reset-Ack Packet Formats....... 5
2.4 Data Expansion .................................. 6
2.5 Packet Format ................................... 6
2.5.1 PPP Protocol .................................... 7
2.5.2 History Number .................................. 7
2.5.3 Check Value ..................................... 7
2.5.3.1 LCB ........................................ 7
2.5.3.2 CRC ........................................ 7
2.5.3.3 Sequence Number ............................ 8
2.5.3.3.1 History Synchronization with Sequence
Numbers Example ...................... 9
Friend & Simpson Informational [Page 1]
^L
RFC 1974 Stac LZS August 1996
2.5.4 History Synchronization Procedure ............... 10
2.5.5 Compressed Data ................................. 11
3. Sending Compressed Datagrams .......................... 12
3.1 Transmitter Process ............................. 12
3.2 Receiver Process ................................ 12
3.3 History Maintenance ............................. 13
3.4 History Resynchronization Mechanism ............. 14
4. Configuration Option Format ........................... 14
5. Definition of Extended Mode ........................... 16
5.1 Extended Mode Packet Format ..................... 16
5.2 Extended Mode Transmitter Process ............... 18
5.3 Extended Mode Receiver Process .................. 18
5.4 Extended Mode Synchronization ................... 19
SECURITY CONSIDERATIONS ...................................... 19
REFERENCES ................................................... 20
CHAIR'S ADDRESS ........................................... 20
AUTHORS' ADDRESSES............................................ 20
1. Introduction
Starting with a sliding window compression history, similar to LZ1
[3], Stac Electronics developed a new, enhanced compression algorithm
identified as Stac LZS. The LZS algorithm is optimized to compress
all file types as efficiently as possible. Even string matches as
short as two octets are effectively compressed.
The Stac LZS compression algorithm supports both single compression
history communication and multiple compression history communication.
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
link. Each virtual link will transmit data that is independent of
other virtual links. 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 at the address and phone number listed with the author's
address for further information.
Friend & Simpson Informational [Page 2]
^L
RFC 1974 Stac LZS August 1996
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.
2. LZS Packets
Before any LZS packets may be communicated, PPP must reach the
Network-Layer Protocol phase.
When the Compression Control Protocol (CCP) has reached the Opened
state, and LZS is negotiated as the primary compression algorithm,
exactly one Stac LZS 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.
When CCP has not successfully reached the Opened state, or LZS is not
the primary compression algorithm, exactly one LZS datagram is
encapsulated in the PPP Information field, where the PPP Protocol
field indicates type hex 4021 (Stac LZS).
Note that in the latter case, use of LZS is terminated by the PPP
LCP Protocol-Reject. The default format is used: a single history
with no History Number field and no Check Value field (as if the
Friend & Simpson Informational [Page 3]
^L
RFC 1974 Stac LZS August 1996
negotiated history count were 1).
The maximum length of the Stac LZS 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 it 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
layers.
PPP Link Control Protocol packets MUST NOT be sent within Stac LZS
packets. PPP Network Control Protocol packets MUST NOT be sent
within Stac LZS packets.
2.1. Padding
The LZS Information field always ends with the last compressed data
byte (also known as the <end marker>), which is used to disambiguate
padding. This allows trailing bits as well as octets to be
considered padding.
2.2 Zero Deletion/Insertion
When the sender does not add Padding [1], any trailing zero octets
MAY be removed prior to transmission. A single trailing zero octet
MUST be appended upon receipt, after removal of any framing FCS.
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 resetting 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 more than 1 Compression History is negotiated, the packet
sequence MUST be preserved within specific History Numbers. There is
no sequence requirement between different History Numbers.
Friend & Simpson Informational [Page 4]
^L
RFC 1974 Stac LZS August 1996
When one or more compression histories is negotiated on the link, the
implementation MUST implement either a lower layer reliable link
protocol, or keep the compressor and decompressor histories in
synchronization, or both.
To maintain history synchronization, the implementation MUST use the
Reset-Request and Reset-Ack messages of the Compression Control
Protocol and MUST use an Option 17 check mode value of sequence
numbers (and MAY implement other check mode values other than none).
In this case the Data field of the CCP Reset-Request and Reset-Ack
MUST contain the two octet History Number to be reset, most
significant octet first.
If neither of these conditions are met on the data link, then the
compression histories MUST be reset after transmitting each datagram.
The transmitter MAY clear a Compression History at any time. The
receiver is implicitly notified of this event, and the decompression
history will automatically be affected.
The transmitter MUST reset a history after a CCP Reset-Request for
the given History Number.
2.3.1 Reset-Request and Reset-Ack Packet Formats
A summary of the CCP Reset-Request and Reset-Ack packet formats
for Stac LZS compressed links are 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Code | Identifier | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Code
14 for Reset-Request;
15 for Reset-Ack.
Identifier
On transmission, the Identifier field MUST be changed whenever the
content of the Data field changes, and whenever a valid reply has
Friend & Simpson Informational [Page 5]
^L
RFC 1974 Stac LZS August 1996
been received for a previous request. For retransmissions, the
Identifier MAY remain unchanged.
On reception, the Identifier field of the Reset-Request is copied
into the Identifier field of the Reset-Ack packet.
Data
The Data field contains the two octet History Number of the
compression history that is to be reset, most significant octet
first. This History Number value is 1 when no history number is
present.
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.
When the expansion plus compression header exceeds the size of the
peer's MRU for the link, the PPP packet MUST be sent without
compression, in the original PPP packet form with the "native" PPP
Protocol ID number. The transmitter MUST reset the affected history.
If it is detected that most packets are expanding (for example, due
to the use of already compressed data), then the transmitter SHOULD
stop sending compressed packets, and reset the appropriate history.
Data compression MAY be resumed on this data link later.
2.5. Packet Format
A summary of the Stac LZS packet 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| PPP Protocol | (History Number*) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| (Check Value*) | Compressed Data ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* Note: these fields are variable length fields as described below.
Friend & Simpson Informational [Page 6]
^L
RFC 1974 Stac LZS August 1996
2.5.1. PPP Protocol
The PPP Protocol field is a 2 octet field described in the Point-
to-Point Protocol Encapsulation [1].
When the Stac LZS compression protocol is successfully negotiated
by the PPP Compression Control Protocol [2], the value is 00FD hex
or 00FB hex as described in section 2. This value MAY be
compressed when Protocol-Field-Compression is negotiated.
2.5.2. History Number
The history number field comprises 0, 1, or 2 octets.
The number of the compression history which was used, ranging from
2 to the negotiated History Count. By default a History Count of
value 1 is supported and this field is not present.
If the negotiated History Count is less than 2, this field is
removed. There is no need for the field when no history is kept,
or only a single history is kept.
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.
2.5.3. Check Value
The check value field comprises 0, 1, or 2 octets. By default,
sequence number check is added to the packet (the field comprises
1 octet).
2.5.3.1. LCB
A simple one octet Longitudinal Check Byte (LCB) MAY be used,
after successful negotiation of the LCB option. The LCB is the
Exclusive-OR of FF(hex) and each octet of the uncompressed
datagram (prior to the compression operation). 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 2.5.4.
2.5.3.2. CRC
A two octet Cyclic Redundancy Check (CRC) MAY be used, instead
of the LCB, after successful negotiation of the CRC option.
Friend & Simpson Informational [Page 7]
^L
RFC 1974 Stac LZS August 1996
The transmitter MUST initialize the CRC value to FFFF(hex) at
the beginning of each packet. The CRC computation is based on
the HDLC FCS-16 polynomial:
x**16 + x**12 + x**5 + 1
The ones complement of the CRC is transmitted least significant
octet first, which contains the coefficient of the highest
term. On receipt, the receiver initializes the CRC to FFFF
(hex), and computes the CRC based on the formula above for each
octet of the decompressed packet. If the received CRC value
does not match the transmitted CRC value, then a receive
failure for that history has occurred. The receive failure is
handled according to the history synchronization procedure in
section 2.5.4.
2.5.3.3. Sequence Number
A one octet Sequence Number MAY be used, instead of a LCB or
CRC, after successful negotiation of the Sequence Number
option. After CCP has reached the open state, the transmitter
MUST set the value of the sequence number field (the sequence
number of the packet) to "1" and increment modulo 256 on
successive packets that contain data fields. The sequence
number is relative to the history number used.
After CCP has reached the open state, the receiver MUST set its
internal reference value of the next expected sequence number
(the sequence number of next packet to be received) to "1".
After a packet is received, the receiver MUST set the value of
its internal reference value of the next expected sequence
number for that history to the value of the sequence number
field of the received packet plus 1 modulo 256.
If the sequence number of the received packet is not equal to
the internal reference value of the expected sequence number
for the same history, a receive failure for that history has
occurred. The receiver MUST silently discard the out of order
packet, and handle the failure according to the history
synchronization procedure in section 2.5.4.
The sequence number MUST NOT be reset by the transmitter when a
packet containing a Reset-Req is received. The receiver MUST
always maintain its sequence number references for all
supported histories.
Friend & Simpson Informational [Page 8]
^L
RFC 1974 Stac LZS August 1996
2.5.3.3.1 History Synchronization with Sequence Numbers Example
Compressing Sender Decompressing Receiver
.... ....
send seq 101 -----------> recv seq 101
is 101 == 101? Ok.
forward packet for processing
set internal reference to 102
send seq 102 -----------> recv seq 102
is 102 == 102? Ok.
forward packet for processing
set internal reference to 103
send seq 103 ------X (packet lost)
send seq 104 -----------> recv seq 104
is 104 == 103? Send reset req!
silently discard packet
set internal reference to 105
(packet lost) X------- send reset request (ID=200)
post-increment the identifier.
send seq 105 -----------> recv seq 105
is 105 == 105? Ok.
was reset ack received? No!
silently discard packet
set internal reference to 106
<----------- send reset request again(ID=200)
(e.g. reset-ack time out)
send seq 106 ------X (packet lost)
recv reset req <-----------
(after line delay)
(ID=200)
reset compression
history
send reset ack -----------> recv reset ack (ID=200)
(ID=200)
send seq 107 -----------> recv seq 107
is 107 == 106? Send reset req!
silently discard packet
set internal reference to 108
Friend & Simpson Informational [Page 9]
^L
RFC 1974 Stac LZS August 1996
recv reset req <----------- send reset request (ID=201)
(ID=201) post-increment the identifier.
send seq 108 -----------> recv seq 108
is 108 == 108? Ok.
was reset ack received? No!
silently discard packet
set internal reference to 109
send seq 109 -----------> recv seq 109
is 109 == 109? Ok.
was reset ack received? No!
silently discard packet
set internal reference to 110
reset compression
history
send reset ack -----------> recv reset ack (ID=201)
(ID=201)
send seq 110 -----------> recv seq 110
is 110 == 110? Ok.
forward packet for processing
set internal reference to 111
send seq 111 -----------> recv seq 111
is 111 == 111? Ok.
forward packet for processing
set internal reference to 112
.... ....
2.5.4. History Synchronization Procedure
On receipt, if Sequence Number one (1) follows any other number
than zero (0), or is otherwise out of sequence, or the LCB or CRC
is invalid, a CCP Reset-Request MUST be sent, containing the two
octet History Number (most significant octet first, and which is
the value 1 when no History Number is present), with a CCP
Identifier. Identifiers are incremented on each occurrence of an
out of sequence packet.
Upon receipt of the Reset-Request, the transmitter MUST reset the
affected compression history, and transmit a CCP Reset-Ack packet
with the Identifier field and data (history number) field set to
the corresponding values of the Reset-Request. However, the
Sequence Number (if implemented) is not reset.
Friend & Simpson Informational [Page 10]
^L
RFC 1974 Stac LZS August 1996
For each packet that generates a receive failure, the receiver
MUST increment the Identifier and transmit a CCP Reset-Request.
For re-transmissions of existing receive failures, the Identifier
MUST NOT be incremented.
After transmitting the Reset-Request packet, the receiver MUST
continue silently discarding valid compressed packets for the
corresponding history, until the correct CCP Reset-Ack Identifier
(corresponding to the Reset-Request) for that History Number is
received. Note that if sequence numbers are used, the receiver
MUST process the sequence number of a received packet according to
the procedures in section 2.5.4.
2.5.5. Compressed Data
The data field MUST contain only one datagram in compressed form.
The length of this field is always an integer number of octets.
There MUST BE only one end marker per block of compressed data.
The form of the data field is one block of compressed data as
defined in 3.2 of X3.241-1994, and 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 ...
Friend & Simpson Informational [Page 11]
^L
RFC 1974 Stac LZS August 1996
3. Sending Compressed Datagrams
The reliable and efficient transport of datagrams on the data link
depends on the following processes.
3.1. Transmitter Process
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. Prior to the compression operation, if a Reset-
Request is outstanding for the history buffer to be used or if the
negotiated history count for this data link is 0, the history buffer
is cleared.
Uncompressed data MUST be sent (in the original PPP packet form with
the "native" PPP Protocol ID number) if compression causes enough
expansion to cause the data compression datagram size to exceed the
Information field's MRU. In this case, since 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. 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 LCB field is
present according the value of the check mode field, the LCB value
MUST be computed as specified in section 2.5.3.1. and the resultant
value placed in the LCB field. If the CRC field is present according
the value of the check mode field, the CRC value MUST be computed as
specified in section 2.5.3.2. and the resultant value placed in the
LCB field. Upon reception of a CCP Reset-Request packet, the
transmitting compressor MUST be cleared to an initial state, which
includes clearing the history buffer. In addition to the reset of
the compressor, a CCP Reset-Ack packet MUST be transmitted. The data
field of this packet MUST be filled with the corresponding two octet
history number, most significant octet first.
3.2. Receiver Process
If a CCP Reset-Request packet is received, the local compression
engine MUST be signaled that a Reset-Request has been received for
the history number specified in the data field. If a CCP Reset-Ack
packet is received, 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 is checked. If a
receive failure has occurred, it MUST be handled according to the
Friend & Simpson Informational [Page 12]
^L
RFC 1974 Stac LZS August 1996
history resynchronization mechanism described 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 the compressed data block
MUST be decompressed according to ANSI X3.241-1994. If the LCB or
CRC fields are present on the received datagram, an LCB or CRC for
the uncompressed data MUST be computed and checked against the
received LCB or CRC according to sections 2.5.3.1. or 2.5.3.2.,
respectively. If a receive failure has occurred, it MUST be handled
according to the History Resynchronization Mechanism described in
section 3.4.
If a CCP Reset-Ack packet is received, the receiving decompressor's
corresponding history MAY be reset to an initial state. (However,
due to the characteristics of the Stac LZS algorithm, a decompressor
history 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 CCP Reset-Request packet with the data field containing
the two octet history number (most significant octet first) matching
the history that had the failure. Once a receive failure has
occurred, the data in any subsequent packets received for that
history MUST be discarded until a CCP Reset-Ack packet containing a
valid Identifier matching the Identifier that was sent with the last
CCP Reset-Request packet is received. It is the responsibility of
the receiver to ensure the reliability of the Reset-Request/Ack
mechanism. This may require the transmission of additional CCP
Reset-Request packets before a CCP Reset-Ack packet is 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, 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.
When the History Count field is set to the value "1", a single
history buffer is maintained by each of the data compression peers.
Friend & Simpson Informational [Page 13]
^L
RFC 1974 Stac LZS August 1996
(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. History Resynchronization Mechanism
The Stac LZS protocol utilizes CCP Reset-Request/Reset-Ack mechanism
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 using the LCB, CRC,
or sequence number mechanisms, 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 Stac LZS protocol provides a means to detect these error
conditions: LCB or CRC 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
Description
The CCP Stac LZS Configuration Option negotiates the use of
Stac LZS on the link. By ultimate disagreement, no compression is
used.
All implementations must support the default values.
Friend & Simpson Informational [Page 14]
^L
RFC 1974 Stac LZS August 1996
A summary of the Stac LZS 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 |
+-+-+-+-+-+-+-+-+
Type
17
Length
5
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.
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 field indicates support of LCB, CRC or Sequence
checking, and other future extensions to this standard. This
field comprises 2 sub-fields, and is considered to be bit-mapped.
The 3 least significant bits comprise 5 mutually exclusive values.
The upper 5 bits are all "Reserved" bit locations must be set to
"0" to allow for future backward-compatible extensions to this
standard.
Friend & Simpson Informational [Page 15]
^L
RFC 1974 Stac LZS August 1996
For compatibility, Sequence Numbers MUST be implemented; the other
four check modes MAY be implemented.
Defined values:
0 None (MAY be implemented; however, MUST
implement history count of zero)
1 LCB (MAY be implemented)
2 CRC (MAY be implemented)
3 Sequence Number (MUST be implemented)
4 Extended Mode (MAY be implemented)
0 1 2 3 4 5 6 7
+-------+-------+----------+-----+-----+-----+-----+-----+
| LCB/CRC/Seq#/Ext'd | Res | Res | Res | Res | Res |
+-------+-------+----------+-----+-----+-----+-----+-----+
5. Definition of Extended Mode
When Check Mode 4 (Extended Mode) is successfully negotiated, the
packet format is different from the format described above. The
Extended Mode format is described below. Extended Mode only supports
a history count of 1.
5.1. Extended Mode Packet Format
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...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
PPP Protocol
The PPP Protocol field is described in the Point-to-Point Protocol
Encapsulation [1].
When a compression protocol is successfully negotiated by
the PPP Compression Control Protocol [2], the value is hex 00FD.
Protocol-Field-Compression MUST NOT be used on this value when
extended mode is negotiated on the link, even if Protocol-Field-
Compression was successfully negotiated before data compression.
Friend & Simpson Informational [Page 16]
^L
RFC 1974 Stac LZS August 1996
Bit A - PACKET_FLUSHED
This bit indicates that the history buffer has just been reset
before this packet was generated. Thus, this packet can ALWAYS
be decompressed because it is not based on any previous history.
This bit is typically sent to inform the peer that it has reset
its history buffer and that the peer can accept this packet
and re-synchronize.
Bit B
This bit is not used with Stac LZS compression.
Bit C - PACKET_COMPRESSED
This bit is used to indicate that the packet is compressed. A
value of 0 indicates uncompressed data, and a value of 1 indicates
compressed data.
Bit D
This bit is not used with Stac LZS compression.
Coherency Count
The coherency count is used to assure that the packets are sent in
proper order and that no packet has been dropped. This count is
initialized to the value 0x000, and is always increased by 1 after
each PPP packet is sent. When all bits are 1, the count returns
to 0.
The coherency count is 12 bits so the decompressor must handle the
rollover case.
Compressed Data
The compressed data begins with the protocol field. For example,
an IP packet may contain 0021 followed by an IP header. The
compressor will first try to compress the 0021 protocol field and
then move on to the IP header.
Protocol-Field-Compression MUST NOT be used on this value when
extended mode is negotiated on the link, even if Protocol-Field-
Compression was successfully negotiated before data compression.
Zero deletion/insertion described in section 2.2 MUST NOT be
performed when extended mode is negotiated.
Friend & Simpson Informational [Page 17]
^L
RFC 1974 Stac LZS August 1996
5.2. Extended Mode Transmitter Process
When a network datagram is received, it is processed according to
ANSI X3.241-1994 to form compressed data. If a CCP Reset-Request has
been received from the decompressor, the compressor must clear its
history buffer before sending the next packet.
Uncompressed data MUST be sent if the compression operation causes
the compressed datagram to expand. In this case, since 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 uncompressed data is placed in the
information field of the datagram, and Bit-A MUST be set (indicating
the history was cleared) and Bit-C MUST be clear (indicating
uncompressed data) in the current packet's header. The value of the
coherency counter is placed in the coherency count field and then the
coherency counter is incremented.
If the compression operation does not cause the compressed datagram
to expand and if a received Reset-Request is outstanding, then the
output of the compression operation is placed in the information
field of the datagram, and Bit-A MUST be set (indicating the history
was cleared) and Bit-C MUST be set (indicating compressed data) in
the current packet's header. The value of the coherency counter is
placed in the coherency count field and then the coherency counter is
incremented.
If the compression operation does not cause the compressed datagram
to expand and there is not a Reset-Request outstanding, then the
output of the compression operation is placed in the information
field of the datagram, and Bit-A MUST be clear (indicating the
history was not cleared) and Bit-C MUST be set (indicating compressed
data) in the current packet's header. The value of the coherency
counter is placed in the coherency count field and then the coherency
counter is incremented.
Upon reception of a CCP Reset-Request packet, the transmitting
compressor MUST be cleared to an initial state, which includes
clearing the history buffer. In addition to the reset of the
compressor, the PACKET_FLUSHED bit MUST be set in the header of the
next transmitted data packet.
5.3. Extended Mode Receiver Process
When a data compression datagram is received from the peer, Bit-A and
Bit-C MUST be checked. Prior to the decompression operation, if
Bit-A is set, then the coherency count MUST be resynchronized to the
received value in the coherency count field of the received packet,
Friend & Simpson Informational [Page 18]
^L
RFC 1974 Stac LZS August 1996
and the receiving decompressor's corresponding history MAY be reset
to an initial state. (However, due to the characteristics of the
Stac LZS algorithm, a decompressor history reset is not required).
After reset, any compressed or uncompressed data contained in the
packet is processed, depending on the state of Bit-C.
Prior to the decompression operation, if Bit-C is clear (indicating
uncompressed data), then the decompression history buffer must not be
modified and the decompressor is not involved with deencapsulation.
If Bit-C is set (indicating compressed data) then the received packet
is decompressed according to ANSI X3.241-1994.
If the received packet is corrupt, then a Reset-Request is sent and
this packet is discarded. If the received packet contains an
incorrect coherency count, a Reset-Request is sent and this packet is
discarded.
5.4. Extended Mode Synchronization
Packets may be lost during transfer. If the decompressor maintained
coherency count does not match the coherency count received in the
compressed packet or if the decompressor detects that a received
packet is corrupted, the decompressor drops the packet and sends a
CCP Reset-Request packet. The compressor on receiving this packet
resets the history buffer and sets the PACKET_FLUSHED bit in the next
frame it sends. The decompressor on receiving a packet with its
PACKET_FLUSHED bit set, resets its history buffer and sets its
coherency count to the one shipped by the compressor in that packet.
Thus synchronization is achieved without a Reset-Ack packet.
Security Considerations
Security issues are not discussed in this memo.
Friend & Simpson Informational [Page 19]
^L
RFC 1974 Stac LZS August 1996
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, July 1996.
[3] Lempel, A. and Ziv, J., "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.
Chair's Address
The working group can be contacted via the current chair:
Karl F. Fox
Ascend Communications
3518 Riverside Dr., Suite 101
Columbus, Ohio 43221
(614) 451-1883
EMail: karl@ascend.Com
Authors' Addresses
Questions about this memo can also be directed to:
Robert Friend
Stac Technology
12636 High Bluff Drive
San Diego, CA 92130
(619) 794-4542
EMail: rfriend@stac.com
William Allen Simpson
Daydreamer
Computer Systems Consulting Services
1384 Fontaine
Madison Heights, Michigan 48071
Bill.Simpson@um.cc.umich.edu
bsimpson@MorningStar.com (preferred)
Friend & Simpson Informational [Page 20]
^L
|