답변:
ACK의 이유는 NACK만으로는 충분하지 않기 때문입니다. X 세그먼트의 데이터 스트림을 전송한다고 가정 해 봅시다 (간단 성을 위해 10이라고합시다).
연결 상태가 좋지 않고 세그먼트 1, 2, 4 및 5 만 수신합니다. 컴퓨터는 세그먼트 3에 대한 NACK을 전송하지만 세그먼트 6-10이 있어야한다는 것을 인식하지 못하고 NACK하지 않습니다.
따라서 세그먼트 3을 다시 보내지 만 컴퓨터는 데이터가 성공적으로 전송되었다고 잘못 판단합니다.
ACK는 세그먼트가 목적지에 도착했음을 보증합니다.
응용 프로그램이 데이터 순서와 재전송을 처리하도록하려면 UDP와 같은 프로토콜을 사용하도록 선택하면됩니다 (예 : TFTP처럼).
그것은 모두 손실 확률 분포와 트래픽 패턴으로 요약됩니다.
10-30 %의 꾸준한 손실률을 보이는 전형적인 무선 링크를 예로 들어 보겠습니다. 수신 된 각 프레임 (802.11abg 등)을 확인하면 프레임이 손실 된 시간을 신속하게 감지하여 시간 초과를 기다리는 시간을 잃지 않습니다.
대신 NAK를 사용하는 경우 트래픽 패턴에 따라 달라집니다.-단일 요청 패킷을 보내고 응답을 기대하고 해당 요청을 잃어버린 경우 시간이 초과되지 않으면 대답. -대부분의 뮤트받는 사람에게 패킷 스트림을 보내는 경우받는 사람이 다음 패킷을받을 때만 NAK를받는 것이 허용됩니다. 그러나 이는 수신자가 패킷을 다시 정렬해야하고 발신자가 전송 한 메시지의 백 로그를 추적해야한다는 것을 의미합니다.
(802.11n에서 어떤 솔루션을 선택했는지 추측하십시오. 수신기는 수신 한 프레임의 가변 길이 비트 맵을 전송합니다)
이제 일반적인 인터넷 네트워크를 사용하십시오. 문제가 발생할 때까지 거의 0 %의 패킷 손실이 발생하며 지수 분포 법에 따라 200ms 중단에서 1 분, 절반.
링크가 끊어졌을 때를 고려할 때까지 각 패킷을 획득하는 것은 손실이없는 네트워크에서 무의미 해 보일 수 있습니다. 아마도 연장 된 시간 동안 ACK 또는 NACK을 수신하지 않으며 수신기는 일반적으로 링크까지 아무것도 보내지 않습니다. 복원됩니다.
ACK를 사용하면 발신자가 전송을 중지하고 링크가 복원 될 때까지 백 로그를 유지합니다. 대신 NACK을 사용하는 경우 수신자는 오랫동안 보낸 사람의 백 로그에서 떨어진 패킷을받지 못했으며 연결을 본질적으로 복구 할 수 없다는 메시지를 표시 할 수 있습니다.
ACK는 슬라이딩 창 프로토콜에 유용하며, 전송기 A는 전송 된 데이터가 원격 B에 의해 수신되었음을 알 수 있습니다. 그런 다음 전송기 A는 전송 창이 가득 찰 때까지 (원격으로 전송되었지만 아직 전송되지 않은 데이터) 다음 데이터 전송을 진행할 수 있습니다. 인정).
ACK는 NAK보다 더 중요한 것으로 간주 될 수 있습니다. AAK가 보낸 패킷 / 블록이 B에 의해 수신되지 않고 B가 패킷 / 블록이 누락 된 것을 감지하는 경우 NAK는 더 빠른 복구 를 허용합니다 .
NAK없이 ACK만으로 안정적인 전송 및 흐름 제어를 지원하는 프로토콜을 완벽하게 구현할 수 있습니다 (트랜스미터가 어떤 경우에도 필요한 ACK, 재전송 메커니즘을 수신하지 않는 경우 송신기에 의한 재전송).
TCP에서 여기에 추가하고 싶은 가장 중요한 것은 모든 수신 패킷에 대한 ACK를 보내지 않습니다.
그러나 ACK는 LAST RECEIVED PACKET에 대해서만 전송됩니다.
내가 틀렸다면 정정 해주세요.