목차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~CS7 | 8의 배수 | Class Selector. 옛 IP Precedence와 호환(상위 3비트가 같다) |
| AFxy | 8x + 2y (x=1 | Assured Forwarding. x는 클래스, y는 폐기 우선순위(클수록 먼저 버림). 예: AF41 = 34 |
| EF | 46 | Expedited 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) 를 쓴다.
- 송신자가 트래픽 특성을 담은 PATH 메시지를 수신자 쪽으로 보낸다. 지나는 라우터는 경로 상태를 기록한다.
- 수신자가 같은 경로를 거슬러 RESV 메시지를 보낸다. 라우터마다 대역폭·버퍼를 할당하고(연결 수락 제어) 다음 홉으로 넘긴다.
- 예약은 일정 시간이 지나면 풀리므로(soft state) 주기적으로 다시 보내야 한다.
예약 주도권이 수신자에게 있다는 점이 특징이다. 서비스 유형은 최악의 지연까지 보장하는 보장형, 한산할 때 수준의 품질을 유지하는 부하 제어형, 그리고 최선형이다. 문제는 백본 라우터가 수십만 개 플로우의 상태를 모두 들고 있어야 한다는 것이다. 그래서 큰 망으로 확장되지 못했다.
DiffServ: 클래스로 묶어서 홉마다
차등 서비스(Differentiated Services) 는 플로우 단위 보장을 포기하고 몇 개의 클래스로 묶는다.
- 경계 라우터만 분류·미터링·마킹을 하고 약속 위반을 감시한다.
- 내부 라우터는 DSCP만 보고 정해진 방식으로 전달한다. 이 홉 단위 동작을 PHB(Per-Hop Behavior) 라 한다(Default, CS, AF, EF).
- 내부에 플로우 상태가 없어 망이 커져도 그대로 쓸 수 있다.
| 항목 | IntServ | DiffServ |
|---|---|---|
| 단위 | 개별 플로우 | 플로우 묶음(클래스) |
| 보장 범위 | 종단 간 | 도메인 안 |
| 분류하는 곳 | 모든 라우터 | 경계 라우터 |
| 자원 예약 | 모든 라우터에서 RSVP로 | 없음. 경계에서 감시 |
| 확장성 | 어렵다 | 쉽다 |
현실의 대규모 망은 DiffServ 쪽을 택했고, 경로까지 통제해야 하는 곳은 MPLS 트래픽 엔지니어링을 함께 쓴다.
핵심 정리
- QoS는 플로우(5-튜플)를 구분해 대역폭·지연·지터·손실을 다르게 대우하는 것이다.
- 라우터의 처리 순서는 분류 → 미터링·마킹 → 폐기·큐잉 → 스케줄링 → 셰이핑이다.
- DSCP는 ToS 바이트의 상위 6비트다. EF(46)가 최우선, AF는 클래스와 폐기 우선순위, CS는 옛 Precedence 호환이다.
- Tail Drop은 TCP 연결을 한꺼번에 흔들고, RED·WRED는 미리 무작위로 버려 이를 막는다.
- 초과 트래픽을 버리면 폴리싱, 늦추면 셰이핑이다.
- IntServ는 정확하지만 확장이 안 되고, DiffServ는 대략적이지만 확장된다.
관련 노트: 전송 계층: 포트, TCP, UDP, VoIP 전화망, 가입자망과 광역망(MPLS), 네트워크 계층 프로토콜