Selective Repeat (SR) 시나리오: A2 응답 유실
1단계: 초기 전송 및 정상 수신 [SB=0]
- 센더의 행동: 윈도우 크기 4에 따라 P0, P1, P2, P3을 연속 전송 한다
- 리시버의 행동: 모든 패킷을 정상 수신 한다 P0, P1에 대한 응답 A0, A1을 우선 보낸다
- 결과: 센더는 A0, A1을 수신하고 SB=2로 업데이트 한다
- 슬라이딩: 윈도우가 밀리며 센더는 새 패킷 P4, P5를 즉시 전송 한다
2단계: 리시버의 응답 발송 및 유실 [SB=2]
- 리시버의 행동: P2를 이미 잘 받았으므로, 확인 응답 A2를 생성하여 센더에게 보낸다
- 사고 발생: 네트워크 문제로 A2가 유실되어 센더에게 도착하지 않는다
- 센더의 상태: A2를 받지 못했으므로 윈도우의 기준점인 SB는 여전히 2에 머물러 있다
3단계: 후속 패킷 처리 (리시버와 센더의 상태 차이)
- 리시버의 행동: 뒤이어 오는 P3, P4, P5를 정상 수신 한다. 리시버 입장에서는 순서대로 잘 오고 있으므로, 각각에 대해 **개별 확인 응답 A3, A4, A5를 보낸다
- 센더의 행동: $A_3, A_4, A_5$를 수신합니다.
- 체크(Mark): 센더는 자신의 송신 윈도우(관리 대장)에서 3, 4, 5번 패킷을 'ACK 수신 완료' 상태로 표시 한다
- 정체: 하지만 가장 앞선 A2가 오지 않았으므로, 윈도우는 2, 3, 4, 5에서 더 이상 전진하지 못한다. 범위 밖에 있는 P6 전송은 불가능한 정체 상태 이다
4단계: 타임아웃 발생 (센더의 오해)
- 이벤트: 센더가 P2를 처음 보낼 때 작동시켰던 타임아웃 타이머가 만료 된다
- 센더의 판단: "3, 4, 5번은 응답이 왔는데 2번만 끝까지 안 오네. 리시버가 P2 자체를 못 받았나 보다!"라고 판단 한다
- 행동: SR의 원칙에 따라 이미 확인된 패킷은 건너뛰고, 문제가 된 P2 패킷만 골라서 다시 전송 한다
5단계: 리시버의 중복 패킷 처리 및 재응답
- 이벤트: 리시버에게 재전송된 P2가 도착 한다
- 리시버의 판단: "난 P2를 이미 예전에 받아서 처리했는데 또 왔네? 센더가 내 응답(A2)을 못 받았구나"라고 생각 한다
- 리시버의 행동: 중복된 P2 데이터는 폐기하지만, 센더의 윈도우를 밀어주기 위해 A2를 다시 생성하여 보낸다
6단계: 윈도우 복구 및 점프 [SB=6]
- 이벤트: 센더에게 드디어 재전송에 대한 응답 A2가 도착 한다
- 센더의 행동: "드디어 2번 응답이 왔구나!" 하며 SB를 옮기려 한다. 이때 센더는 윈도우를 확인하여 이미 3, 4, 5번이 'ACK 수신 완료' 상태임을 파악 한다
- 결과: 막혀있던 문이 열리듯 SB가 2에서 6으로 한꺼번에 점프(Jump) 한다
- 최종 행동: 윈도우가 $[6, 7, 8, 9]$로 크게 이동하며, 그동안 대기 중이던 새 패킷 $P_6, P_7, P_8, P_9$를 연속 전송하며 흐름을 재개 한다
|