1. 확인응답 (Acknowledgement) 이란?
ㅇ 송신 메세지가 정상 수신되었음을, 수신측에서 송신측으로 확인응답하는 것
- 용도 : 오류제어 및 흐름제어를 위해 사용
- 방법 : 통상, 데이터 프레임 안에 포함시켜 응답함 ☞ 피기백 방식 참조
2. 확인응답 종류
ㅇ ACK 신호 (긍정 확인응답)
- 수신측에서 메세지를 에러없이 정상적으로 수신했거나, 송신해도 된다는 것을
송신측에 알리기 위한 제어용 신호
- ACK 특징
. ACK 신호 사용은 패킷교환망에서 서비스의 신뢰성에 도움을 주나,
. 과도한 부하를 주게되어 망의 신뢰성이 높아질수록 사용하지 않는 경향이 있으며,
. 이 경우 종단측은 에러검사 등에 있어 더 많은 책임을 부여 받게됨
- ACK 신호 형식
. 통상적으로 별도의 패킷 또는 다음 패킷에 속하는 1비트짜리 플래그일 수도 있음
ㅇ NACK 또는 NAK 신호 (부정 확인응답)
- 부정 확인응답은 정상적으로 수신되지 않았음을 송신측에 알리는 메세지이나,
실제적으로는 잘 쓰이지 않고 있음
* 보통은, 송신측이 순서번호 및 타이머를 갖추고 있기 때문에,
. 일정 시간이 지나도 ACK가 오지 않으면, 오류로 간주하여 해당 메세지를 재전송하게 됨
3. TCP 확인응답
ㅇ TCP 확인응답의 주요 특징
- 명확한 확인응답을 위해, ☞ 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)