소개
이 랩에서는 Linux 에서 네트워크 서비스 품질 (QoS, Quality of Service) 정책이 활성화되어 있는지 확인하는 방법을 배우게 됩니다. 강력한 tc 명령어를 사용하여 네트워크 인터페이스에 구성된 QoS 디시플린 (discipline) 과 클래스를 나열하고 검사할 것입니다.
구체적으로, 먼저 tc qdisc show를 사용하여 활성 큐잉 디시플린을 나열하고, 네트워크 트래픽을 관리하는 역할을 이해할 것입니다. 그런 다음, 다양한 유형의 트래픽을 분류하고 우선 순위를 지정하는 데 사용되는 tc class를 사용하여 QoS 클래스를 확인하는 방법을 탐구할 것입니다. 마지막으로, /etc/network의 네트워크 구성 파일을 검사하여 QoS 정책이 어떻게 영구적으로 구성될 수 있는지 이해하는 방법을 배우게 됩니다.
tc qdisc 로 QoS 디시플린 나열
이 단계에서는 tc 명령어를 사용하여 서비스 품질 (QoS, Quality of Service) 디시플린을 나열하는 방법을 배우게 됩니다. QoS 는 패킷 손실, 지연 시간 및 지터 (jitter) 를 줄이기 위해 네트워크 트래픽을 관리하는 기술 집합입니다. tc 명령어는 Linux 에서 트래픽 제어를 구성하기 위한 강력한 도구입니다.
tc qdisc 명령어는 큐잉 디시플린을 관리하는 데 사용됩니다. 큐잉 디시플린 (qdisc) 은 패킷의 스케줄링을 결정하는 Linux 커널의 일부입니다.
현재 구성된 QoS 디시플린을 네트워크 인터페이스에서 나열하려면 터미널을 열고 다음 명령을 입력하십시오.
tc qdisc show
Enter 키를 누르십시오.
다음과 유사한 출력을 볼 수 있습니다.
qdisc noqueue 0: dev lo root refcnt 2
qdisc fq_codel 0: dev eth0 root refcnt 2 limit 10240p flows 1024 quantum 1514 target 5ms interval 100ms memory_limit 32Mb ecn
출력을 자세히 살펴보겠습니다.
qdisc: 이 줄이 큐잉 디시플린을 설명함을 나타냅니다.noqueue 0: dev lo: 루프백 인터페이스 (lo) 에 대한 qdisc 를 보여줍니다.noqueue는 루프백 인터페이스의 트래픽은 일반적으로 셰이핑 (shaping) 의 대상이 아니므로 큐잉이 발생하지 않음을 의미합니다.fq_codel 0: dev eth0:eth0네트워크 인터페이스에 대한 qdisc 를 보여줍니다.fq_codel은 Fair Queueing (FQ, 공정 큐잉) 과 Controlled Delay (CoDel, 제어된 지연) 을 결합한 특정 유형의 qdisc 입니다.root: 이것이 장치의 루트 qdisc 임을 나타냅니다.- 나머지 매개변수 (
refcnt,limit,flows등) 는fq_codelqdisc 에 특화되어 있으며 동작을 제어합니다.
LabEx 환경의 네트워크 인터페이스 기본 구성에 따라 표시되는 출력은 다를 수 있습니다. 중요한 부분은 tc qdisc show가 활성 큐잉 디시플린을 나열한다는 것을 이해하는 것입니다.
이제 eth0과 같은 특정 인터페이스에 대한 qdisc 를 나열해 보십시오.
tc qdisc show dev eth0
Enter 키를 누르십시오.
이 명령어는 eth0 인터페이스에 구성된 qdisc 만 표시합니다.
tc qdisc show의 출력을 이해하는 것은 tc를 사용하여 네트워크 트래픽을 관리하는 첫 번째 단계입니다.
다음 단계로 진행하려면 계속을 클릭하십시오.
tc class 로 QoS 클래스 확인
이전 단계에서는 큐잉 디시플린 (qdisc) 에 대해 배웠습니다. 이제 tc class 명령어를 사용하여 QoS 클래스를 살펴보겠습니다.
qdisc 가 인터페이스에서 전반적인 스케줄링 동작을 정의하는 반면, 클래스는 특정 qdisc (예: HTB 또는 CBQ) 내에서 계층적 구조를 만들고 다양한 유형의 트래픽에 서로 다른 규칙을 적용하는 데 사용됩니다. 클래스를 qdisc 내의 범주 또는 하위 구분으로 생각하십시오.
현재 구성된 QoS 클래스를 나열하려면 네트워크 인터페이스와 상위 qdisc 또는 클래스를 지정해야 합니다. eth0의 기본 fq_codel qdisc 는 다른 일부 qdisc 와 동일한 방식으로 클래스 계층 구조를 사용하지 않으므로, tc class show dev eth0을 직접 실행하면 처음에 클래스가 표시되지 않을 수 있습니다.
어쨌든 출력을 확인하기 위해 명령을 시도해 보겠습니다.
tc class show dev eth0
Enter 키를 누르십시오.
다음과 유사하게 출력이 없거나 클래스가 정의되지 않았음을 나타내는 출력을 볼 수 있습니다.
이것은 fq_codel이 클래스 없는 qdisc 이기 때문에 예상되는 결과입니다. 클래스 없는 qdisc 는 트래픽을 서로 다른 그룹으로 분류할 필요 없이 작업을 수행합니다.
그러나 HTB (Hierarchical Token Bucket, 계층적 토큰 버킷) 또는 CBQ (Class Based Queueing, 클래스 기반 큐잉) 와 같은 qdisc 가 구성된 경우, 해당 qdisc 아래에 정의된 클래스 목록이 표시되어 대역폭 제한, 우선 순위 등과 같은 매개변수를 보여줍니다.
예를 들어, HTB가 eth0에 구성된 경우 출력은 다음과 유사할 수 있습니다 (이것은 예시일 뿐이며, 현재 환경에서는 이 출력을 볼 수 없습니다).
class htb 1:1 root prio 0 rate 100Mbit ceil 100Mbit burst 1600b cburst 1600b
class htb 1:10 parent 1:1 prio 1 rate 50Mbit ceil 80Mbit burst 1600b cburst 1600b
class htb 1:20 parent 1:1 prio 2 rate 20Mbit ceil 30Mbit burst 1600b cburst 1600b
이 가상 예제에서:
class htb: HTB 클래스를 나타냅니다.1:1: 루트 클래스에 대한 핸들입니다.1:10,1:20: 루트 클래스1:1아래의 자식 클래스에 대한 핸들입니다.rate,ceil: 클래스에 대한 보장된 대역폭과 최대 대역폭을 정의합니다.prio: 클래스의 우선 순위를 정의합니다.
기본 구성에서는 클래스가 표시되지 않지만, 클래스 기반 qdisc 가 구성된 경우 tc class show 명령어를 이해하는 것이 중요합니다.
다음 단계로 이동하려면 계속을 클릭하십시오.
/etc/network 에서 QoS 설정 검토
이전 단계에서는 tc 명령어를 사용하여 현재 활성 QoS 구성을 확인했습니다. tc가 런타임 상태를 보여주는 반면, 구성 파일은 시스템이 시작되거나 네트워크 인터페이스가 시작될 때 이러한 설정이 어떻게 적용되는지를 결정하는 경우가 많습니다.
Ubuntu 와 같은 Debian 기반 시스템에서 네트워크 인터페이스 구성은 종종 /etc/network/interfaces 파일과 /etc/network/interfaces.d/ 디렉토리 내의 파일에서 관리됩니다. 이러한 파일에는 인터페이스가 구성될 때 실행될 명령이 포함될 수 있으며, QoS 를 설정하기 위한 tc 명령도 포함될 수 있습니다.
주요 네트워크 구성 파일을 검사해 보겠습니다. 터미널을 열고 cat 명령어를 사용하여 /etc/network/interfaces의 내용을 확인합니다.
cat /etc/network/interfaces
Enter 키를 누르십시오.
기본 네트워크 인터페이스 구성을 볼 수 있습니다. 이 LabEx 환경에서 출력은 다음과 유사할 수 있습니다.
## interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
이 파일은 루프백 인터페이스 (lo) 와 IP 주소를 얻기 위해 DHCP 를 사용하도록 구성된 기본 네트워크 인터페이스 (eth0) 를 정의합니다.
QoS 구성은 복잡한 설정의 경우 일반적으로 /etc/network/interfaces에 직접 배치되지 않습니다. 대신, 인터페이스가 시작될 때 실행되는 별도의 스크립트 또는 구성 스니펫에 포함되는 경우가 많습니다. 이러한 스니펫은 /etc/network/if-up.d/ 디렉토리에 있을 수 있습니다. 이 디렉토리의 스크립트는 네트워크 인터페이스가 시작된 후에 실행됩니다.
/etc/network/if-up.d/ 디렉토리의 파일을 나열하여 QoS 또는 트래픽 제어와 관련된 스크립트가 있는지 확인해 보겠습니다.
ls /etc/network/if-up.d/
Enter 키를 누르십시오.
출력은 해당 디렉토리에 있는 파일을 보여줍니다. 네트워크 구성과 관련된 다양한 스크립트가 표시될 수 있지만, 이 기본 환경에서는 복잡한 QoS 설정을 위한 스크립트는 없을 것입니다.
## Example output (may vary)
avahi-autoipd ethtool mountnfs ntp openssh-server resolvconf upstart
부팅 시 tc 규칙을 적용하도록 설계된 스크립트가 있는 경우 일반적으로 여기에 있습니다. 예를 들어, 이 디렉토리의 qos-setup이라는 스크립트에는 qdisc 및 클래스를 구성하기 위한 tc 명령이 포함될 수 있습니다.
이 기본 환경에서는 이러한 표준 위치에서 명시적인 QoS 구성을 찾지 못했지만, QoS 가 Linux 시스템에서 영구적으로 구성되는 방식을 이해하려면 어디를 찾아야 하는지 (/etc/network/interfaces, /etc/network/interfaces.d/, 및 /etc/network/if-up.d/) 아는 것이 필수적입니다.
이 랩을 완료하려면 계속을 클릭하십시오.
요약
이 랩에서는 Linux 에서 네트워크 QoS 정책이 활성 상태인지 확인하는 방법을 배웠습니다. 먼저 tc qdisc show 명령어를 사용하여 네트워크 인터페이스에서 활성 큐잉 디시플린 (queueing disciplines, qdisc) 을 나열하여 qdisc 가 패킷 스케줄링을 결정하고 QoS 구성의 핵심 부분임을 이해했습니다. 출력을 검토하여 qdisc 유형과 관련 네트워크 인터페이스를 식별했으며, tc qdisc show dev <interface>를 사용하여 특정 인터페이스에 대한 qdisc 를 나열하는 방법도 배웠습니다.



