Lynx (protocol)
# Lynx (protocol)

Lynx is a file transfer protocol for use with modems, and the name of the program that implements the protocol. Lynx is based on a sliding window protocol with two to sixteen packets per window (or "block"), and 64 bytes of data per packet. It also applies run length encoding (RLE) to the data on a per-block basis to compress suitable data.

Lynx was developed by Matthew Thomas, who released it as shareware in 1989. The protocol was supported primarily by the Lynx program, and appears to have seen little or no support in bulletin board systems (BBSs) or online services.

## Techniques

The Lynx program was run from the command line to start transfers, there is no documented example of a 3rd party terminal emulator supporting the system.

The protocol was relatively simple, largely identical to WXMODEM with the exception that it used fixed-size 64-byte packets in windows of two to sixteen packets, rather than one to four 128-byte packets in WXMODEM. Error recovery was handled by reducing the window size rather than the packet size. CRC-32 was used to detect errors.

Like TeLink, Lynx also included a separate header packet that contained file information:

* File name (8 character body, 3 character extension)
* Original time/date stamp (optional)
* File length (exact length of files is preserved by Lynx)
* Lynx version number (practically useless)

This allowed file transfers to be automated, sending multiple files in a single session by having the receiver extract the names of the files as they were received. The Lynx program allowed up to 99 files to be sent in a batch, although there is no limit in the protocol itself.

Lynx tests each block for compressibility before transmitting it. RLE compression is used for this operation. Generally, a block containing text information will be compressed. Archived, ZIPped, or other compressed files will likely not be further condensed by this technique. Note that Lynx will always optimize the transmission of each block, if RLE decreases the block length, it will be used; otherwise, the uncompressed packet will be sent.

Lynx required 8-bit clean links and did not include any sort of escaping. It only supports CTS/RTS hardware handshaking, XON/XOFF is considered valid data.

