카테고리 없음

Selective Repeat 프로토콜 이해: 패킷, 응답 유실 시나리오와 윈도우 점프

엔지니어 E 2026. 2. 14. 16:11
반응형

Selective Repeat (SR) 시나리오: P2 패킷 유실

1단계: 초기 전송 [SB=0]

  • 센더: 윈도우 크기가 4이므로 P0, P1, P2, P3을 연속으로 전송한다
  • 리시버: P0, P1을 정상 수신하고 확인 응답 A0, A1을 각각 보낸다
  • 결과: 센더가 A0, A1을 수신하며 SB가 순차적으로 업데이트되어 SB=2가 된다
  • 슬라이딩: 윈도우가 두 칸 밀리며 센더는 새 패킷 P4, P5를 추가로 전송한다

2단계: 패킷 유실 사고 발생 [SB=2]

  • 이벤트: 센더가 보낸 P2가 네트워크에서 유실되어 리시버에게 도달하지 못한다
  • 센더 상태: P2를 보낼 때 작동시킨 타이머가 돌아가기 시작한다 A2를 받지 못했으므로 SB는 2에 멈춰 있다

3단계: 후속 패킷 도착 및 버퍼링 [SB=2 유지]

  • 이벤트: 리시버에게 P2는 안 왔지만, 뒤따라온 P3, P4, P5가 도착한다
  • 리시버의 판단: "2번이 아직 안 왔네? 하지만 3, 4, 5번은 데이터가 멀쩡하니 일단 버퍼(창고)에 보관하자." (GBN처럼 버리지 않는다)
  • 리시버의 응답: 받은 패킷들에 대해 각각 A3, A4, A5를 센더에게 보낸다

4단계: 센더의 개별 확인 수신 [SB=2 유지]

  • 이벤트: 센더에게 A3, A4, A5가 차례로 도착 한다
  • 센더의 행동: "3, 4, 5번은 잘 갔구나!"라고 체크(Mark)만 해둔다
  • 상태: 하지만 가장 앞선 A2가 아직 오지 않았으므로 SB는 2에서 움직이지 못하다 윈도우가 가득 차서 신규 패킷(P6)도 보낼 수 없는 정체 상태이다

5단계: 타임아웃 및 선택적 재전송

  • 이벤트: 센더가 설정한 P2의 타이머가 만료된다
  • 센더의 판단: "3, 4, 5번은 확인됐으니 패스하고, 응답이 없는 P2만 다시 보내자."
  • 행동: 오직 P2만 리시버에게 재전송 한다 (P3, P4, P5는 이미 확인되었으므로 다시 보내지 않습니다.)

6단계: 데이터 합치기 및 윈도우 점프 [SB=6]

  • 이벤트: 재전송된 P2가 리시버에게 정상 도착 한다
  • 리시버의 행동: 기다리던 P2가 왔으므로, 버퍼에 보관 중이던 P3, P4, P5와 합쳐서 상위 계층으로 올립니다. 그리고 A2를 센더에게 보낸다
  • 센더의 판단: A2를 수신하는 순간, 이미 체크해둔 A3, A4, A5까지 모두 해결된 것을 확인한다
  • 결과: SB가 2에서 6으로 한꺼번에 점프(Jump) 한다

7단계: 전송 재개

  • 슬라이딩: 윈도우가 P6, P7, P8, P9로 이동하며 센더는 기다리고 있던 새 패킷들을 전송하기 시작 한다

 

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$를 연속 전송하며 흐름을 재개 한다