Transport Layer - 오류복구

dragonappear·2023년 7월 14일
0

Network 101

목록 보기
9/10


오류 복구

✔️ 오류 메커니즘

  • UDP,IP는 오류 복구 메커니즘 제공 X
  • TCP는 오류 복구 메커니즘 제공 O

✔️ 오류 검출

  • 세그먼트 훼손: Checksum으로 검출
  • 세그먼트 손실: 세그먼트 미도착
    • 중간 통신 장치의 버퍼 오버플로우

✔️ 오류 수신

  • 훼손 세그먼트: 폐기 + 미수신
  • 세그먼트 손실: 인지 불가

세그먼트 손실

✔️ ACK

수신자가 데이터 세그먼트의 정상 수신을 확인하기 위해 송신자에게 보내는 특수한 세그먼트

✔️ 타이머

  • 세그먼트 전송 후 송신자는 타이머 시작
  • 타이머 종료시까지 ACK 미도착 시 세그먼트 손실로 판단한다

RTT(Round Trip Time)

세그먼트 송신 후 ACK 세그먼트 수신까지 걸리는 지연 시간

타이머

RTT(Round Trip Time)와 연계된 함수


ARQ(Automatic Repeat Request)

✔️ Stop and wait

개념

세그먼트 전송 후 ACK 세그먼트가 수신되면 다음 세그먼트를 전송한다

송신자 절차

  1. 세그먼트 송신 후 복제본을 버퍼에 유지
  2. 재전송 타이머 시작
    3.1 타이머 종료 전 ACK 수신 시 복제본 폐기, 타이머 종료
    3.2 타이머 종료 시 ACK 미수신 시 세그먼트 재전송, 타이머 재시작

수신자 절차

정상 세그먼트 수신 시 ACK 회신

Stop and wait 문제점

수신자 중복 세그먼트 구분 불가

✅ Sequence Number

  • 각 세그먼트에 대한 순서번호(동일 종류 세그먼트 간 구분)
  • 송신 SN = 현재 송신 세그먼트 번호
  • ACK SN = 다음 송신 세그먼트 번호 = SN +1

ARQ with SN 문제점

  • 낮은 링크 사용 효율성
    • ACK 세그먼트가 도착할 때까지 전송 대기
    • 대기 시간 동안 링크 미사용

✅ Pipelining

  • ACK 세그먼트가 회신되기 전 RTT동안 링크에 M개의 세그먼트를 전송하여 링크 효율을 높인다
    • 최대 파이프라이닝 세그먼트의 수 M(송신 윈도우) 보다 큰 SN을 사용해야 한다.
    • SN 필드 = m 비트일 때 2^m > M 이여야 한다.
  • 순서 번호 = [0,2^M-1]

✔️ Go back N

개념

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

송신자 절차

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

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

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

송신 윈도우

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

송신자 버퍼 관리

  • S(size) = 송신 슬라이딩 윈도우 크기 (=2^m-1, m은 순서번호 필드 비트수)
    • ACK 없이 송신 가능한 최대 세그먼트 크기
  • S(f) = ACK 세그먼트가 수신되지 않은 첫번째 세그먼트 순서번호
    • ACK 세그먼트가 수신될 때마다 S(f) = (S(f)+1) mod 2^m
  • S(n) = 다음 송신 세그먼트 순서번호
    • 세그먼트를 송신할 때마다 S(n) = (S(n)+1) mod 2^m

수신자 절차

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

수신자 버퍼 관리

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

송신 윈도우 최대크기가 2^(m-1) 이하이여야 하는 이유

장점

  • Stop and wait 대비 링크 사용 효율 높음
  • 간단한 수신자 버퍼 관리

단점

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

✔️ Selective Repeat

개념

오류 세그먼트만 전송

송신자 절차

  1. ACK 세그먼트가 회신되는 RTT동안 링크에 최대로 송신 윈도우 크기인 S(size)개의 세그먼트 전송
    2.1 누적 ACK을 수신하면 송신 윈도우를 누적 ACK수만큼 이동
    2.2 비누적 ACK을 수신하면 해당 세그먼트의 ACK 수신 사실 기록
  2. 세그먼트 재전송 타이머가 종료될 때까지 ACK이 도착하지 않으면 해당 세그먼트 재전송

송신 윈도우

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

누적 ACK, 비누적 ACK

  • 누적 ACK= 송신 윈도우 내에서 누적적으로 순서번호가 맞는 ACK
  • 비누적 ACK= 송신 윈도우 내에서 누적적으로 순서번호가 맞지않는 ACK

수신자 절차

  1. 송신 윈도우 크기와 동일한 수신 윈도우(RCVW) R(size) 유지
    2.1 누적 정상 세그먼트를 수신하면 ACK을 회신하고. 누적 정상 세그먼트 수만큼 수신 윈도우 이동
    2.2 비누적 정상 세그먼트를 수신하면 ACK을 회신하고, 해당 세그먼트를 버퍼에 유지

수신 윈도우

  • 수신 가능한 세그먼트의 범위
  • 송신 윈도우 크기와 동일

수신자 버퍼 관리

  • 비누적 정상 세그먼트를 수신 버퍼에 유지
  • 다음 수신 가능 세그먼트: 수신 버퍼에 유지되고 있지 않는 수신 윈도우 내의 모든 세그먼트

송신 윈도우 최대크기가 (2^m)-1 이하이여야 하는 이유

재젅송 세그먼트와 정상 세그먼트 구분 불가

0개의 댓글

관련 채용 정보