본문 바로가기
Infra & Security Eng/Network & Security

Go-Back-N의 신뢰성 보장: ACK 유실과 패킷 유실 시나리오 분석

by 엔지니어 E 2026. 2. 12.
반응형

 

윈도우 크기(n) = 4 시나리오: a2 응답 유실 

초기 전송 [SB=P0]
상태: 데이터 전송 시작 직전. 확인 대기 중인 첫 번째 패킷은 0번이다 
센더의 행동: P0,P1,P2,P3를 연속으로 보낸다 
* 정확히 말하면 빠르게 차례대로 보낸다
* 윈도우 크기가 4이므로 4개의 패킷 동시에 발송 가능, 1개를 보내든 여러개를 보내든 그건 자유
* 보낼 때는 한꺼번에(연속으로) 쏘지만, '윈도우가 밀리는 것(슬라이딩)'은 원칙적으로 ACK를 하나씩 확인할 때마다 한 칸씩 일어난다
리시버의 행동: P0을 정상 수신하고, 확인 응답 a0을 센더에게 보낸다
결과: 센더가 a0을 수신 하고, 0번이 해결되었으므로 SB=P1로 업데이트 된다
슬라이딩: 윈도우가 P0,P1, P2, P3 에서 P1,P2,P3,P4으로 한칸 밀리며, 센더는 새 패킷 P4를 전송 한다 

윈도우 슬라이딩 지속 [SB=P1]
상태: 현재 1번 패킷의 응답을 기다리고 있다 (SB=P1)
* SB의 정의: "아직 확인 응답(ACK)을 받지 못한 패킷 중 가장 번호가 빠른 패킷"
리시버의 행동: P1을 정상 수신하고, 확인 응답 A1을 센더에게 보낸다 
결과: 센더가 A1을 수신 하고, 1번이 해결 되었으므로  SB=P2로 업데이트 된다 
슬라이딩: 윈도우가 P1,P2,P3,P4에서 P2,P3,P4,P5로 한 칸 밀리며, 센더는 새 패킷 P5를 전송 한다 
현재 시점 요약: 센더는 P2,P3,P4,P5를 다 보냈고, 윈도우가 가득 차 있다. 이제 응답이 오기 전 까지 P6을 보낼 수 없다 

A2 응답 사고발생 [SB=P2] 유지
리시버의 행동: P2를 정상 수신하고, 확인 응답 A2를 센더에게 보낸다 
[사고 발생]: 네트워크 유실로 인해 A2가 센더에게 도착하지 않는다
결과: 센더는 A2를 받지 못했으므로 SB는 여전히 P2에 멈춰 있다
상태: 센더의 인도우는 P2,P3,P4,P5에서 더 이상 전진하지 못하는 정체 상태가 된다 

후속 패킷 처리 및 누적 확인 (Cumulative ACK) 
리시버의 행동: 센더가 이전에 보냈던 P3를 정상 수신한다 
리시버의 판단: 현재 2번도 잘 받았고, 3번도 잘 왔으니 3번까지 모두 완벽하게 도착했다라고 판단한다 
응답: 리시버는 누적 확인 원칙에 따라 A3를 센더에게 보낸다


윈도우 점프 및 복구 (SB=P4)
이벤트: 센더에게 리시버가 보낸 A3이 도착한다
센더의 판단: 기다리던 A2는 안 왔지만 A3이 왔다는 것은 그 앞의 P2까지 리시버가 완벽히 받았다는 증거라고 확신 한다 
결과: 센더는 유실된 A2를 무시하고, A3 확인 직후 SB를 P4로 즉시 업데이트 한다 (2번, 3번 패킷이 동시 해결)
슬라이딩: 윈도우가 P4,P5,P6,P7로 크게 이동하여 전송 권한이 생긴다 
최종 행동: 센더는 새롭게 윈도우에 들어온 P6,P7을 연속해서 전송하며 흐름을 재개 한다  

하나의 과정을 보면 예시로 P0 <-> A0 이면 보내는거는 한꺼번에 보낼 수 있고(P0,P1,P2,P3), 다음 패킷(P5) 은 윈도우(4) 가 꽉 차서 기다리고 있고, 밀리는것은 원칙적으로 ack를 하나씩 확인할때마다 한칸씩 일어나게 된다 (SB=P1)

 

정리된 전체 구조 

단계상태 (Status)핵심 포인트

💡 핵심 기술 포인트 요약

  1. SB의 역할: 항상 "확인(ACK) 대기 중인 패킷 중 번호가 가장 빠른 패킷"을 가리킨다
  2. SB 업데이트 시점: 반드시 ACK를 수신한 직후에만 다음 번호로 넘어간다
  3. 누적 확인(Cumulative ACK): $A_n$은 $n$번까지의 모든 패킷 수신을 보장한다. 이 메커니즘 덕분에 $A_2$가 소실되어도 $A_3$를 통해 SB가 P2에서 P4로 한 번에 점프할 수 있다

 

윈도우 크기(n) = 4 시나리오: P2 패킷 소실

1단계: 초기 전송[SB=0]
상태: 데이터 전송 시작 직전, 확인 대기 중인 첫 번째 패킷은 0번이다 
센더의 행동: 윈도우 내의 모든 패킷 P0,P1,P2,P3을 연속해서 전송한다 
리시버의 행동: P0을 정상 수신하고, 확인 응답 A0을 센더에게 보낸다 
결과: 센더가 A0을 수신하고, 0번이 해결되었으므로 SB=P1으로 업데이트 된다 
슬라이딩: 윈도우가 P0,P1,P2,P3에서 P1,P2,P3,P4으로 한 칸 밀리며, 센더는 새 패킷 P4를 전송 한다 

2단계: 윈도우 슬라이딩 지속[SB=P1]
상태: 현재 1번 패킷의 응답을 기다리고 있다 -- * 0번은 해결되었고 1번 패킷 기다림 [SB=P1]
리시버의 행동: P1을 정상 수신하고, 확인 응답 A1을 센더에게 보낸다 
결과: 센더가 A1을 수신하고, 1번이 해결되었으므로 SB=P2로 업데이트 된다
슬라이딩: 윈도우가 P1,P2,P3,P4에서 P2,P3,P4,P5로 한 칸 밀리며 새 패킷 P5를 전송 한다 
현재 시점 요약: 센더는 P2,P3,P4,P5를 모두 보냈고, 윈도우 가 가득 차 있다. 이제 응답이 오기 전까지 P6를 보낼 수 없다

3단계: 패킷 유실 사고 발생 [SB=P2] 유지 
이벤트: 센더가 보낸 패킷 P2 자체가 네트워크에서 유실되어 리시버에게 도달하지 못한다 
센더 상태: P2를 보낼 때 작동시킨 타이머가 돌아가기 시작하며 응답을 기다린다
결과: 센더는 A2를 받지 못했으므로 SB는 여전히 P2에 멈춰 있다 
정체: 윈도우는 P2,P3,P4,P5에서 정체 상태가 된다 

4단계: 수신 거부 및 폐기(리시버의 행동)
이벤트: 리시버에게 P2는 오지 않고, 뒤따라오던 P3,P4,P5가 도착한다 
리시버의 판단: 리시버는 현재 P2를 기다리는 중인데 3,4,5번이 오자 순서가 틀렸다고 판단한다 
리시버의 행동: GBN 규칙에 따라 도착한 P3,P4,P5를 모두 폐기하고 저장하지 않는다
응답: 리시버는 패킷이 올 때마다 "난 아직 P1까지만 제대로 받았다라는 의미로 A1을 반복해서 보낸다 
* 이 응답은 센더의 SB를 움직이지 못한다 

5단계: 타임아웃 발생
이벤트: 센더가 설정한 타이머 시간이 만료 된다 
센더의 판단: P2에 문제가 생겨서 응답이 안온다고 생각하고, P2부터 그 뒤에 보냈던 것들을 다 다시 보낸다고 판단한다
결과: 센더는 윈도우 내에 있는 P2,P3,P4,P5를 처음부터 차례대로 전송한다 ---> 이것이 Go-Back-N의 핵심


6단계: 정상화 및 전송 재개 [SB=P3]
이벤트: 다시 보낸 P2가 리시버에게 정상적으로 도착한다 
리시버의 행동: 기다리던 P2가 왔으므로 수신을 완료하고 확인 응답 A2를 센더에게 보낸다 
최종결과: 센더가 A2를 수신하는 순간 SB=P3으로 업데이트 되며, 멈춰있던 윈도우가 P3,P4,P5,P6으로 밀리면서 새 패킷 P6를 전송하기 시작한다