ACK   Acknowledgement   확인 응답

(2020-02-19)

Positive Acknowledgement, 긍정 확인응답, NACK, NAK, Negative Acknowledgement, 부정 확인응답, SACK, Selective Acknowledgement, 선택 확인응답


1. 확인응답 (Acknowledgement) 이란?

  ㅇ 송신된 메세지가 수신측에서 정상적으로 수신되었음을 송신측으로 확인응답하는 것
     - 오류제어흐름제어를 위해 사용
        . 보통은 데이터 프레임 안에 포함시켜 응답함 ☞ 피기백 방식 참조


2. 확인응답 종류

  ㅇ ACK 신호 (긍정 확인응답)
     - 수신측에서 메세지에러없이 정상적으로 수신했거나, 송신해도 된다는 것을
       송신측에 알리기 위한 제어신호

     - ACK 특징
        . ACK 신호 사용은 패킷교환망에서 서비스의 신뢰성에 도움을 주나, 
        . 과도한 부하를 주게되어 망의 신뢰성이 높아질수록 사용하지 않는 경향이 있으며, 
        . 이 경우 종단측은 에러검사 등에 있어 더 많은 책임을 부여 받게됨
  
     - ACK 신호 형식
        . 통상적으로 별도의 패킷 또는 다음 패킷에 속하는 1비트짜리 플래그일 수도 있음 

  ㅇ NACK 또는 NAK 신호 (부정 확인응답)
     - 부정 확인응답은 정상적으로 수신되지 않았음을 송신측에 알리는 메세지이나, 
       실제적으로는 잘 쓰이지 않고 있음

     * 보통은, 송신측이 순서번호타이머를 갖추고 있기 때문에,
        . 일정 시간이 지나도 ACK가 오지 않으면, 오류로 간주하여 해당 메세지를 재전송하게 됨


3. TCP 확인응답TCP 확인응답 주요 특징
     - 확인응답 번호를 다음에 기대되는 순서번호로 함
     - 신뢰적 전송 및 효율성 등을 위해 슬라이딩 윈도우 방식에 의한 확인응답을 함
     - 송신측은 매 세그먼트 전송때 마다, 부정 확인응답(NACK)의 일종(시간 버젼)인,
       재전송 타이머를 가동

  ※ TCP에서 과다한 확인응답 방지 
     - 누적 확인응답, 선택적 확인응답 실시

  ㅇ 누적 확인응답 (CACK, Cumulative Acknowledgement)
     - 현재까지 수신된 바이트들을 단 하나의 ACK로 일괄 확인응답 하는 것
        . TCP에서는, TCP 헤더의 32 비트 ACK 필드에서 이를 구현 
     - 중간 세그먼트손실이면, 수신측은 그 뒤 세그먼트는 보관하고,
        . 현재까지 수신된 세그먼트 중 연속된 세그먼트로써 마지막 만 누적 확인응답 함
     - 만일, 비 연속적으로 수신된 세그먼트(여러 중간 손실)이면,
        . 처음 중간 손실부터 다시 재전송 시작되는 등 심각한 성능 저하 발생

  ㅇ 선택적 확인응답 (SACK, Selective Acknowledgement)
     - 여러 세그먼트손실세그먼트 만 선택적으로 확인응답하는 방식
        . TCP에서는, TCP 옵션으로 구현됨
           .. TCP 연결설정 과정에서 송수신간에 SACK 사용 합의하고, 
           .. TCP 세그먼트에 SACK 범위 목록을 포함시킴
     - (표준) RFC 2018 `TCP selective acknowledgment options` (1996)



Copyrightⓒ   차재복 (Cha Jae Bok)