호우동의 개발일지

Today :

article thumbnail

혼잡 제어의 원인과 비용

  • 네트워크 혼잡 원인을 처리하기 위한 방법
    → 네트워크 혼잡을 일으키는 송신자들을 억제하는 메커니즘 필요

 

 

 

 

 

혼잡 제어가 발생하는 시나리오

  • 초점
    → 호스트들이 자신의 전송률을 증가시키고 네트워크 혼잡이 발생함에 따라 발생하는 일

 

 

 

시나리오 1 : 2개의 송신자와 무한 버퍼를 갖는 하나의 라우터

  • 각각 출발지와 목적지 사이에 단일 홉을 공유하는 연결을 갖는다.

무한 버퍼를 가진 하나의 홉을 공유하는 2개의 연결
무한 버퍼를 가진 하나의 홉을 공유하는 2개의 연결

 

 

  • 가정
    • 호스트 A, B의 애플리케이션이 λ(in) 바이트/초의 평균 전송률로 연결상으로 데이터를 보냄
      → 이러한 데이터는 각 데이터 단위가 소켓으로 한 번만 전송된다.(원본 데이터)
      • 소켓을 통해 트랜스포트 계층 프로토콜로 데이터를 넘겨주는 것

    • 하위의 트랜스포트 계층 프로토콜은 단순히 데이터를 캡슐화하고 전송하는 역할
      → 오류 복구, 흐름 제어, 혼잡 제어를 수행하지 않는다.

    • 호스트 A, B가 전송되는 패킷은 라우터와 용량 R의 공유 출력 링크를 통과한다.
    • 라우터는 무제한의 버퍼 공간을 갖는다고 가정

  • 호스트 A,B가 라우터에게 제공하는 속도 → λ(in) 바이트/초
    • 트랜스포트 계층과 하위 계층에서 헤더 정보의 추가로 인한 부가적인 오버헤드를 무시

 

 

 

 

 

시나리오 1에서 호스트 A의 연결 성능

혼잡시나리오1 : 호스트 전송률의 함수로 보는 처리량과 지연
혼잡시나리오1 : 호스트 전송률의 함수로 보는 처리량과 지연

 

 

  • 연결당 처리량(per-connection throughput) : 수신자 측에서의 초당 바이트 수(왼쪽)
  • 0과 R/2 사이의 전송률에 대해 수신자 측의 처리량은 송신자의 전송률과 같다.
  • 전송률이 R/2 이상일 때 처리량은 단지 R/2에 불과 → 상한이 존재
    • 이러한 상한은 두 연결 사이에서 링크 용량 공유의 결과
      → 링크는 안정상태에서는 R/2를 초과해서 패킷을 수신자에게 전달할 수 없다.

  • 호스트 A, B가 전송률을 높게 설정해도 각자 R/2보다 더 높은 처리량을 얻을 수 없다.
  • 링크 용량 근처에서의 동작 결과(오른쪽)
    • 전송률이 R/2에 근접하면, 평균 지연 시간은 점점 커진다.
    • 전송률이 R/2를 초과할 경우
      • 라우터 안에 큐잉된 패킷의 평균 개수는 제한되지 않음
      • 출발지와 목적지 사이의 평균 지연은 무제한이 된다.
  • 결론
    • R 근처의 전체 처리량에서 동작하는 것은 처리량 관점에서는 이상적
    • But, 지연 관점에서는 이상적이지 않다.
    • 패킷 도착률이 링크 용량에 근접함에 따라 큐잉 지연이 커진다.
      • 무한 버퍼를 갖는 이상적인 시나리오에서도 혼잡 네트워크의 비용이 발견된다.

 

 

 

 

 

 

시나리오 2: 2개의 송신자, 유한 버퍼를 가진 하나의 라우터

유한 버퍼를 가진 하나의 홉을 공유하는 2개의 연결
유한 버퍼를 가진 하나의 홉을 공유하는 2개의 연결

 

  • 가정
    • 라우터 버퍼의 양이 유한하다고 가정
      → 이미 버퍼가 가득 찼을 때, 도착하는 버퍼는 버려진다.

    • 각 연결은 신뢰적이라고 가정한다.
      → 트랜스포트 계층 세그먼트를 포함하는 패킷이 라우터에서 버려지면, 송신자에 의해 재전송됨

    • 패킷이 재전송될 수 있으므로, 송신율(sending rate)이라는 용어를 사용
      • 애플리케이션이 원래의 데이터를 소켓으로 보내는 송신율 → λ(in) 바이트/초로 표기
      • 네트워크 안으로 세그먼트를 송신하는 트랜스포트 계층에서의 송신율 → λ`(in) 바이트/초로 표기
        • 이때 세그먼트는 원래 데이터와 재전송 데이터를 포함한다.
        • λ'(in)은 네트워크에 제공된 부하(offered load)라고 부른다.

 

 

 

 

시나리오 2에서의 성능

  • 재전송이 어떻게 수행 과정에 따른다.
  1. 호스트 A가 라우터에 있는 버퍼가 비었는지 아닌지 알 수 있고,
    버퍼가 비었을 때만 패킷을 송신할 수 있는 비현실적인 경우라고 가정

버퍼가 비었는지 알 수 있을때
버퍼가 비었는지 알 수 있을 때

  • λ(in) = λ`(in) 이므로 어떠한 손실도 발생하지 않는다.
  • 연결의 처리량은 λ(in)과 같다.
  • 패킷 손실이 발생하지 않는다고 가정 → 평균 호스트 송신율은 R/2를 초과 X
  • 처리율 관점
    → 송신된 모든 것이 수신되기 때문에 성능은 이상적

2. 패킷이 확실히 손실된 것을 알았을 때만 송시자가 재전송하는 현실적인 경우

패킷이 손실된 걸 아는 경우
패킷이 손실되는걸 아는 경우

 

  • 송신하는 호스트가 확인응답되지 않는 패킷이 사실상 손실되었다는 것을 확신함
    → 충분히 큰 타임아웃을 설정한다.

  • 송신자는 버퍼 오버플로 때문에 버려진 패킷을 보상하기 위해 재전송을 수행해야 한다.
    • λ`(in)(최초의 데이터 전송가 재전송 합의 속도)이 R/2일 경우
      → 제공된 부하의 값에서 수신자 애플리케이션으로 전달되는 데이터의 전송률은 R/3
      • 전송된 데이터의 R/2
        • R*(1/3) = 0.333R바이트/초(평균)→ 원래의 데이터
        • (R/2) - (R/3) = R/6 ⇒0.166R바이트/초(평균) → 재전송 데이터

3. 송신자가 일찍 타임아웃해서 패킷이 손실되진 않았지만, 큐에서 지연되고 있는 패킷을 재전송하는 경우

큐에서 지연되고 있는 패킷을 재전송하는 경우
큐에서 지연되고 있는 패킷을 재전송하는 경우

 

  • 원래의 데이터 패킷과 재전송 패킷 둘 다 수신자에게 도착한다.
    • 수신자는 하나의 패킷 복사본만 필요하므로 재전송된 패킷은 버린다.
      → 이런 경우 라우터에서 원래 패킷의 재전송된 복사본을 전달하는 작업은 낭비

  • 라우터는 다른 패킷을 송신하기 위해 링크 전송 용량을 사용(위 방법에서의 낭비를 막기 위해)
    → 혼잡 네트워크의 또 다른 비용이 발생
    • 커다란 지연으로 인한 송신자의 불필요한 재전송은
      라우터가 패킷의 불필요한 복사본들을 전송하는데 링크 대역폭을 사용하는데 원인이 된다.

  • 아래 곡선은 각 패킷이 라우터에 의해 두 번씩 전달(평균)된다고 가정했을 때,
    부하에 대한 처리량을 나타냄


  • 각 패킷이 두 번씩 전달됨
    → 제공된 부하가 R/2일 때 처리량은 R/4의 점선 값을 가진다.

 

 

 

 

 

 

시나리오 3: 4개의 송신자와 유한 버퍼를 갖는 라우터, 그리고 멀티홉 경로

유한한 출력 링크 버퍼를 가진 라우터
유한한 출력 링크 버퍼를 가진 라우터

 

  • 가정
    • 4개의 호스트는 그림과 같이 겹쳐지는 2홉 경로를 통해 패킷을 전송
    • 각각의 호스트가 안정적인 데이터 전송 서비스 실행을 위해, 타임아웃/재전송 메커니즘 사용
    • 모든 호스트는 λ(in)의 동일한 값을 갖고, 모든 라우터 링크는 R바이트/초 용량을 갖는다.

 

 

 

 

호스트와 라우터 연결 분석 - 작은 트래픽의 경우

  • 라우터 R1과 R2를 지나는 호스트 A에서 호스트 C까지의 연결
    • A ~ C 연결은 D ~ B 연결과 라우터 R1을 공유

  • λ(in)의 극히 작은 값에 대해 버퍼 오버플로는 거의 발생하지 않는다.
  • 위 시나리오 1,2처럼 처리량은 제공된 부하와 거의 같다.
  • λ(in)의 약간 더 큰 값에 대해 원래의 데이터가 네트워크로 전송 및 목적지에 전달
    • 해당 과정에서 오버플로가 거의 발생하지 않음 → 처리량이 약간 커진다.
    • λ(in)이 작은 값일 때, λ(in)의 증가는 λ(out)의 증가를 가져온다.

 

 

 

호스트와 라우터 연결 분석 - 트래픽이 매우 큰 경우

  • λ(in) 값(따라서 λ^`(in))이 매우 큰 경우를 뜻함
  • R1에서 전달된 후 R2에 도착한 A~C 트래픽
    → R2에서 λ(in) 값과 관계없이, R1에서 R2까지의 링크 용량, 최대 R인 도착률을 가질 수 있다.

트래픽이 매우 큰 경우
트래픽이 매우 큰 경우

  • λ`(in)이 모든 연결(A ~ C연결과  B ~ D 연결)에 대해 매우 큰 경우
    → R2의 B ~ D 트래픽 도착률은 A ~ C 트래픽 도착률보다 클 수 있다.
    • A ~ C와 B ~ D 트래픽은 버퍼 공간을 R2 라우터에서 경쟁해야 함
      → R2를 성공적으로 통과하는 A~C 트래픽 양은 B~D에서 제공된 부하가 클수록 더 작아짐
      → 제공된 부하와 처리량 간의 트레이드오프(tradeoff)가 발생함


      • 제공된 부하가 무한대에 가까워지는 경우
        • R2의 빈 버퍼는 즉시 B~D 패킷으로 채워짐
        • A~C 연결의 처리량은 0이 됨

  • 제공된 부하를 증가시키면 처리량이 감소하는 원인
    네트워크가 수행한 헛된 ‘작업’의 양을 고려해 보면 알 수 있음
    • 과도한 트래픽 발생 시나리오 예시(바로 위 시나리오)
      • 패킷이 두 번째 홉 라우터에서 버려질 때
        → 첫 번째 홉 라우터에서 수행된 작업은 헛된 것이 됨
        • 첫 번째 홉 라우터의 역할 : 두 번째 홉 라우터에게 패킷을 전달

      • 만약 첫 번째 라우터가 패킷을 포기하고, 유휴 상태를 유지할 경우
        • 유휴 상태 : 어떠한 프로그램에 의해 사용되고 있지 않은 상태
        • 첫번째 라우터에서 사용되는 전송 용량은 다른 패킷을 전송하기 위해 사용될 수 있다.
          ← 두 번째 라우터에게 패킷을 전달하기 위한 전송 용량을 아낄 수 있기 때문
          • 예시
            • 전송 패킷 선택
              → 라우터가 이미 여러 개의 상향 라우터를 거친 패킷에게 우선순위를 줌

  • 패킷이 버려질 때, 또 다른 비용을 발생
    • 버려지는 지점까지 패킷을 전송하는 데 사용된 상위 라우터에서 사용된 전송 용량은 낭비된 것

  • λ(out)은goodput(throughput)이라고도 불림
    • goodput : throughput 중에서도 실제로 필요한 데이터만을 의미
    • λ(out)은 λ(in)이 증가할 때 어느 정도까지 증가하다가 급감

 

 

 

 

 

 

혼잡 제어에 대한 접근법

  • 실제로 혼잡 제어를 수행하는 2가지 광범위한 접근 방식 특정 네트워크 구조

 

 

 

 

혼잡 제어 접근 구별

  • 네트워크 계층이 트랜스포트 계층에게 어떤 직접적인 도움을 제공하는지 파악하면 구별 가능
    • 여기서 직접적인 도움이란 혼잡 제어 목적을 위한 것

 

 

 

 

종단 간의 혼잡 제어 - 혼잡 제어에 대한 종단 간의 접근 방식

  • 이 방식에서 네트워크 계층은 혼잡 제어 목적을 위해 트랜스포트 계층에게 직접적인 지원 X
    • 네트워크에서 혼잡의 존재는 관찰된 네트워크 동작에 기초하여 종단 시스템이 추측
      • 네트워크 동작 예시 - 패킷 손실 및 지연

  • IP 계층이 네트워크 혼잡에 관해 종단 시스템에게 어떠한 피드백 제공도 요구받지 않음
    TCP는 혼잡 제어를 위한 종단 간의 접근 방식을 취함
    • TCP 세그먼트 손실은 네트워크 혼잡의 발생 표시로 간주하고 그에 따라 윈도 크기를 줄임
      • TCP 세그먼트 손실은 타임아웃 또는 삼중의 중복 확인에 의해 나타남

    • TCP에 대한 새로운 제안
      → 증가하는 왕복 지연값을 네트워크 혼잡 증가 지표로 사용하는 것

 

 

 

 

네트워크 지원 혼잡 제어

  • 라우터들은 네트워크 안에서 혼잡 상태와 관련하여 송/수신자 모두에게 직접적인 피드백 제공
    • 피드백은 링크의 혼잡을 나타내는 하나의 비트처럼 간단

  • 최근엔 IP/TCP가 네트워크 혼잡 제어를 선택적으로 구현할 수 있음

네트워크 지원 혼잡 정보를 위한 2개의 피드백 경로
네트워크 지원 혼잡 정보를 위한 2개의 피드백 경로

 

 

  • 네트워크 지원 혼잡 정보는 2가지 방법 중 하나로 네트워크에게 송신자로 피드백됨
    1. 직접 피드백 → 네트워크 라우터에서 송신자에게 보내는 것
      • “나는 혼잡하다!”라고 말하는 것과 같음

    2. 라우터 혼잡을 나타내기 위해 전송 패킷 안의 특정 필드에 표시/수정하는 것
      • 수신자가 표시된 패킷을 수신했을 때, 혼잡 상태를 송신자에게 알림
      • 이 형태의 알림은 완전한 왕복 시간이 걸린다.