# Approximate Networking for Universal Internet Access
## 2 Approximate Networking Technologies
### Approximate Networking Protocol Stack  
Various approximations have already been adopted by transport-layer protocols to handle multimedia traffic over the best-effort Internet. Datagram Congestion Control Protocol (DCCP) can provide congestion control services without the reliability overhead of TCP. UDP is approximate in the sense that it trades off reliability for efficiency and rapidness. UDP-Lite [40] is a connectionless protocol that approximates the performance of UDP but it uses _partial checksums_, thus, while UDP always discards packets that fail checksums, UDP-Lite relaxes the integrity checks to deliver timely but potentially partially erroneous packets to multimedia applications. UDP-Lite is designed for accelerating error-tolerant, real-time multimedia streaming applications that can tolerate slight errors. While UDP-Lite can provide a significant throughput improvement by relaying partially corrupted packets to the application layer [18], care must be adopted to ensure that (1) there does not exist a conflict between the link-layer checksum (e.g., 802.11 FCS) and the UDP-Lite checksum, which can result in the link layer refusing to carry damaged data, and (2) the additional throughput is not in carrying \"useless data\" for the application--this may require the use of erasure-error protection at the application layer. Approximate packet processing circuits that return imprecise answers will have the benefit that they will be much smaller than those today. They would consume less power, and many more of them could fit on a single chip, greatly increasing the number of packets it could process at once. However, a critical question is how these imprecise packet processing affect the performance of higher-layer networking stack. Since the approximate networking technology is inchoate, we cannot answer with certainty how the low-level hardware-based approximate computing developments will affect the performance of the network upper-layer stack. However, we can definitely foresee the need to approximation semantics at the upper layers of the networking stack so that hardware-level approximate computing features can be efficiently utilized. Otherwise, the potential benefits of approximation will be frittered away (as the network may attempt a reliable and precise transfer of approximate data). Some approximate networking semantics naturally exists as part of the TCP/IP stack (e.g., through the best effort service provided by the UDP and IP protocols). There have been many disparate efforts at the transport layer which can be categorized as \"approximate networking\" efforts. Standard reliable transport protocols like TCP work well for file transfer applications but are too unwieldy for multimedia applications that prioritize speed of transfer and have some error tolerance. To ensure that we have appropriate communication support for approximate data, some essential mechanisms that should be supported include [19]:  
1. _Optional multi-layer integrity check support:_ currently, the different network layers perform redundant checksums (e.g., TCP over Wi-Fi uses three separate checksums, namely, the TCP layer, the IP layer, and the link layer). In an approximate networking context, it is useful to permit some errors in approximate payloads. 2. _Partial integrity checking for critical data_ (e.g., addresses and ports must be precise): it is typical in networking to discard erroneous packets that have been received with checksum errors. Both TCP and UDP discard erroneous packets (TCP also asks for a retransmission to ensure reliability). However, in the spirit of approximation, partial errors in non-critical data can be tolerated. UDP-Lite [40] is an example transport protocol that performs partial integrity checking through the use of a configurable checksum (which specifies how many bits are protected by checksum). 3. _Application-provided approximation specification_, and switching between these specifications, for a given socket at the level of different layers.