본문으로 건너뛰기

버그 제보

이상한 점을 알려 주시면 고칠게요. 지금 보고 있는 페이지와 브라우저 정보가 함께 담겨요.

페이지:

Computer Science

IP QoS: 패킷을 차별해서 보내는 법

작성 2026. 10. 31.추가
목차11개 항목
출처와 참고

고려사이버대학교 「컴퓨터네트워크」(2023-2학기) 강의 내용을 바탕으로 정리했다.

최선형 망에서 품질을 보장하려면

IP는 최선형(best-effort) 이다. 라우터는 들어온 순서대로 보내고, 버퍼가 차면 버린다. 웹 페이지는 조금 늦어도 괜찮지만 화상 통화는 지연과 지터(지연의 흔들림) 에 민감하고(VoIP의 지터 버퍼), 백업 트래픽은 대역폭만 많으면 된다. QoS(Quality of Service) 는 이 요구를 구분해서 패킷마다 다르게 대우하는 기술이다.

지표뜻민감한 서비스
대역폭단위 시간에 보낼 수 있는 양영상 스트리밍, 대용량 전송
지연도착까지 걸리는 시간음성, 게임, 원격 제어
지터지연의 변동 폭음성, 영상 통화
손실률버려지는 패킷 비율실시간 미디어(재전송할 시간이 없다)

QoS의 단위는 서비스 플로우다. 보통 출발지·목적지 IP, 출발지·목적지 포트, 프로토콜의 5-튜플로 정의한다. MAC 주소는 홉마다 바뀌므로(네트워크 기초) 플로우를 구분하는 기준이 될 수 없다.

라우터 안에서 일어나는 일

QoS를 지원하는 라우터는 패킷을 다음 순서로 처리한다.

flowchart LR
  ip["입력"] --> cls["분류<br>(어느 플로우?)"] --> mt["미터링·마킹<br>(약속을 지켰나?)"] --> qu["폐기·큐잉<br>(버릴까 담을까?)"] --> sc["스케줄링<br>(누구 먼저?)"] --> sh["셰이핑<br>(속도 맞추기)"] --> op["출력"]

1. 분류(Classification)

헤더를 읽어 어느 플로우, 어느 클래스인지 정한다. 3계층에서는 IP 주소·포트·프로토콜과 ToS/DS 필드(IPv6는 Traffic Class와 Flow Label), 2계층에서는 VLAN 태그의 우선순위 비트(802.1p)나 MPLS 레이블의 EXP(TC) 비트(MPLS)를 본다.

ToS 필드에서 DSCP로

IPv4 헤더의 8비트 ToS 필드는 처음에 IP Precedence로 썼다. 상위 3비트가 중요도(0~7, 클수록 중요)였다. 이후 DiffServ가 이 바이트를 DS 필드로 다시 정의했다.

| DSCP (6비트) | ECN (2비트) |
  • DSCP: 64가지 값을 표현할 수 있지만 표준으로 쓰는 값은 일부다.
  • ECN: 라우터가 패킷을 버리는 대신 「혼잡하다」고 표시해 주는 비트. 송신 TCP는 이를 손실처럼 받아들여 속도를 줄인다(전송 계층의 혼잡 제어).
DSCP 그룹값뜻
CS0 (Default)0최선형
CS1~CS78의 배수Class Selector. 옛 IP Precedence와 호환(상위 3비트가 같다)
AFxy8x + 2y (x=14, y=13)Assured Forwarding. x는 클래스, y는 폐기 우선순위(클수록 먼저 버림). 예: AF41 = 34
EF46Expedited Forwarding. 가장 우선, 음성용

애플리케이션이 직접 표시할 수도 있다. 소켓 옵션으로 ToS 바이트를 정하는데, DSCP는 상위 6비트라 2비트 왼쪽으로 민다.

import socket
 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.setsockopt(socket.IPPROTO_IP, socket.IP_TOS, 46 << 2)  # EF = 0xB8

다만 망 경계의 장비가 신뢰할 수 없는 표시를 지우거나 다시 쓰는 경우가 많다. 공용 인터넷 끝에서 끝까지 DSCP가 지켜진다고 기대하긴 어렵고, 사내망이나 사업자 망 안에서 의미가 있다.

2. 미터링과 마킹(Metering & Marking)

플로우가 약속한 속도를 지키는지 재고, 결과를 패킷에 적는다. 대표적인 방식이 3색 마커다. 예를 들어 trTCM(two-rate three color marker)은 두 속도를 기준으로 한다.

측정 결과색
보장 속도(CIR) 이하초록: 그대로 보낸다
CIR 초과, 최대 속도(PIR) 이하노랑: 여유가 있으면 보낸다
PIR 초과빨강: 먼저 버린다

색은 DSCP의 폐기 우선순위 자리(AFx1/x2/x3)에 적는다. 그러면 뒤쪽 장비도 이 표시를 보고 같은 정책을 적용할 수 있다. 속도를 재는 원리는 API 속도 제한의 토큰 버킷과 같다(API 보안의 속도 제한).

3. 폐기와 큐잉(Policing & Queueing)

표시에 따라 버리거나 큐에 넣는다. 큐가 넘칠 때 어떻게 버리느냐가 중요하다.

방식동작효과
Tail Drop큐가 가득 차면 새로 오는 패킷을 버린다모든 TCP 연결이 동시에 손실을 겪고 동시에 속도를 줄였다가 동시에 다시 올린다. 이 출렁임을 전역 동기화(global synchronization) 라 한다
RED (Random Early Detection)큐 길이가 하한을 넘으면 길이에 비례한 확률로 미리, 무작위로 버린다. 상한을 넘으면 모두 버린다연결마다 다른 시점에 속도를 줄여 동기화를 막는다
WRED (Weighted RED)클래스(색)마다 다른 임계값·확률로 RED를 적용한다빨강을 먼저, 초록을 가장 늦게 버린다

4. 스케줄링(Scheduling)

여러 큐 가운데 다음에 어느 패킷을 내보낼지 정한다.

방식동작약점
FIFO큐 하나, 온 순서대로구분이 없어 QoS가 안 된다
SPQ (Strict Priority)높은 우선순위 큐가 비어야 낮은 큐를 보낸다높은 트래픽이 많으면 낮은 큐는 굶는다(starvation)
WFQ (Weighted Fair)큐마다 가중치만큼 대역폭을 나눈다플로우가 많은 고속망에서 계산 부담
CBQ (Class-Based)클래스별 큐에 전송량 한도를 둔다. 한 클래스가 자원을 독차지하지 못한다큐 관리 계산 부담

실제 장비는 음성 같은 EF 트래픽만 SPQ로 먼저 보내고 나머지는 가중치로 나누는 식으로 섞어 쓴다.

5. 폐기할까, 늦출까: 레이트 리미팅과 셰이핑

약속한 대역폭을 넘는 트래픽을 다루는 방법은 둘이다.

방식초과분 처리결과
레이트 리미팅(policing)버린다(예: 빨강 패킷)지연은 없지만 손실이 생긴다
셰이핑(shaping)버퍼에 담아 두었다가 허용 속도로 흘려보낸다손실은 적지만 지연이 생긴다. 버퍼가 넘치면 결국 버린다

서비스 모델: IntServ와 DiffServ

라우터 안의 부품을 망 전체에서 어떻게 엮을지에 대한 두 가지 설계다.

IntServ: 플로우마다 미리 예약

통합 서비스(Integrated Services) 는 플로우마다 경로상의 모든 라우터에 자원을 예약한다. 예약에는 RSVP(Resource Reservation Protocol) 를 쓴다.

  1. 송신자가 트래픽 특성을 담은 PATH 메시지를 수신자 쪽으로 보낸다. 지나는 라우터는 경로 상태를 기록한다.
  2. 수신자가 같은 경로를 거슬러 RESV 메시지를 보낸다. 라우터마다 대역폭·버퍼를 할당하고(연결 수락 제어) 다음 홉으로 넘긴다.
  3. 예약은 일정 시간이 지나면 풀리므로(soft state) 주기적으로 다시 보내야 한다.

예약 주도권이 수신자에게 있다는 점이 특징이다. 서비스 유형은 최악의 지연까지 보장하는 보장형, 한산할 때 수준의 품질을 유지하는 부하 제어형, 그리고 최선형이다. 문제는 백본 라우터가 수십만 개 플로우의 상태를 모두 들고 있어야 한다는 것이다. 그래서 큰 망으로 확장되지 못했다.

DiffServ: 클래스로 묶어서 홉마다

차등 서비스(Differentiated Services) 는 플로우 단위 보장을 포기하고 몇 개의 클래스로 묶는다.

  • 경계 라우터만 분류·미터링·마킹을 하고 약속 위반을 감시한다.
  • 내부 라우터는 DSCP만 보고 정해진 방식으로 전달한다. 이 홉 단위 동작을 PHB(Per-Hop Behavior) 라 한다(Default, CS, AF, EF).
  • 내부에 플로우 상태가 없어 망이 커져도 그대로 쓸 수 있다.
항목IntServDiffServ
단위개별 플로우플로우 묶음(클래스)
보장 범위종단 간도메인 안
분류하는 곳모든 라우터경계 라우터
자원 예약모든 라우터에서 RSVP로없음. 경계에서 감시
확장성어렵다쉽다

현실의 대규모 망은 DiffServ 쪽을 택했고, 경로까지 통제해야 하는 곳은 MPLS 트래픽 엔지니어링을 함께 쓴다.

핵심 정리

  • QoS는 플로우(5-튜플)를 구분해 대역폭·지연·지터·손실을 다르게 대우하는 것이다.
  • 라우터의 처리 순서는 분류 → 미터링·마킹 → 폐기·큐잉 → 스케줄링 → 셰이핑이다.
  • DSCP는 ToS 바이트의 상위 6비트다. EF(46)가 최우선, AF는 클래스와 폐기 우선순위, CS는 옛 Precedence 호환이다.
  • Tail Drop은 TCP 연결을 한꺼번에 흔들고, RED·WRED는 미리 무작위로 버려 이를 막는다.
  • 초과 트래픽을 버리면 폴리싱, 늦추면 셰이핑이다.
  • IntServ는 정확하지만 확장이 안 되고, DiffServ는 대략적이지만 확장된다.

관련 노트: 전송 계층: 포트, TCP, UDP, VoIP 전화망, 가입자망과 광역망(MPLS), 네트워크 계층 프로토콜

댓글

GitHub 계정으로 댓글을 남길 수 있어요.