否定應答

否定應答

否定應答(稱為NAK;或稱為NACK;或稱為Negative-Acknowledgment)翻譯為否定應答或者非應答。這種協議消息在數字通信中被使用。其作用是作為一種確認數據收到的應答,但表明有小錯誤存在的一種消息信號。

基本概念


否定應答信號t(NAK)數據機接收到一個數據包後向發送方返回的一種信號,表示此次接收不正確,請求對方重新發送。當正確接收后,返回的信號應該是ACK。
有時候NAK信號也叫REJ(拒絕)。相似的另一個信號是ARQ(自動請求重發)。
NAK、REJ或者ARQ信號通常是接收端在收到不能確認的數據塊后反饋給發送端的。當資源接收到了NAK或者REJ信號,資源就會重發數據直到目標站確認且用ACK信號回應,或者停止整個傳輸任務。當資源收到ARQ信號,資源就會重新傳輸數據塊。
NAK、REJ或者ARQ都是ASCII預留的特殊字元,這樣他們就不會與數據字元弄錯了。

自動重複請求


在幾種常見的連續傳輸錯誤控制機制中,有兩種協議是最常見的:回退n自動重複請求和選擇拒絕自動重複請求,兩者都是基於滑動窗口流量控制協議的。為擴展滑動窗口協議來解決丟失和損壞幀的重發問題,需要在基本的滑動窗口流量控制上增加以下3種特性。
1.在發送出去的幀被應答消息確認前保持它們所有的備份。如果0號幀到6號幀已經被傳輸出去,並且最近一次應答是針對2號幀的(期待3號幀),發送方在沒有知道3號到6號幀正確抵達接收端之前保留這些幀的備份。
2.除應答幀(ACK)外,如果數據幀被破壞,接收方還可以選擇發送否定應答幀(NAK)。NAK幀告訴發送方重新發送一個損壞的幀。因為滑動窗口協議是一個連續傳輸機制(與停等協議相反),應答幀(ACK)和否定應答頓(NAK)都必須編號以便於識別。回憶一下,ACK幀帶有期待的幀的編號。而另一方面,NAK幀則帶有損壞幀的編號。在兩種情況下,到達發送方的消息中攜帶的都是接收方期待接收的幀的編號。如果最後一次應答幀(ACK)有編號3,一個帶有編號6的應答幀(ACK6)同時確認了3、4、5號幀的接收。但是,每一個被破壞的數據幀必須進行應答。如果4號和5號數據幀接收時已經被破壞,必須同時發送對4號幀的否定應答NAK4)和對5號頓的否定應答(NAK5)。但是,一個NAK4告訴發送方在4號數據幀之前的所有數據幀都正確到達了。
3.和停等ARQ類似,在滑動窗口自動重複請求(滑動窗口ARQ協議中的發送設備具有個定時器來使發送方能夠處理應答消息丟失的情況。在滑動窗口ARQ中,在必須接收一個應答幀之前可以發送n-1幀(窗口大小)。如果n-1幀都在等待應答,發送方啟動定時器並且在發送任何數據前先進行等待。如果設定的時間過了而沒有應答消息到來,發送方就假定幀沒有被接收,因而根據採用的協議不同而重發一幀或所有幀。注意這裡和停等ARQ樣,發送方無法知道是數據幀丟失了,還是應答頓(ACK)或否定應答幀(NAK)丟失了。如果丟失的幀是一個ACK幀,接收方就能夠通過幀的編號辨別出重複情況並將重複數據丟棄。