ACK (Acknowledge) is ASCII code point 6 (0x06), Unicode U+0006. It is a C0 control character — the affirmative reply in serial handshaking. Originally, a teleprinter sent ACK after receiving a valid data block in response to an ENQ (0x05) poll, confirming the transfer could continue. In IBM BSC framing, alternating ACK0/ACK1 responses provide sequence-level confirmation alongside CRC-16 or LRC checks. UTF-8 encodes this code point as the single byte 0x06, identical to ASCII; Unicode assigns it General Category Cc (Control) with the alias ACKNOWLEDGE.
unsigned char ack = 0x06; // ACK control byteunsigned char frame[3] = {0x02, 'A', 0x03}; // STX ... ETXif (frame[0] == 0x02 && frame[2] == 0x03) out[i++] = ack; // acknowledge valid frame
ACK (ASCII 6) is a handshake signal meaning 'message received successfully.' In serial protocols like XMODEM, the receiver sends ACK after each valid data block so the sender knows it's safe to transmit the next one.
The byte itself isn't, but the concept is everywhere. TCP's three-way handshake uses ACK flags, HTTP/2 has SETTINGS acknowledgments, and WebSocket pings expect pongs — all descendants of the same idea.
The sender typically retries a set number of times, then gives up and reports a timeout error. Without ACK, there's no way to confirm delivery, so protocols fall back to resending or dropping the connection.
ACK (ASCII 6) means 'got it, all good.' NAK (ASCII 21) means 'got it, but something's wrong — send it again.' Together they form the simplest error-recovery loop in serial communications.