제8장 신뢰성 보장

8.1 재전송 메커니즘

DTP는 시퀀스 번호 기반 재전송 메커니즘을 구현하여, 불안정한 네트워크 환경에서도 데이터의 완전한 전송을 보장한다.

핵심 목표: 연결 중단 후 전송을 복구할 때, 이미 성공적으로 수신된 데이터를 다시 전송할 필요가 없다.

동작 원리

송신측 (Sender)                    수신측 (Receiver)
  │                                   │
  │── Fragment (seq=1) ──────────────▶│ ✓ 수신
  │── Fragment (seq=2) ──────────────▶│ ✓ 수신
  │── Fragment (seq=3) ──────────────▶│ ✓ 수신
  │── Fragment (seq=4) ────── ✗ ──────│ 연결 끊김
  │                                   │
  │        ... 연결 복구 ...            │
  │                                   │
  │◀── 최고 수신 시퀀스 번호 보고 (3) ───│
  │                                   │
  │── Fragment (seq=4) ──────────────▶│ 중단점부터 계속
  │── Fragment (seq=5) ──────────────▶│
  │                                   │

송신측 책임

  1. 각 Fragment에 단조 증가하는 시퀀스 번호를 할당
  2. 수신측이 아직 확인하지 않은 Fragment를 로컬 캐시에 보관
  3. 확인을 수신한 후, 캐시에서 확인된 Fragment를 제거
  4. 연결 복구 후, 수신측이 보고한 최고 시퀀스 번호의 다음 Fragment부터 전송 계속

수신측 책임

  1. 성공적으로 수신한 최고 시퀀스 번호를 추적
  2. 연결 복구 시, 송신측에 성공적으로 수신한 최고 시퀀스 번호를 보고

8.2 캐시 관리

송신측은 미확인 Fragment의 로컬 캐시를 유지한다:

  • 전송되었지만 확인을 받지 못한 각 Fragment는 캐시에 보관
  • 확인을 수신한 후, 확인된 Fragment는 캐시에서 제거
  • 캐시에는 용량 상한이 있음

캐시 포화 처리

송신측의 로컬 캐시가 용량 상한에 도달한 경우:

  1. 새 Fragment 전송을 일시 중지
  2. 상위 애플리케이션에 캐시 포화를 알림
  3. 수신측의 확인으로 캐시 공간이 해제된 후 전송 재개

8.3 세션 관리

세션 수립

CAP이 신원 인증과 키 교환을 완료한 후, DTP_Engine은 DTP 세션을 수립하고 고유한 세션 식별자(Session_ID)를 생성한다.

세션 상태 유지

DTP_Engine은 세션에서 양방향 전송 상태를 유지한다:

상태 항목설명
currentSequenceNumber현재 시퀀스 번호
highestAcknowledgedSequenceNumber확인된 최고 시퀀스 번호
unacknowledgedFragmentCache미확인 Fragment 캐시
activeAgreements활성 약정 목록

각 방향(수집과 주입)은 독립적인 전송 상태를 유지한다.

세션 영속화

하위 전송 연결이 끊어지면, DTP_Engine은 세션 상태(모든 활성 약정 포함)를 영속 저장하여 이후 연결 복구를 지원한다.

세션 복구

연결이 복구되고 CAP 재검증이 통과된 후, DTP_Engine은 이전 세션 상태(활성 약정 포함)를 복구하고 전송을 계속한다.

복구 흐름:

  1. 하위 연결 재수립
  2. CAP 신원 재검증
  3. DTP_Engine이 영속 저장소에서 세션 상태 복구
  4. 수신측이 수신한 최고 시퀀스 번호를 보고
  5. 송신측이 중단점부터 전송 계속

세션 타임아웃

세션 유휴 시간이 프로토콜에 설정된 타임아웃 임계값을 초과하면, DTP_Engine은 세션을 종료하고 관련 리소스를 해제한다. 타임아웃 후에는 세션을 다시 수립해야 한다.

8.4 재전송 메커니즘

송신측이 프로토콜에 설정된 재전송 타임아웃 시간 내에 수신측의 확인을 받지 못하면, 미확인 Fragment를 자동으로 재전송한다.

재전송 전략:

  1. 설정된 타임아웃 시간 대기
  2. 타임아웃 후 미확인 Fragment 재전송
  3. 재전송 횟수가 임계값을 초과하면, 상위 애플리케이션에 전송 실패를 알림

8.5 대표 시나리오

시나리오 1: 지하철 터널

사용자의 휴대폰이 지하철 터널에서 네트워크가 끊기고, 500개의 운동 데이터 중 300개가 이미 업로드되었다. 터널을 나온 후 연결이 복구되면, DTP는 301번째부터 전송을 계속하며 이전 300개를 재전송할 필요가 없다.

시나리오 2: 블루투스 거리 초과

사용자의 스마트워치와 휴대폰의 블루투스 연결이 거리가 너무 멀어 끊어진다. 사용자가 휴대폰 근처로 돌아오면 연결이 자동으로 복구되고, 워치는 끊어진 동안 축적된 심박수 데이터를 계속 업로드한다.

시나리오 3: 서버 재시작

iFay가 위치한 FayGer 인스턴스가 재시작되며, DTP 세션 상태는 이미 영속화되어 있다. 재시작 후 세션을 복구하고 중단점부터 단말 데이터를 계속 수신한다.