안녕하세요!

FE 개발자 유진주입니다.

CS/네트워크

[컴퓨터네트워크] Chapter3.4 오류복구2_Go-Back_N ARQ

ypearl 2023. 12. 2. 20:12
 

Chapter3.4  오류복구2_Go-Back_N ARQ

  • 파이프라이닝(Pipelining)
  • Go-back-N 작동원리
  • Go-back-N ARQ 예제
  • 송신 윈도우 최대 크기
  • 장단점

 

파이프라이닝(Pipelining)

: ACK가 회신 되기 전 RTT 동안 링크에 M개의 세그먼트를 전송

 

- 장점

  • 링크 효율 제고(stop-and-wait보다 M배 높은 효율)

'

 

Go-back-N 작동원리

: 오류 세그먼트부터 이후의 모든 세그먼트 재전송

 

- 송신자 동작 절차

1) ACK가 회신되는 RTT 동안 링크에 최대 M개의 세그먼트를 전송하고 버퍼에 유지(송신 윈도우 = M)

2) ACK 수신하면 해당 세그먼트(첫번째 세그먼트)을 버퍼에서 제거하고 송신가능 순서번호 범위를 1씩 이동(송신 윈도우 슬라이딩)

3) 세그먼트 재전송 타이머가 종료될 떄까지 ACK가 수신되지 않으면 해당 세그먼트부터 송신 윈도우의 모든 세그먼트 재전송

 

- 송신 윈도우(send window)

  • 송신가능 순서번호 범위
  • 송신 후 버퍼에 유지되어야 할 세그먼트의 범위

 

- 송신자 버퍼 관리

  • Ssize: 송신 슬라이딩 윈도우 크기(send sliding window size)
    • ACK 없이 송신 가능한 최대 세그먼트의 수
    • Ssize = 2^m - 1, m은 순서번호 필드 크기(비트수)
  • Sf: ACK가 수신되지 않은 첫번째 세그먼트 순서번호
    • ACK가 수신될 때마다 Sf = (Sf + 1) mod 2^m        // 15 이상, 0, 1...

 

- 송신 버퍼

  • [Sf, Sn -1] 세그먼트를 재전송을 위해 버퍼에 유지

*송신 윈도우의 크기가 커질수록, 버퍼가 커져야 함.

 

*[참고]  mod의 정의

 

[예시] 송신 윈도우 관리: SN 필드 크기 4비트 [ 0 ~ 15]

2^m - 1 = 2^4 - 1 = 15

→ 송신 윈도우에 들어갈 수 있는 최대 개수( 0~ 14)

실제 들어있는 세그먼트 수 [ 0, 6 ] 일때,

0~2 3개의 ACK를 보낼 경우

오른쪽으로 3칸만큼 슬라이딩!

 

따라서, Go-back-N 오류 복구 기법은 슬라이딩 프로토콜이라고도 함.

 

 

- 수신자 동작 절차

  • 다음 순서번호 Rn의 세그먼트를 정상적으로 수신하면 ACK(Rn + 1) 회신
  • 다음 순서번호 Rn이 아닌 모든 세그먼트는 폐기 → 누적 수신 확인(Accumulative ACK)

 

- 수신자 버퍼 관리

  • Rn: 다음에 수신할 세그먼트의 순서번호
  • 세그먼트가 수신될 때마다 Rn = (Rn + 1) mod 2^m
  • 수신 윈도우 크기: 1
  • 수신자 버퍼 크기: 1

 

Go-back-N ARQ 예제

* 위에서 sgmt 3, 4, 5 보냈지만,

간단한 동작을 위해 time-out 된 2부터 다시 보냄!

 

송신 윈도우 최대 크기

  • 순서번호(SN) 필드 크기가 m비트일 때 송신 윈도우 최대 크기(Smax)
    • Smax : (S^m - 1)
  • 순서번호 필드 크기 m = 2 가정 → Smax = 3

- 누적수신확인이 완료되어 ACK를 순서대로 보냈는 데,

ACK 전체가 손실되었을 경우

=> 윈도우 크기는 최대 2^m -1 까지만 가능하다!
(그 이상은 동작하지 않을 수 있음)

장단점

  • 장점
    • Stop-and-wait 대비 고효율성
    • 간단한 수신자 버퍼 관리 (다음 세그먼트 수신용 버퍼)

 

  • 단점
    • 오류 세그먼트 이후 도착한 정상 세그먼트 재전송
      → 불필요한 재전송 회수 증가
      → 링크 효율 저하