The process of controlling the rate of data transfer in order to prevent data loss due to congestion, flow control is an element of many data communications protocols. Between a PC and a local printer, for example, there is a simple flow control mechanism that throttles back the data transfer rate from the PC to ensure that the printer is not overwhelmed and that the printer buffer memory is not exceeded. ATM, frame relay IPv6, and TCP include more complex flow control mechanisms to ensure that switches and routers are not overwhelmed. A rate-based mechanism is an end-to-end flow-control scheme that considers resources edge to edge, communicating the level of available resources through a feedback loop. This approach requires that the transmitting end-user device adjust its rate of transmission downward in consideration of congestion. A credit-based approach either allows or disallows the end-user device to transmit data, based on end-to-end consideration of whether sufficient buffer space is available on each link of the network. See also ATM, buffer, frame relay, IPv6, and TCP.