NACK(ナック)とは | 意味や読み方など丁寧でわかりやすい用語解説
NACK(ナック)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
ネガティブ肯定応答 (ネガティブコウテイオウトウ)
英語表記
NACK (ナック)
用語解説
NACKは「Negative Acknowledgment」の略で、データ通信において受信側が送信側に対して、データの受信に失敗したこと、またはデータに問題があったことを通知するために送る信号である。これは「ACK(Acknowledgment)」がデータが正常に受信されたことを伝える肯定的な応答であるのに対し、NACKは否定的な応答であり、通常はデータの再送を要求する意味合いを持つ。信頼性の高いデータ通信を実現するための重要なメカニズムの一つとして機能する。
データ通信では、電波の干渉、ケーブルのノイズ、ネットワーク機器の一時的な不具合など、さまざまな要因によってデータが破損したり、途中で失われたりすることがある。このような状況下でも、送信側が送ったデータが確実に受信側に届き、正確に処理されることを保証するために、NACKは不可欠な役割を果たす。
具体的にNACKが送信されるのは、以下のような状況が考えられる。まず、受信したデータの整合性チェックに失敗した場合である。多くの通信プロトコルでは、データにエラー検出コード(例えば、CRC: Cyclic Redundancy Checkやチェックサム)を付加して送信する。受信側はこのコードを検証し、計算結果が一致しない場合、データが転送中に破損したと判断し、その破損したデータに対するNACKを送信する。
次に、データの順序が誤っている、またはデータが欠落していることを検出した場合である。信頼性のあるプロトコルでは、各データパケットにシーケンス番号(連番)を付与して送信する。受信側はこれらのシーケンス番号を監視し、期待する番号のパケットが届かなかったり、順序が入れ替わって届いたりした場合に、欠落や順序の異常を検知し、NACKを返して再送を要求することがある。例えば、パケット1、2、4の順で受信したが、パケット3が届いていないと判明した場合、パケット3に対するNACKを送信する。
さらに、受信側のバッファ容量が不足しているなど、一時的にデータを受け入れられない状況になった場合にもNACKが送信されることがある。この場合、NACKは送信側に一時的な停止を促し、受信側の準備が整うまでデータの送信を控えるように指示する役割も担う。
データ通信におけるNACKの基本的な流れは次のようになる。まず、送信側はデータを分割してパケットとして送信する。受信側はこれらのパケットを受信し、データの整合性や順序をチェックする。もしデータに問題がなく、正常に受信できたと判断すれば、そのデータに対するACKを送信側に送る。これにより、送信側はそのデータが正常に到達したことを確認し、次のデータの送信へと移る。一方、もし受信したデータに破損や欠落などの問題が検出された場合、受信側はその問題のあるデータに対するNACKを送信側に送る。NACKを受け取った送信側は、どのデータに問題があったかを認識し、そのデータパケットを再送する。この一連のやり取りが繰り返されることで、ネットワーク上で発生する可能性のあるエラーを克服し、データの信頼性を保つ。
多くの通信プロトコルでNACKの概念が利用されているが、その実装方法はプロトコルによって異なる。例えば、代表的なトランスポート層プロトコルであるTCP(Transmission Control Protocol)は、主にACKを用いた肯定応答ベースの再送制御を行っている。これは、ACKを送ることで受信できたデータを通知し、ACKが一定時間来ない場合はタイムアウトとして再送を行う方式である。しかし、TCPには「選択的ACK(SACK: Selective Acknowledgment)」という拡張機能があり、これは受信側が連続していない複数の欠落パケットについて、具体的にどのパケットが欠落しているか、またはどの範囲のデータが受信済みかを送信側に通知する仕組みである。これは実質的にNACKのような役割を果たし、より効率的な再送を可能にする。
また、HDLC(High-level Data Link Control)などのデータリンク層プロトコルや、特定の無線通信プロトコル、あるいはアプリケーション層で独自に実装されるプロトコルでは、NACKが明示的な制御メッセージとして定義され、利用されることが多い。エラーが発生しやすい無線環境では、NACKによる迅速なエラー通知と再送要求が、通信の効率性と安定性を高める上で特に重要となる。
NACKを使用することの主なメリットは、通信効率の向上にある。送信側がタイムアウトを待つことなく、受信側からのNACKによって直ちにエラーを検知し、問題のあるデータのみを再送できるため、無駄な再送を減らし、全体の通信時間を短縮できる。ACKのみを用いるシステムでは、ACKが来ない場合、送信側はどのデータが失われたかを特定できず、タイムアウト後に複数のデータを再送しなければならない場合があるが、NACKは具体的なエラー情報を伝えることで、よりピンポイントな再送を可能にする。これにより、ネットワーク帯域の利用効率も向上する。
しかし、NACKにもいくつかの考慮すべき点がある。NACK自体もネットワーク上を流れるメッセージであるため、NACK信号自体が失われる可能性も存在する。もしNACKが失われた場合、送信側はエラーが発生したことを知ることができず、最終的にはタイムアウトが発生するまで待つことになり、NACKによる効率向上のメリットが失われる。また、非常に頻繁にエラーが発生するネットワーク環境では、NACKメッセージの送受信が過剰になり、かえってネットワークの負荷を増やしてしまう可能性もある。そのため、プロトコル設計においては、NACKをいつ、どのように送るか、またNACKが失われた場合の挙動など、慎重な検討が必要となる。
システムエンジニアを目指す上で、データが完璧に転送されることは決して当たり前ではないという認識を持つことは非常に重要である。NACKのようなエラー制御メカニズムを理解することは、信頼性の高いシステムやネットワークを設計・構築・運用する上での基礎知識となる。データ通信の品質を保証するための工夫の一つとして、NACKの役割は非常に大きい。