웹사이트 검색

Trickle을 사용하여 Linux 시스템의 응용 프로그램에서 사용되는 네트워크 대역폭을 제한하는 방법


하나의 애플리케이션이 전체 네트워크 대역폭을 지배하는 상황에 직면한 적이 있습니까? 하나의 애플리케이션이 모든 트래픽을 소비하는 상황에 처해본 적이 있다면 세류 대역폭 셰이퍼 애플리케이션의 역할을 높이 평가할 것입니다.

시스템 관리자이거나 Linux 사용자라면 네트워크 대역폭이 소모되지 않도록 애플리케이션의 업로드 및 다운로드 속도를 제어하는 방법을 배워야 합니다. 단일 응용 프로그램으로.

트리클이란 무엇입니까?

Trickle은 애플리케이션 중 하나가 사용 가능한 대역폭의 전부(또는 대부분)를 독차지하는 것을 방지하기 위해 애플리케이션의 업로드 및 다운로드 속도를 관리할 수 있는 네트워크 대역폭 조정 도구입니다.

간단히 말해서, 트리클을 사용하면 클라이언트-서버 환경에서 대역폭 형성의 전형적인 예인 사용자별 제어와 달리 애플리케이션별로 네트워크 트래픽 속도를 제어할 수 있으며 아마도 우리가 더 많이 사용하는 설정일 것입니다. 익숙하다.

트리클은 어떻게 작동하나요?

또한, 작은 물방울은 애플리케이션별로 우선순위를 정의하는 데 도움이 되므로 전체 시스템에 대해 전체 제한이 설정되어 있어도 우선순위 앱이 자동으로 더 많은 대역폭을 확보하게 됩니다.

이 작업을 수행하기 위해 트리클은 TCP 연결을 사용하여 소켓에서 데이터를 보내고 받는 방식에 대한 트래픽 제한을 설정합니다. 데이터 전송 속도 외에, 트리클은 특정 순간에 형성되는 프로세스의 동작을 어떤 식으로든 수정하지 않는다는 점에 유의해야 합니다.

Trickle이 할 수 없는 일은 무엇인가요?

말하자면, 유일한 제한은 Trickle이 동적 링크 및 로드를 사용하여 배치하기 때문에 정적으로 링크된 애플리케이션이나 SUID 또는 SGID 비트가 설정된 바이너리에서는 작동하지 않는다는 것입니다. 형성된 프로세스와 관련 네트워크 소켓 사이에 존재합니다. 그런 다음 Trickle은 이 두 소프트웨어 구성 요소 간의 프록시 역할을 합니다.

Trickle은 실행하기 위해 슈퍼유저 권한이 필요하지 않으므로 사용자는 자신의 트래픽 제한을 설정할 수 있습니다. 이는 바람직하지 않을 수 있으므로 시스템 사용자가 초과할 수 없는 전체 제한을 설정하는 방법을 살펴보겠습니다. 즉, 사용자는 여전히 트래픽 속도를 관리할 수 있지만 항상 시스템 관리자가 설정한 경계 내에 있습니다.

테스트 환경

이 기사에서는 Linux 서버의 애플리케이션이 사용하는 네트워크 대역폭을 조금씩 제한하는 방법을 설명합니다.

필요한 트래픽을 생성하기 위해 클라이언트(CentOS)에서 ncftpputncftpget(두 도구 모두 ncftp를 설치하여 사용 가능)을 사용합니다. 서버 – dev1: 192.168.0.17) 및 서버의 vsftpd(Debian – dev2: 192.168.0.15 ) 데모용입니다. RedHat, Fedora 및 Ubuntu 기반 시스템에서도 동일한 지침이 적용됩니다.

Linux에 ncftp 및 vsftpd 설치

1. RHEL/CentOS 8/7의 경우 EPEL 저장소를 활성화합니다. Enterprise Linux용 추가 패키지(EPEL)는 Fedora 프로젝트에서 관리하는 고품질 무료 오픈 소스 소프트웨어 저장소이며 Red Hat Enterprise와 같은 파생 제품과 100% 호환됩니다. LinuxCentOS. tricklencftp 모두 이 저장소에서 사용할 수 있습니다.

2. 다음과 같이 ncftp를 설치합니다.

yum update && sudo yum install ncftp		[On RedHat based systems]
aptitude update && aptitude install ncftp	[On Debian based systems]	

3. 별도의 서버에 FTP 서버를 설정하세요. FTP는 본질적으로 안전하지 않지만 파일 업로드 또는 다운로드 시 보안이 필요하지 않은 경우에는 여전히 널리 사용됩니다.

이 글에서는 이 기능을 사용하여 물방울의 양을 설명하고 클라이언트의 stdout 전송 속도를 보여주기 때문에 이 기능을 다른 용도로 사용해야 할지 말아야 할지에 대한 논의는 생략하겠습니다. 날짜와 시간.

yum update && yum install vsftpd 		[On RedHat based systems]
apt update && apt install vsftpd 	[On Debian based systems]

이제 FTP 서버의 /etc/vsftpd/vsftpd.conf 파일을 다음과 같이 편집합니다.

sudo nano /etc/vsftpd/vsftpd.conf
OR
sudo /etc/vsftpd.conf

다음과 같이 변경하십시오.

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

그 후, 현재 세션에 대해 vsftpd를 시작하고 향후 부팅 시 자동 시작을 위해 이를 활성화해야 합니다:

systemctl start vsftpd 		[For systemd-based systems]
systemctl enable vsftpd
service vsftpd start 			[For init-based systems]
chkconfig vsftpd on

4. 원격 액세스를 위해 SSH 키를 사용하여 CentOS/RHEL 드롭릿에서 FTP 서버를 설정하기로 선택한 경우 적절한 디렉터리와 비밀번호로 보호된 사용자 계정이 필요합니다. 루트의 홈 디렉터리 외부에서 원하는 콘텐츠를 업로드하고 다운로드하기 위한 파일 권한입니다.

그런 다음 브라우저에 다음 URL을 입력하여 홈 디렉터리를 탐색할 수 있습니다. FTP 서버의 유효한 사용자 계정과 비밀번호를 묻는 로그인 창이 팝업됩니다.

ftp://192.168.0.15

인증이 성공하면 홈 디렉터리의 내용이 표시됩니다. 이 자습서의 뒷부분에서는 해당 페이지를 새로 고쳐 이전 단계에서 업로드된 파일을 표시할 수 있습니다.

Linux에 Trickle을 설치하는 방법

이제 yum 또는 apt를 통해 트리클을 설치하세요.

성공적인 설치를 위해서는 도구 자체를 설치하기 전에 현재 설치된 패키지가 최신 상태인지 확인하는 것이 좋습니다(yum update 사용).

yum -y update && yum install trickle 		        [On RedHat based systems]
apt -y update && apt install trickle 	[On Debian based systems]

원하는 바이너리에서 물방울이 작동하는지 확인하십시오. 앞서 설명했듯이, 트리클은 동적 또는 공유 라이브러리를 사용하는 바이너리에서만 작동합니다. 특정 애플리케이션에서 이 도구를 사용할 수 있는지 확인하려면 잘 알려진 ldd 유틸리티를 사용할 수 있습니다. 여기서 ldd는 목록 동적 종속성을 나타냅니다.

특히 소켓을 통한 통신과 관련된 시스템 호출을 정의하는 라이브러리가 바로 이 라이브러리이기 때문에 특정 프로그램의 동적 종속성 목록에서 glibc(GNU C 라이브러리)가 있는지 찾아보겠습니다.

주어진 바이너리에 대해 다음 명령을 실행하여 대역폭을 형성하는 데 세류를 사용할 수 있는지 확인하십시오.

ldd $(which [binary]) | grep libc.so

예를 들어,

ldd $(which ncftp) | grep libc.so

출력은 다음과 같습니다.

libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

출력에서 괄호 사이의 문자열은 시스템마다 변경될 수 있으며 심지어 동일한 명령의 후속 실행 간에도 변경될 수 있습니다. 이는 실제 메모리에 있는 라이브러리의 로드 주소를 나타내기 때문입니다.

위 명령이 결과를 반환하지 않으면 실행된 바이너리가 libc를 사용하지 않는다는 의미이므로 이 경우에는 트릭클을 대역폭 셰이퍼로 사용할 수 없습니다.

Linux에서 Trickle을 사용하는 방법 알아보기

트릭클의 가장 기본적인 사용법은 독립형 모드입니다. 이 접근 방식을 사용하면, 트리클은 특정 애플리케이션의 다운로드 및 업로드 속도를 명시적으로 정의하는 데 사용됩니다. 앞서 설명했듯이 간결함을 위해 다운로드 및 업로드 테스트에 동일한 애플리케이션을 사용하겠습니다.

독립형 모드에서 Trickle 실행

트리클을 사용할 때와 사용하지 않을 때의 다운로드 및 업로드 속도를 비교해 보겠습니다. -d 옵션은 다운로드 속도를 KB/s 단위로 나타내는 반면, -u 플래그는 Trickle에게 업로드 속도를 동일한 단위로 제한하도록 지시합니다. 또한, 트리클이 독립형 모드에서 실행되어야 함을 지정하는 -s 플래그를 사용할 것입니다.

독립형 모드에서 Trickle을 실행하는 기본 구문은 다음과 같습니다.

trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]

다음 예를 직접 수행하려면 내 클라이언트 컴퓨터(192.168.0.17)에 tricklencftp가 설치되어 있는지 확인하세요. 사례).

예 1: 물방울이 있거나 없는 2.8MB PDF 파일 업로드.

다음 테스트에서는 무료로 배포 가능한 Linux 기초 PDF 파일(여기에서 사용 가능)을 사용하고 있습니다.

처음에는 다음 명령을 사용하여 이 파일을 현재 작업 디렉터리에 다운로드할 수 있습니다.

wget http://linux-training.be/files/books/LinuxFun.pdf 

세류 없이 FTP 서버에 파일을 업로드하는 구문은 다음과 같습니다.

ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename 

여기서 /remote_directory는 사용자 이름의 홈을 기준으로 한 업로드 디렉터리의 경로이고 local-filename은 현재 작업 디렉터리에 있는 파일입니다.

구체적으로, 세류가 없으면 52.02MB/s의 최대 업로드 속도를 얻습니다(이것은 실제 평균 업로드 속도가 아니라 즉시 시작하는 최대 속도입니다). 파일은 거의 즉시 업로드됩니다.

ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf 

출력 :

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

세류를 사용하면 업로드 전송 속도를 5KB/s로 제한합니다. 두 번째로 파일을 업로드하기 전에 대상 디렉터리에서 해당 파일을 삭제해야 합니다. 그렇지 않으면 ncftp는 대상 디렉토리의 파일이 업로드하려는 파일과 동일하다는 것을 알려주고 전송을 수행하지 않습니다.

rm /absolute/path/to/destination/directory/LinuxFun.pdf 

그 다음에 :

trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf 

출력 :

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

위의 예에서는 평균 업로드 속도가 ~5KB/s로 떨어진 것을 볼 수 있습니다.

예 2: 물방울이 있거나 없는 동일한 2.8MB PDF 파일 다운로드

먼저 원본 소스 디렉터리에서 PDF를 삭제해야 합니다.

rm /absolute/path/to/source/directory/LinuxFun.pdf 

다음과 같은 경우에는 클라이언트 시스템의 현재 디렉터리에 원격 파일이 다운로드됩니다. 이 사실은 FTP 서버의 IP 주소 뒤에 나타나는 마침표('.')로 표시됩니다.

물방울 없이:

ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf 

출력 :

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

세류를 사용하면 다운로드 속도를 20KB/s로 제한합니다.

trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf 

출력 :

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

감독된 [관리되지 않는] 모드에서 Trickle 실행

Trickle은 /etc/trickled.conf에 정의된 일련의 매개변수에 따라 비관리 모드에서도 실행될 수 있습니다. 이 파일은 Trickle(데몬)이 Trickle을 작동하고 관리하는 방법을 정의합니다.

또한 모든 응용 프로그램에서 전체적으로 사용할 전역 설정을 지정하려면 trickled 명령을 사용해야 합니다. 이 명령은 데몬을 실행하고 매번 제한을 지정할 필요 없이 세류를 통해 실행되는 모든 응용 프로그램에서 공유할 다운로드 및 업로드 제한을 정의할 수 있습니다.

예를 들어 다음을 실행합니다.

trickled -d 50 -u 10

조금씩 실행되는 모든 애플리케이션의 다운로드 및 업로드 속도는 각각 30KB/s10KB/s로 제한됩니다.

Trickled가 실행 중인지, 어떤 인수를 사용하여 언제든지 확인할 수 있습니다.

ps -ef | grep trickled | grep -v grep

출력 :

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10
예 3: 트리클 유무에 관계없이 19MB mp4 파일을 FTP 서버에 업로드합니다.

이 예에서는 이 링크에서 다운로드할 수 있는 무료 배포 가능한 "He is the gift" 비디오를 사용합니다.

처음에는 다음 명령을 사용하여 이 파일을 현재 작업 디렉터리에 다운로드합니다.

wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

먼저 위에 나열된 명령을 사용하여 Trickled 데몬을 시작합니다.

trickled -d 30 -u 10

물방울 없이:

ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력 :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   36.31 MB/s

물방울이 있는 경우:

trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력 :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB	9.51 kB/s

위 출력에서 볼 수 있듯이 업로드 전송 속도는 ~10KB/s로 떨어졌습니다.

예 4: 물방울이 있거나 없는 동일한 비디오 다운로드

예 2에서와 같이 현재 작업 디렉터리에 파일을 다운로드합니다.

물방울 없이:

ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력 :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB  108.34 MB/s

물방울이 있는 경우:

trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

출력 :

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   29.28 kB/s

이는 이전에 설정된 다운로드 제한(30KB/s)에 따른 것입니다.

참고: 데몬이 시작된 후에는 트리클을 사용하는 각 애플리케이션에 대해 개별 제한을 설정할 필요가 없습니다.

앞서 언급했듯이, Trickled.conf를 통해 Trickle의 대역폭 형성을 추가로 사용자 정의할 수 있습니다. 이 파일의 일반적인 섹션은 다음으로 구성됩니다.

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

어디,

  1. [서비스]는 대역폭 사용량을 조정하려는 애플리케이션의 이름을 나타냅니다.
  2. 우선순위를 사용하면 서비스가 다른 서비스에 비해 더 높은 우선순위를 갖도록 지정할 수 있으므로 단일 애플리케이션이 데몬이 관리하는 모든 대역폭을 독차지하는 것을 허용하지 않습니다. 숫자가 낮을수록 [서비스]에 더 많은 대역폭이 할당됩니다.
  3. 시간 평활화 [초]: 애플리케이션이 데이터를 전송 및/또는 수신할 수 있도록 시도하는 시간 간격을 정의합니다. 더 작은 값(0.1~1초 범위)은 대화형 애플리케이션에 이상적이며 더 연속적인(부드러운) 세션을 제공하는 반면, 약간 큰 값(1~10초)은 대량 전송이 필요한 애플리케이션에 더 좋습니다. 값을 지정하지 않으면 기본값(5초)이 사용됩니다.
  4. 길이 평활화 [KB]: 개념은 시간 평활화와 동일하지만 I/O 작업의 길이를 기준으로 합니다. 값을 지정하지 않으면 기본값(10KB)이 사용됩니다.

스무딩 값을 변경하면 고정 값 대신 간격 내의 전송 속도를 사용하여 [서비스]에서 지정한 애플리케이션으로 변환됩니다. 불행하게도 이 간격의 하한과 상한은 주로 각 특정 사례 시나리오에 따라 달라지므로 이를 계산하는 공식은 없습니다.

다음은 CentOS 7 클라이언트(192.168.0.17)의 trickled.conf 샘플 파일입니다.

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

이 설정을 사용하면 Trickled는 FTP 전송보다 SSH 연결을 우선시합니다. SSH와 같은 대화형 프로세스는 더 작은 시간 평활화 값을 사용하는 반면 대량 데이터 전송(FTP)을 수행하는 서비스는 더 큰 값을 사용합니다.

스무딩 값은 이전 예의 다운로드 및 업로드 속도가 Trickled 데몬이 지정한 정확한 값과 일치하지 않지만 이에 가까운 간격으로 이동하는 역할을 합니다.

결론

이 기사에서 우리는 Fedora 기반 배포판과 Debian/파생 제품에서 세류를 사용하여 응용 프로그램이 사용하는 대역폭을 제한하는 방법을 살펴보았습니다. 다른 가능한 사용 사례에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • 예를 들어, wget 또는 토렌트 클라이언트와 같은 시스템 유틸리티를 통해 다운로드 속도를 제한합니다.
  • 패키지 관리 시스템인 'yum'(또는 Debian 기반 시스템의 경우 'aptitude')을 통해 시스템을 업데이트할 수 있는 속도를 제한합니다.
  • 서버가 프록시나 방화벽 뒤에 있는 경우(또는 프록시나 방화벽 자체인 경우), 트리클을 사용하여 다운로드 및 업로드 또는 클라이언트나 외부와의 통신 속도에 대한 제한을 설정할 수 있습니다.

질문과 의견을 환영합니다. 아래 양식을 사용하여 자유롭게 보내주세요.