Applications that require low latency (such as telephone conversations) cannot use
automatic repeat request (ARQ); they must use
forward error correction (FEC). By the time an ARQ system discovers an error and re-transmits it, the re-sent data will arrive too late to be usable. Applications where the transmitter immediately forgets the information as soon as it is sent (such as most television cameras) cannot use ARQ; they must use FEC because when an error occurs, the original data is no longer available. Applications that use ARQ must have a
return channel; applications having no return channel cannot use ARQ. Applications that require extremely low error rates (such as digital money transfers) must use ARQ due to the possibility of uncorrectable errors with FEC. Reliability and inspection engineering also make use of the theory of error-correcting codes, as well as natural language.
Internet In a typical
TCP/IP stack, error control is performed at multiple levels: • Each
Ethernet frame uses
CRC-32 error detection. Frames with detected errors are discarded by the receiver hardware. • The
IPv4 header contains a
checksum protecting the contents of the header.
Packets with incorrect checksums are dropped within the network or at the receiver. • The checksum was omitted from the
IPv6 header in order to minimize processing costs in
network routing and because current
link layer technology is assumed to provide sufficient error detection (see also RFC 3819). •
UDP has an optional checksum covering the payload and addressing information in the UDP and IP headers. Packets with incorrect checksums are discarded by the
network stack. The checksum is optional under IPv4, and required under IPv6. When omitted, it is assumed the data-link layer provides the desired level of error protection. •
TCP provides a checksum for protecting the payload and addressing information in the TCP and IP headers. Packets with incorrect checksums are discarded by the network stack and eventually get retransmitted using ARQ, either explicitly (such as through
three-way handshake) or implicitly due to a
timeout.
Deep-space telecommunications The development of error-correction codes was tightly coupled with the history of deep-space missions due to the extreme dilution of signal power over interplanetary distances and the limited power availability aboard space probes. Whereas early missions sent their data uncoded, starting in 1968, digital error correction was implemented in the form of (sub-optimally decoded)
convolutional codes and
Reed–Muller codes. The Reed–Muller code was well suited to the noise the spacecraft was subject to (approximately matching a
bell curve), and was implemented for the Mariner spacecraft and used on missions between 1969 and 1977. The
Voyager 1 and
Voyager 2 missions, which started in 1977, were designed to deliver color imaging and scientific information from
Jupiter and
Saturn. This resulted in increased coding requirements, and thus, the spacecraft were supported by (optimally
Viterbi-decoded) convolutional codes that could be
concatenated with an outer
Golay (24,12,8) code. The Voyager 2 craft additionally supported an implementation of a
Reed–Solomon code. The concatenated Reed–Solomon–Viterbi (RSV) code allowed for very powerful error correction, and enabled the spacecraft's extended journey to
Uranus and
Neptune. After ECC system upgrades in 1989, both crafts used V2 RSV coding. The
Consultative Committee for Space Data Systems currently recommends usage of error correction codes with performance similar to the Voyager 2 RSV code as a minimum. Concatenated codes are increasingly falling out of favor with space missions, and are replaced by more powerful codes such as
Turbo codes or
LDPC codes. The different kinds of deep space and orbital missions that are conducted suggest that trying to find a one-size-fits-all error correction system will be an ongoing problem. For missions close to Earth, the nature of the
noise in the
communication channel is different from that which a spacecraft on an interplanetary mission experiences. Additionally, as a spacecraft increases its distance from Earth, the problem of correcting for noise becomes more difficult.
Satellite broadcasting The demand for satellite
transponder bandwidth continues to grow, fueled by the desire to deliver television (including new channels and
high-definition television) and IP data. Transponder availability and bandwidth constraints have limited this growth. Transponder capacity is determined by the selected
modulation scheme and the proportion of capacity consumed by FEC.
Data storage Error detection and correction codes are often used to improve the reliability of data storage media. A parity track capable of detecting single-bit errors was present on the first
magnetic tape data storage in 1951. The
optimal rectangular code used in
group coded recording tapes not only detects but also corrects single-bit errors. Some
file formats, particularly
archive formats, include a checksum (most often CRC-32]) to detect corruption and truncation and can employ redundancy or
parity files to recover portions of corrupted data.
Reed-Solomon codes are used in
compact discs to correct errors caused by scratches. Modern hard drives use Reed–Solomon codes to detect and correct minor errors in sector reads, and to recover corrupted data from failing sectors and store that data in the spare sectors.
RAID systems use a variety of error correction techniques to recover data when a hard drive completely fails. Filesystems such as
ZFS or
Btrfs, as well as some
RAID implementations, support
data scrubbing and resilvering, which allows bad blocks to be detected and (hopefully) recovered before they are used. The recovered data may be re-written to exactly the same physical location, to spare blocks elsewhere on the same piece of hardware, or the data may be rewritten onto replacement hardware.
Error-correcting memory Dynamic random-access memory (DRAM) may provide stronger protection against
soft errors by relying on error-correcting codes. Such error-correcting memory, known as
ECC or
EDAC-protected memory, is particularly desirable for mission-critical applications, such as scientific computing, financial, medical, etc. as well as extraterrestrial applications due to the increased
radiation in space. Error-correcting memory controllers traditionally use
Hamming codes, although some use
triple modular redundancy.
Interleaving allows distributing the effect of a single cosmic ray potentially upsetting multiple physically neighboring bits across multiple words by associating neighboring bits to different words. As long as a
single-event upset (SEU) does not exceed the error threshold (e.g., a single error) in any particular word between accesses, it can be corrected (e.g., by a single-bit error-correcting code), and the illusion of an error-free memory system may be maintained. In addition to hardware providing features required for ECC memory to operate,
operating systems usually contain related reporting facilities that are used to provide notifications when soft errors are transparently recovered. One example is the
Linux kernel's
EDAC subsystem (previously known as
Bluesmoke), which collects the data from error-checking-enabled components inside a computer system; besides collecting and reporting back the events related to ECC memory, it also supports other checksumming errors, including those detected on the
PCI bus. A few systems also support
memory scrubbing to catch and correct errors early before they become unrecoverable. == See also ==