データネットワーク、電気通信、およびコンピュータバスにおいて、確認応答[ 1 ] [ 2 ](ACK)または確認応答[ 3 ] [ 4 ]は、通信プロトコルの一部として、メッセージの受信確認または受信を示すために、通信プロセス、コンピュータ、またはデバイス間で渡される信号です。同様に、否定確認応答(NAKまたはNACK [ 5 ])は、以前に受信したメッセージを拒否するか、何らかのエラーを示すために送信される信号です。確認応答と否定確認応答は、送信者に受信側の状態を知らせ、それに応じて送信者が自身の状態を調整できるようにします。
ACK のASCIIコードポイントは 0x06 (バイナリ 0000 0110) です。慣例として、受信デバイスはメッセージを正常に受信したことを示すために ACK を送信します。ASCII には、受信デバイスがメッセージに従えない、または従わないことを示すために使用できるNAK コード ポイント (0x15、バイナリ 0001 0101) もあります。 [ 6 ] Unicode では、これらの ASCII 文字の可視シンボルとして U+2406 (␆) と U+2415 (␕) が提供されています。
ACKおよびNAKシンボルは、プロトコルのデータリンク層の定義に応じて、単一ビットまたはビットフィールドの形式をとる場合もあれば、物理層で専用のワイヤとして表される場合もあります。
多くのプロトコルは確認応答ベースであり、メッセージの受信を肯定的に確認します。インターネットの伝送制御プロトコル(TCP)は、確認応答ベースのプロトコルの例です。コンピュータがTCPを介して通信する場合、受信したパケットはACKビットが設定された返信パケットを送信することによって確認されます。[ 7 ]
一部のプロトコルは受信したパケットごとに確認応答を送信するが、TCPやZMODEMなどの他のプロトコルでは、多数のパケットを送信してからそれらのパケットのセットに対する確認応答を送信する。これは、帯域幅遅延積が大きいリンクに大量のバイトデータを転送するために必要な手順である。
一部のプロトコルはNAKベースであり、問題がある場合にのみメッセージに応答します。例としては、受信側がパケットの欠落を検出したときにNAKを送信する多くの信頼性の高いマルチキャストプロトコル[ 8 ]や、チェックサムを使用してペイロードとヘッダーの完全性を検証するプロトコルなどがあります。
さらに、NAKとACKの両方を利用するプロトコルも存在する。バイナリ同期通信(Bisync)や適応型リンクレート(エネルギー効率の高いイーサネット用)などがその例である。
確認応答機能は、自動再送要求(ARQ)機能で使用されます。確認応答フレームは、受信されたフレームと連動して番号が付けられ、送信機に送信されます。これにより、送信機は受信側でのオーバーフローやアンダーランを回避し、受信漏れのフレームを把握することができます。
IBMバイナリ同期通信では、NAKは、以前に受信したブロックで送信エラーが検出され、受信側がそのブロックの再送信を受け入れる準備ができていることを示すために使用されます。Bisyncは単一のACK文字を使用せず、偶数/奇数ブロックの交互の確認応答のための2つの制御シーケンスを備えています。
ACKおよびNAKに基づく方式は、プロトコル設計のパラダイムのすべてではありません。RC -5、ユーザーデータグラムプロトコル(UDP)、X10プロトコルなどの一部のプロトコルは、確認応答なしのブラインド送信を行い、少なくとも1つのメッセージが届くことを期待して、同じメッセージを複数回送信することがよくあります。
一部のコンピュータバスには、バス操作を確認するために使用される制御バス内の専用の確認線があります。ISA DMAで使用されるDACK、 STEbusで使用されるDATACK 、 Motorola 68000のデータ転送確認ピン(DTACK Groundedというタイトルの由来となったもの)などです。一部のコンピュータバスは、すべての送信の確認を待ちません。たとえば、posted writeを参照してください。