否定応答(NAK)とは
否定応答(Negative Acknowledgment、NAKまたはNACK)は、通信プロトコルで使用される
制御文字の一つです。主に、データ伝送中に問題が発生した際に、受信側から送信側へその旨を通知するために用いられます。これにより、送信側はデータの再送などの適切な処置を講じることができます。
BSC手順におけるNAK
Binary Synchronous Communication(BSC)手順において、NAKは以下の二つの状況で使用されます。
1.
受信不能の通知: 受信側が、送信側からの問い合わせに応答する際、データを受信できる状態にないことを送信側に伝えます。これは、受信側のバッファが一杯である場合や、他の処理に専念している場合などが考えられます。
2.
エラー検出時の再送要求: 受信側が
データリンク層において、直前に受信したデータブロックに伝送エラーを検出した場合、送信側に対してそのブロックの再送を要求します。これは、データが破損してしまった場合に、正確なデータを再取得するための重要なメカニズムです。
NAKの文字コード
否定応答文字は、様々な文字コード体系で定義されています。
ASCIIとUnicode: 十進数で21、十六進数で0x15に割り当てられています。
EBCDIC: 0x3Dに割り当てられています。
また、キャレット記法では`^U`と表記され、
Unicodeでは
制御文字の図形表現として`␕`(U+2415)が定義されています。
その他の通信プロトコルにおけるNAK
多くの通信プロトコルは肯定応答(ACK)ベースで動作します。ACKベースでは、受信側がデータを受信するたびに、正しく受信できたことを送信側に明確に伝えます。例えば、
Transmission Control Protocol(TCP)はACKベースのプロトコルの一例です。
これに対して、NAKベースのプロトコルでは、受信側で問題が発生した場合にのみ、送信側にメッセージを送信します。例えば、高信頼マルチキャストプロトコルはNAKベースであり、受信側がパケットの欠損を検出した際に、送信側へNAKを送信します。
ACKベースとNAKベースの比較
ACKベースのプロトコルは、すべてのデータ受信に対して肯定応答を返すため、信頼性が高いとされます。しかし、通信量が増加するにつれて、肯定応答のオーバーヘッドが大きくなるという欠点があります。
一方、NAKベースのプロトコルは、エラーが発生した場合にのみ応答を行うため、効率的です。しかし、エラーが発生しなかった場合は、応答がないため、信頼性がやや劣るとも言えます。どちらの方式が適しているかは、通信の状況や要件によって異なります。
まとめ
否定応答(NAK)は、データ通信において重要な役割を果たす
制御文字です。特に、エラーが発生した場合の通知や再送要求に用いられることで、データの信頼性を高めることに貢献します。ACKベースのプロトコルと比較すると、NAKベースのプロトコルは、エラー発生時のみ応答するため、通信効率が高いという特徴があります。
関連項目
肯定応答(ACK)
出典
この記事にはパブリックドメインである、アメリカ合衆国連邦政府が作成した次の文書本文を含みます。
Federal Standard 1037C.
アメリカ合衆国連邦政府一般調達局.(MIL-STD-188内)