호우동의 개발일지

Today :

article thumbnail

rdt3.0

rdt 3.0 송신자 측
rdt 3.0 송신자 측

  • 비트 오류와 손실 있는 채널상에서의 신뢰적인 데이터 전송
  • 2가지 부가 내용을 프로토콜로 생각해야 함
    1. 어떻게 패킷 손실을 검출할 것인가?
      • 새로운 프로토콜 메커니즘을 추가해야 함

    2. 패킷 손실이 발생했을 때, 어떤 행동을 할 것인가?
      • 체크섬, 순서 번호, ACK 패킷, 재전송의 사용

  • 송신자에게 손실된 패킷의 검출과 회복 책임을 부여

 


송신자의 손실된 패킷의 검출

  • 가정
    • 송신자가 데이터 패킷을 전송하고, 패킷 또는 수신자 패킷에 대한 ACK를 손실
      → 송신자에게는 수신자로부터 어떠한 응답도 없음

  • 송신자가 패킷을 잃어버렸다고 확신할 정도로 충분한 시간을 기다릴 수 있다면, 패킷을 재전송 가능

패킷 손실 확신을 위해선 얼마나 기다려야 할까?

  • 적어도 송신자와 수신자 사이의 (왕복 시간 지연 + 수신 측에서 패킷을 처리하는 시간)
    • 왕복 시간 지연에는 중간 라우터에서의 버퍼링을 포함한다.

  • 최대 지연 시간은 예측하기 어렵고, 프로토콜이 패킷 손실을 가능한 한 빨리 복구해야 함
    → 최악의 지연을 기다린다는 것은 오류 복구가 시작될 때까지 오래 기다려야 한다는 것을 의미

손실된 패킷을 검출하는데 채택된 방식

  • 송신자가 패킷 손실이 일어났다는 보장은 없지만 손실이 일어났을 만한 시간을 현명하게 선택
    • ACK가 이 시간 안에 수신되지 않는 경우 → 패킷 재전송
    • 패킷이 큰 지연을 갖는 경우 → 패킷 재전송할 수 있음
      • 데이터 패킷이나 그 패킷에 대한 ACK 손실이 발생하지 않았어도 가능
        → 송신자 대 수신자 채널에서 중복 데이터 패킷의 가능성 발생
        • 순서 번호를 이용하여 처리 가능

 


시간 기반의 재전송 메커니즘 구현

  • 송신자는 모든 경우에서의 행동은 재전송이다.
    • 송신자는 손실 혹은 지나친 지연이 발생했을 때, 이를 구분할 줄 모른다.
      • 데이터 패킷이 손실되었는지, ACK가 손실되었는지 구분 X
      • 패킷 또는 ACK가 지나치게 지연된 것인지 구분 X
      • 손실인지 지연인지도 모름

  • 시간 기반의 재전송 메커니즘을 구현하기 위해 카운트다운 타이머가 필요
    • 카운트다운 타이머(countdown timer)
      → 주어진 시간이 지난 후에 송신자를 인터럽트(중단)

송신자의 동작 과정

  1. 매 패킷(첫 번째 또는 재전송 패킷)이 송신된 시간에 타이머를 시작
  2. 타이머 인터럽트에 반응함(적당한 행동을 취함)
  3. 타이머를 멈춤

 


얼터네이팅 비트 프로토콜

  • 프로토콜 rdt3.0은 얼터네이팅 비트 프로토콜이라고도 부른다.
    ← 순서 번호가 0과 1이 번갈아 일어나기 때문

얼터네이팅 비트 프로토콜 rdt3.0의 동작

무손실 동작과 패킷 손실
ACK 손실과 조급한 타임아웃
나타날 수 있는 4가지 동작

  • 위 그림은 프로토콜이 패킷 손실 또는 지연 없이 어떻게 동작하는지,
    손실된 데이터 패킷을 어떻게 처리하는지를 보여줌

  • 시간은 다이어그램의 위에서 아래로 움직임
    → (패킷 수신 시간 > 패킷 전송 시간)
    • 전송 지연과 전파 지연 때문

  • (b)~(d)에서 송신 측 꺽쇠는 타이머가 설정된 후에 타임아웃된 시간을 가리킴

 


프로토콜 rdt3.0의 핵심적인 성능 문제

  • rdt3.0이 전송 후 대기(stop-and-wait) 프로토콜이라는 점

전송 후 프로토콜의 성능을 알기 위한 예시

    • 가정
      • 각각 미국의 서부, 동부에 위치하고 있는 두 종단 호스트의 경우
      • 두 종단 시스템 사이의 광속 왕복 전파 지연(RTT) : 대략 30ms
      • 두 호스트가 1 Gbps 전송률(R)을 가진 채널로 연결되어 있다고 가정
      • 패킷당 1000byte(8000bit)의 패킷 크기(L)를 가짐
        • 패킷은 헤더 필드와 데이터를 모두 포함

      • ACK 패킷은 매우 작은 크기 → 전송 시간을 무시할 수 있다.
      • 수신자는 데이터 패킷의 마지막 비트가 수신되자마자 ACK 패킷을 송신 시작 가능

    • 패킷을 전송하는데 필요한 시간 
       

패킷 송신
패킷 송신

    1. 송신자가 t = 0에서 데이터 전송 시작하면 t = 8 µs(L/R)에서 마지막 비트가 송신 측의 채널로 들어감
    2. 패킷은 15ms 동안 이동
    3. t = RTT/2 + L/R = 15.008ms에 수신 측으로 마지막 비트가 도착
    4. 송신자 측에서 ACK 패킷은 t = RTT + L/R = 30.008ms 후에 다시 받음
      → 송신자는 30.008ms 동안 0.009ms 동안만 데이터를 전송한 것

이용률 계산
이용률 계산

    • 송신자는 단지 시간의 0.027%만큼만 바빴음
      → 전송 후 대기 프로토콜은 형편없는 이용률을 가진다.

    • 초당 1 Gbps의 링크가 가능하더라도 낮은 유효 처리량을 갖는다.
      → 1 Gbps 용량의 링크에 대한 비용을 지불해야 함

 

 


파이프라이닝된 신뢰적인 데이터 전송 프로토콜

전송 후 대기 와 파이프라이닝
전송 후 대기와 파이프라이닝

 


파이프라이닝

  • 송신자에게 확인응답을 기다리지 않고 여러 패킷 전송을 허용
  • 많은 전송 중인 송신자-수신자 패킷을 파이프라인에 채워 넣음
  • 파이프라이닝 방식은 신뢰적인 데이터 전송 프로토콜에서 중요성을 지님

 


파이프라이닝된 동작

전송 과정

  • 확인응답을 기다리기 전에 송신자가 3개의 패킷 전송을 허용
    → 송신자의 이용률이 3배가 됨

 


신뢰적인 데이터 전송에 대한 파이프라이닝 방식의 중요성

  • 순서 번호의 범위가 커져야 한다.
    • 각각의 전송 중인 패킷은 유일한 순서 번호를 가져야 한다.
      • 이때 재전송을 고려하지 않는다.

    • 전송 중인 확인응답(ACK)이 안된 패킷이 여럿 있을지 모른다.

  • 프로토콜의 송신 측과 수신 측은 패킷 하나 이상을 버퍼링해야 한다.
    • 최소한 송신자는 전송되었으나 확인응답되지 않은 패킷을 버퍼링 해야 한다.
    • 정확하게 수신된 패킷의 버퍼링은 수신자에게도 필요

  • 필요한 순서 번호의 범위와 버퍼링 조건은 데이터 전송 프로토콜의
    손실/손상/지연 패킷에 대한 응답 방식에 좌우됨

    • 파이프라인 오류 회복의 2가지 기본적인 접근 방법
      1. GBN(Go-Back-N) : N부터 반복
      2. SR(Selective Repeat) : 선택적 반복