In data networking, telecommunications, and computer buses, an acknowledgement ( ACK) is a signal passed between communicating processes, , or devices to signify acknowledgement, or receipt of message, as part of a communications protocol. The negative-acknowledgement ( NAK or NACK) signal is sent to reject a previously received message, or to indicate some kind of error. Acknowledgements and negative acknowledgements inform a sender of the receiver's state so that it can adjust its own state accordingly.
Some protocols send a single acknowledgement per packet of information. Other protocols such as TCP and ZMODEM allow many packets to be transmitted before receiving acknowledgement for any of them a procedure necessary to fill high bandwidth-delay product links with a large number of bytes in flight.
Other protocols are NAK-based, meaning that they only respond to messages if there is a problem. Examples include most reliable multicast protocols which send a NAK when the receiver detects missing packets. Still other protocols make use of both NAKs and ACKs. Binary Synchronous Communications (Bisync) and Adaptive Link Rate (for Energy-Efficient Ethernet) are examples.
Still other protocols such as the RC-5, User Datagram Protocol (UDP), and X10 protocols perform blind transmission with no acknowledgement, often transmitting the same message multiple times in hopes that at least one copy of the message gets through.
The acknowledgement function is used in the automatic repeat request (ARQ) function. Acknowledgement frames are numbered in coordination with the frames that have been received, and then sent to the transmitter. This allows the transmitter to avoid Buffer overflow or Buffer underrun at the receiver, and to become aware of any missed frames.
In Binary Synchronous Communications, the NAK is used to indicate that a transmission error was detected in the previously received block and that the receiver is ready to accept retransmission of that block. Bisync does not use a single ACK character, but has two control sequences for alternate even/odd block acknowledgement.
Some computer buses do not always acknowledge every write -- some or all of the writes use a posted write.