3.2.1 Overview
Connected: An Internet Encyclopedia
3.2.1 Overview
Up:
Connected: An Internet Encyclopedia
Up:
Requests For Comments
Up:
RFC 1144
Up:
3 The compression algorithm
Up:
3.2 The ugly details
Prev: 3.2 The ugly details
Next: 3.2.2 Compressed packet format
3.2.1 Overview
3.2.1 Overview

Figure 4: Compression/decompression model
Figure 4 shows a block diagram of the compression software. The
networking system calls a SLIP output driver with an IP packet to be
sent over the serial line. The packet goes through a compressor which
checks if the protocol is TCP. Non-TCP packets and `uncompressible' TCP
packets (described below) are just marked as TYPE_IP and passed to a
framer. Compressible TCP packets are looked up in an array of packet
headers. If a matching connection is found, the incoming packet is
compressed, the (uncompressed) packet header is copied into the array,
and a packet of type COMPRESSED_TCP is sent to the framer. If no match
is found, the oldest entry in the array is discarded, the packet header
is copied into that slot, and a packet of type UNCOMPRESSED_TCP is sent
to the framer. (An UNCOMPRESSED_TCP packet is identical to the original
IP packet except the IP protocol field is replaced with a connection
number---an index into the array of saved, per-connection packet
headers. This is how the sender (re-)synchronizes the receiver and
`seeds' it with the first, uncompressed packet of a compressed packet
sequence.)
The framer is responsible for communicating the packet data, type and
boundary (so the decompressor can learn how many bytes came out of the
compressor). Since the compression is a differential coding, the framer
must not re-order packets (this is rarely a concern over a single serial
link). It must also provide good error detection and, if connection
numbers are compressed, must provide an error indication to the
decompressor (see sec. 4)./11/
The decompressor does a `switch' on the type of incoming packets: For
TYPE_IP, the packet is simply passed through. For UNCOMPRESSED_TCP, the
connection number is extracted from the IP protocol field and
IPPROTO_TCP is restored, then the connection number is used as an index
into the receiver's array of saved TCP/IP headers and the header of the
incoming packet is copied into the indexed slot. For COMPRESSED_TCP,
the connection number is used as an array index to get the TCP/IP header
of the last packet from that connection, the info in the compressed
packet is used to update that header, then a new packet is constructed
containing the now-current header from the array concatenated with the
data from the compressed packet.
Note that the communication is simplex---no information flows in the
decompressor-to-compressor direction. In particular, this implies that
the decompressor is relying on TCP retransmissions to correct the saved
state in the event of line errors (see sec. 4).
Next: 3.2.2 Compressed packet format
Connected: An Internet Encyclopedia
3.2.1 Overview
|