리눅스 서버 최적화 테크닉 키우기 4
페이지 정보
작성자 MintState 댓글 0건 조회 14,477회 작성일 08-10-30 15:23본문
리눅스 서버 최적화 테크닉 키우기 4
인터넷 서버와 라우터로서 리눅스 최적화 (2)
리눅스는 서버뿐만 아니라 라우터와 같은 네트워크 장비로도 사용할 수 있다.
리눅스를 라우터로 활용하는 연구는 일찍부터 진행돼 왔고 현재는 커널 설정과
최적화를 통해 전용 라우터와 같은 라우팅과 방화벽 기능을 수행할 수 있다.
이상호 성균관대학교 산업용 네트워크 연구실
연재 순서
1회(2000. 07): 리눅스 커널 이해와 최적화를 위한 컴파일러 설정
2회(2000. 08): 커널 설정시 선택 사항과 애플리케이션 최적화
3회(2000. 09): 인터넷 서버와 라우터로서 리눅스 최적화 방법(1)
4회(2000. 10): 인터넷 서버와 라우터로서 리눅스 최적화 방법(2)
--------------------------------------------------------------------------------
지난호에 논의했던 내용은 주로 리눅스가 서버로 동작할 때의 최적화에 관한
것이었다. 리눅스는 일반적인 컴퓨터 사용자를 위한 기능 외에 라우터와 같은
네트워크 장치를 위한 기능이 포함돼 있다. 이번호에는 네트워크 부속 장치로
리눅스를 활용하는 것에 대해 다룬다.
리눅스는 여러 분야에 응용돼 왔지만 네트워크 장치 분야에서도 많이 활용돼 왔다. 그
중 대부분의 기술이 라우터에 기반한다. 리눅스 라우터 구성 관련 기술을 모두
언급하고 싶지만 라우터라는 장치는 방대한 네트워크 기술을 포함하므로 지면상 몇몇
부분만 설명하고 나머지는 참고 자료를 소개하고자 한다. 우선 간략하게나마
네트워크의 구성과 이를 위한 장치에 대해 언급한 후 리눅스를 네트워크 장치로
활용하는 방법과 리눅스에서 지원되는 기술에 대해 알아본다.
네트워크 구성
계층적 구조
일반적으로 컴퓨터나 기타 장치에서 네트워크 기능을 7단계로 나누는데 이를 OSI(Open
System Interconnection) 7 레이어라고 부른다. 즉 네트워크의 기능을 7계층으로 나눈
것인데, 실제로 우리가 가장 많이 사용하는 TCP/IP는 4계층으로 구분되며 간단하게
다음과 같이 정리된다.
실제로 OSI 7 레이어를 정확하게 구현한 시스템은 거의 없으며 우리가 가장 많이
사용하는 TCP/IP는 4계층으로 이뤄졌다. 가장 상위 계층부터 응용 계층, 전송 계층,
네트워크 계층, 링크 계층으로 나누는데 응용 계층은 OSI 7 레이어의 응용 계층과
표현 계층을 하나로 만든 형태이며 전송 계층은 OSI 7 레이어의 세션 계층과 전송
계층을 포함한다. 그리고 링크 계층은 데이터링크 계층과 물리 계층을 포함한다. OSI
7 레이어가 실제로 정확하게 구현되지 못한 이유는 TCP/IP가 먼저 활용돼 왔으며 OSI7
레이어가 너무 복잡하게 나뉘어 있기 때문이다. 여기서는 TCP/IP를 기준으로 설명해
나가겠다.
네트워크 구성 장비
가장 간단한 네트워크의 구성은 호스트와 라우터를 중심으로 생각할 수 있다. 만약
이더넷을 사용하는 호스트의 집합이 토큰링(Token-Ring)이라는 다른 형식의
네트워크로 연결돼 있는 경우 이들의 연결에는 라우터라는 장비가 사용된다. 라우터가
이더넷 중심의 네트워크와 토큰링 네트워크를 연결하면 이는 서로 다른 링크 계층의
연결을 의미한다. 여기에서 알 수 있듯이 라우터라는 장비는 TCP/IP에서 링크 계층과
네트워크 계층을 주로 포함함을 알 수 있다. 라우터는 리눅스나 다른 유닉스에 기반한
호스트를 이용해 구성하기도 하고 고속의 전용 장비를 개발해 사용하기도 한다. 현재
가장 높은 주가를 올리고 있는 시스코(CISCO, www.cisco.com)도 주로 전용 라우터를
생산하는 회사다.
네트워크를 구성하는 장치로 호스트와 라우터 이외에 다른 장치가 존재하는데
스위치와 허브가 있다. 라우터는 IP 주소를 기준으로 패킷을 어디로 보내야 할지를
결정하는 반면 스위치는 네트워크 인터페이스 카드의 어드레스인 MAC 어드레스를
기준으로 패킷의 경로를 결정한다. OSI7 레이어를 기준으로 스위치는 데이터링크
계층의 정보만을 이용하며 라우터는 네트워크 계층까지의 정보를 이용한다. 스위치는
서로 다른 형태의 네트워크를 연결하지 않고 같은 형태의 네트워크를 연결한다.
허브는 단순히 특정 포트에 연결된 호스트의 패킷을 다른 모든 포트로 복사하여
전달한다. 그러면 실제 리눅스로 어떻게 라우터를 구성하는지 대략적으로 살펴보기로
한다.
리눅스 라우터의 구성
앞서 살펴봤듯이 라우터는 네트워크 계층을 포함하는데 일반적인 호스트에서는 모든
계층을 가지고 있으므로 이들 계층 중 네트워크 계층 관련 설정을 바꿔주면 라우터로
동작할 수 있다. 보통 인터넷 접속을 위한 라우터를 구성하는데 일반적인 활용은 크게
다음과 같이 이뤄지고 있다.
직렬 포트(Serial port)를 통한 인터넷의 접속
내부에 별도의 네트워크 구성
모두 같은 내용일 수도 있겠지만 일반적으로 고려하는 상황을 기준으로 나눈 것이다.
직렬 포트를 통한 인터넷 접속은 외부로 접근할 수 있는 회선과 호스트가 하나이고
내부에 다른 호스트가 존재할 경우 사용해 왔던 방식이다.
직렬 포트로 호스트의 데이터를 외부로 전달하는 라우터는 최소 하나의 직렬 포트와
네트워크 인터페이스 카드를 운영한다. 이 때 직렬 포트의 데이터는 PPP(Point to
Point Protocol) 또는 SLIP(Serial Line IP)으로 제어해 전달한다.
별도의 네트워크 구성은 내부에 가상의 사설 네트워크를 구축할 경우 사용하는데,
직렬 포트를 통한 인터넷 접속 또한 이 부분에 포함된다. 내부의 가상 네트워크
구성은 외부에서는 사용하지 않는 IP 주소를 내부에서 사용하며, 하나의 공인된 IP
주소를 이용하여 여러 대의 호스트가 인터넷에 접속하게 한다. 라우터는 주소를
변환할 수 있는 NAT(Network Address Translation) 기능을 포함한다. 이 경우
라우터는 라우팅 테이블을 참조해 내부의 패킷이 외부로 보내줘야 하는지를 결정하고
외부에서 온 패킷을 내부로 전달할지를 결정한다. 다음 그림에서 허브는 각
호스트에서 보내는 패킷을 라우터를 포함한 다른 모든 호스트에게 전달하는 역할을
한다.
네트워크에 대한 제반 지식이 없는 독자를 위해 간단한 시나리오를 구성해 보았다.
호스트 A는 www.yahoo.com에 접속 요청을 위한 패킷 A를 발생시킨다.
허브는 패킷 A가 특정 포트에 도착하면 다른 모든 포트로 패킷 A를 전달한다.
호스트 B와 리눅스 라우터는 패킷 A를 허브로부터 받게 된다. 호스트 B는 자신에게
전달되는 패킷이 아니므로 이를 무시하고 리눅스 라우터는 패킷 A가 외부로 전달돼야
함을 인식하고 패킷 A를 외부 회선(LAN 또는 WAN)으로 전달한다.
위의 시나리오를 살펴보면 라우터와 허브의 동작 차이를 이해할 수 있을 것이다. 그럼
이제 라우터를 구성하기 위해서는 여러 개의 네트워크 인터페이스 장치를 운영해야
하는 것을 알 수 있다. 라우터는 네트워크와 네트워크를 연결하는 장치이므로
연결하는 네트워크마다 별도의 네트워크 인터페이스와 이에 따른 별도의 IP 주소를
가질 수 있다.
직렬 포트로 호스트의 데이터를 외부로 전달하는 라우터는 최소한 하나의 직렬 포트와
네트워크 인터페이스 카드를 운영한다. 리눅스 커널은 ATM, T1/E1, T3(DS3), 이더넷,
프레임 릴레이(Frame-Relay), 토큰링 등의 대다수의 WAN과 LAN 인터페이스 카드를
지원한다. 이들 인터페이스 카드를 사용하기 위해서는 커널 설정(make config 또는
make xconfig)시, 이들의 사용을 선택해야 한다. <화면 1>은 make xconfig의
주화면으로 여러 네트워크 장치를 선택할 수 있는 문항이 있다.
리눅스 라우터에 적용되는 기술
이제부터 리눅스에서 제공되는 라우터 관련 기술을 조금씩 살펴보기로 한다. 지면상
모든 것을 자세히 설명하기 어려우니 나머지 부분에서는 참고 자료를 살펴보기
바란다.
라우팅 테이블
먼저 라우터로서 가장 중요한 것은 얼마나 올바르게 경로를 설정하여 패킷을 전달하는
데 있다. 이는 라우팅 테이블(Routing Table)을 참조하여 이루어지는데 라우팅
테이블은 직접 확인할 수 있다. 라우팅 테이블은 ‘/proc/net/route’로 저장돼 있고
일정 시간마다 업데이트된다. 텍스트 형식으로 되어 있으므로 직접 확인해 보면서
내용을 이해하기 바란다. 그리고 보통 네트워크 인터페이스 설정 명령어인 ifconfig은
실제로 라우팅 테이블을 변경시키는 명령어이므로 이에 대해 알아야 한다.
방화벽
방화벽(Firewall)은 외부로부터 내부의 네트워크 또는 자체 호스트의 시스템에 접근할
수 있는 범위를 제한하는 방법이다. 보통 애플리케이션 또는 포트 어드레스를
구분하여 접근을 막으며 패킷 필터링 기능을 포함한다. 기본적으로 리눅스는 커널
설정에서 선택, 사용할 수 있으며 필요한 경우 방화벽 운영의 정책까지 선택할 수
있다. 리눅스를 이용하여 방화벽 기능이 있는 라우터를 구성하고자 한다면
‘Firewall-HowTo’ 문서를 참고하기 바란다.
리눅스 IP 매스커레이드
IP 매스커레이드는 리눅스의 네트워킹 기능으로, 상용 방화벽이나 네트워크
라우터에서 흔히 볼 수 있는 1:n 방식의 NAT와 유사하며 방화벽 기능에 포함되는
기술이라 할 수 있다. 예를 들어, 어떤 리눅스 호스트가 PPP, 이더넷 등의 방법으로
인터넷에 연결돼 있다면, 이 리눅스 박스에 연결된(PPP, 이더넷 등) 내부의
컴퓨터들도 IP 매스커레이드를 통해 인터넷에 연결할 수 있다. IP 매스커레이드를
통하면, 내부의 컴퓨터들이 공식적으로 할당된 IP 주소가 없더라도 인터넷에 접속할
수 있다. 즉, 인터넷에 있는 다른 컴퓨터들에게는, IP 매스커레이드를 통해 바깥으로
나가는 정보는 IP 매스커레이드 기능을 가진 리눅스 라우터에서 보내는 것처럼
인식된다. 이러한 기능에 덧붙여, IP 매스커레이드는 대단히 안전한 네트워크 환경을
제공한다. 잘 구성된 매스커레이딩 시스템과 내부 네트워크의 보안을 깨는 것은, 잘
구성된 방화벽의 보안을 깨는 것만큼이나 어렵다.
커널을 설정할 때 IP 매스커레이드에 관한 부분을 지정해야 한다. <리스트 1>의
옵션에서 Yes인가 또는 No인가를 확인하고 관련 내용을 공부하기 바란다.
이 옵션들은 단지 IP 매스커레이딩이 동작하기 위한 요소들이다. 특정한 네트워크와
특정 하드웨어를 설정하기 위해서는 필요한 다른 옵션을 더 선택해야 한다.
QoS(Quality of Service)
과거 순수한 데이터만을 전송했던 네트워크는 높은 전송 속도와 처리율이
관건이었지만 현재 멀티미디어 트래픽의 증가로 QoS에 대한 연구가 필요해졌고 이에
부응하여 커널 2.0대에 들어오면서부터 새롭게 추가된 기능 중 하나가 QoS를 지원하는
것이다. QoS는 쉽게 설명하면 애플리케이션에 따른 패킷의 우선 순위를 정해 처리하는
것인데, 우선 순위를 동적으로 변화시킬 수 있는 방법을 제공한다. 예를 들어 하나의
서버에서 채팅 서비스와 실시간 동영상 서비스를 제공한다고 가정하자. 그러면
동시다발적으로 사용자들의 요구가 발생하는데 거의 비슷한 시간에 두 개의 서비스 중
어느 하나를 선택, 처리해야 하는 경우 다음과 같은 기준으로 서비스 처리의 우선
순위를 정할 수 있을 것이다.
채팅 서비스의 경우 어느 정도의 대기 시간(Delay)이 발생하더라도 큰 문제가 되지
않는다. 다만 전송 과정에서 데이터 손실이 일어나서는 안 된다.
실시간 동영상 서비스의 경우 대기 시간이 최소화돼야 하고 특정 시간 이상 대기한
패킷은 쓸모가 없으므로 폐기한다.
위의 기준을 보면 어떻게 처리 순서를 정해야 할지 난감할 것이다. 이미 수많은
알고리즘들이 검증, 적용되고 있으므로 크게 걱정할 필요는 없다.
서버가 아닌 네트워크에서도 하나의 전송 선로에서 여러 애플리케이션이 만들어내는
패킷이 동시 다발적으로 발생하게 되는데 라우터에서 패킷의 특성을 고려해 전송의
우선 순위를 정해야 한다.
리눅스에서 제공하는 QoS를 사용하기 위해서는 커널 설정에서 선택해야 하며, 아직은
완벽한 모듈이 아니기 때문에 커널 설정 처음에 나오는 다음 물음에 ‘Y’를
선택해줘야 QoS 관련 문항이 나타난다.
·Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [Y/n/?]
그러면 여러 QoS 정책을 확인할 수 있을 것이다. 보통 QoS 정책은 ‘Fair
Queueing’이라는 기법에 기반하는데 트래픽 스케줄링이라는 말로 표현한다. 아직 QoS
관련 트래픽 스케줄링은 완전히 정립되지 않았지만 참고자료에 소개한 “An
Engineering Aproach to Computer Networking”과 “High-Speed Netwo rks”에 간단히
소개돼 있다.
리눅스 라우터의 활용
리눅스를 라우터로 활용하는 것은 리눅스 사용자들이 최근에 접근한 분야는 아니다.
리눅스의 거센 바람이 일기 이전부터 네트워크 연구에 있어 FreeBSD와 함께 폭 넓게
적용되어 왔다. 이론적으로 연구원들이 여러 알고리즘이나 프로토콜을 리눅스나
FreeBSD를 이용하여 실험하고 검증했다.
리눅스의 경우 리눅스 라우터 프로젝트(Linux Router Proj ect)가 오래 전부터 진행돼
왔고 전용 라우터에 가까운 외형을 가지기 위해 디스켓 한 장에 들어갈 정도의 작은
커널까지 개발되어 왔다. 이는 기계적인 부속이 추가되는 하드디스크를 사용하지 않고
플래시 메모리를 사용할 수도 있다. 실제로 리눅스를 이용해 라우터를 만들고자 하는
독자는 리눅스 라우터 프로젝트의 홈페이지(http://www.linuxrouter.org)에 접속해
자세한 정보를 얻기 바란다.
리눅스를 네트워크 장치로 활용하고자 하는 노력은 임베디드 시스템을 위한
운영체제의 개발에도 많은 영향을 주었는데 임베디드 리눅스 중에서
mClinux(http://ww w.moretonbay.com/coldfire/ linux-coldfire.html)는 소형
라우터의 운영체제로 사용되고 있으며, 다른 임베디드 리눅스의 배포본인 PeeWeeLinux
(http://www.peeweelinux.com/)는 라우터에 사용하려는 임베디드
리눅스 개발
과정에서 탄생했다.
리눅스의 라우터 관련 프로젝트는 실험 정신이 강하다고는 하지만 실제 라우터로
사용해 왔다. 몇몇 업체는 커널을 수정하고 새로운 모듈을 추가하여 웹 캐시
클러스터링을 위한 부하분산장치 등으로 발전시켜 상용화에 성공했으며, 여러분이
자주 방문하는 사이트에서 활용되고 있다. 실제 상용화된 장치에 관해서는
신텔정보통신의 홈페이지(http://www.cintel.co.kr)를 살펴보기
바란다.
연재를 마치며
시스템 최적화는 적용 애플리케이션에 따라 기법이 달라지며 요구 사항 또한 상이하게
달라질 것이다. 시스템은 적용하는 분야에 따라 리소스 요구량의 최소화, 처리 속도의
최대화, 안정성의 3박자가 맞춰질 때 올바르게 최적화됐다고 말할 수 있을 것이다.
총 4회에 걸쳐 서버와 리눅스에 관련하여 최적화 기법에 대해 연재했다. 필자가 알고
있는 모든 기법에 대해 소개하려 했으나 일부는 단편적으로 소개한 것에 대해
아쉬움이 남는다. 아쉬움을 뒤로 하면서 미흡하나마 연재를 마치고자 한다.
필자 연락처 : turtle@ece.skku.ac.kr
정리 : 송우일 wooil@sbmedia.co.kr
--------------------------------------------------------------------------------
잠깐, 오픈 시스템이란
오픈 시스템(Open System, 개방형 시스템)은 필자가 컴퓨터를 공부하는 학생들에게
자주 질문했던 문제인데 정확하게 대답하지 못했던 사람들이 많았다. 그 중 몇몇은
오픈 시스템을 소스코드가 공개된 의미로 해석하고 있었다. 실제 오픈 시스템은
표준화가 이뤄진 시스템과 표준을 준수하는 시스템을 말한다. 우리가 이제까지
사용해온 전화, TV 등이 대표적인 오픈 시스템에 속한다. 그리고 우리가 사용하는
말도 오픈 시스템에 속한다. 우리가 누구의 핏줄을 이어 받았던 간에 한국어로 의사
소통하는 것이 한국에서의 표준을 지키는 것이라 할 수 있다. 컴퓨터 분야에서도
ATX나 AGP, PCI와 같은 하드웨어 표준이 존재하며 업체별로 자체적인 표준이
존재한다. 네트워크에서는 TCP/IP, IPX 등의 표준이 존재한다. 표준을 준수하지
않거나 자신이 사용한 표준을 공개하지 않는 시스템은 드물다. 오픈 시스템의 다른
중요한 의미는 내가 만든 시스템이 다른 시스템과 인터페이스가 가능하도록 사양을
공개하고 표준화하는 것이다. 그렇다고 해서 무료라는 것은 아니다.
인터넷 서버와 라우터로서 리눅스 최적화 (2)
리눅스는 서버뿐만 아니라 라우터와 같은 네트워크 장비로도 사용할 수 있다.
리눅스를 라우터로 활용하는 연구는 일찍부터 진행돼 왔고 현재는 커널 설정과
최적화를 통해 전용 라우터와 같은 라우팅과 방화벽 기능을 수행할 수 있다.
이상호 성균관대학교 산업용 네트워크 연구실
연재 순서
1회(2000. 07): 리눅스 커널 이해와 최적화를 위한 컴파일러 설정
2회(2000. 08): 커널 설정시 선택 사항과 애플리케이션 최적화
3회(2000. 09): 인터넷 서버와 라우터로서 리눅스 최적화 방법(1)
4회(2000. 10): 인터넷 서버와 라우터로서 리눅스 최적화 방법(2)
--------------------------------------------------------------------------------
지난호에 논의했던 내용은 주로 리눅스가 서버로 동작할 때의 최적화에 관한
것이었다. 리눅스는 일반적인 컴퓨터 사용자를 위한 기능 외에 라우터와 같은
네트워크 장치를 위한 기능이 포함돼 있다. 이번호에는 네트워크 부속 장치로
리눅스를 활용하는 것에 대해 다룬다.
리눅스는 여러 분야에 응용돼 왔지만 네트워크 장치 분야에서도 많이 활용돼 왔다. 그
중 대부분의 기술이 라우터에 기반한다. 리눅스 라우터 구성 관련 기술을 모두
언급하고 싶지만 라우터라는 장치는 방대한 네트워크 기술을 포함하므로 지면상 몇몇
부분만 설명하고 나머지는 참고 자료를 소개하고자 한다. 우선 간략하게나마
네트워크의 구성과 이를 위한 장치에 대해 언급한 후 리눅스를 네트워크 장치로
활용하는 방법과 리눅스에서 지원되는 기술에 대해 알아본다.
네트워크 구성
계층적 구조
일반적으로 컴퓨터나 기타 장치에서 네트워크 기능을 7단계로 나누는데 이를 OSI(Open
System Interconnection) 7 레이어라고 부른다. 즉 네트워크의 기능을 7계층으로 나눈
것인데, 실제로 우리가 가장 많이 사용하는 TCP/IP는 4계층으로 구분되며 간단하게
다음과 같이 정리된다.
실제로 OSI 7 레이어를 정확하게 구현한 시스템은 거의 없으며 우리가 가장 많이
사용하는 TCP/IP는 4계층으로 이뤄졌다. 가장 상위 계층부터 응용 계층, 전송 계층,
네트워크 계층, 링크 계층으로 나누는데 응용 계층은 OSI 7 레이어의 응용 계층과
표현 계층을 하나로 만든 형태이며 전송 계층은 OSI 7 레이어의 세션 계층과 전송
계층을 포함한다. 그리고 링크 계층은 데이터링크 계층과 물리 계층을 포함한다. OSI
7 레이어가 실제로 정확하게 구현되지 못한 이유는 TCP/IP가 먼저 활용돼 왔으며 OSI7
레이어가 너무 복잡하게 나뉘어 있기 때문이다. 여기서는 TCP/IP를 기준으로 설명해
나가겠다.
네트워크 구성 장비
가장 간단한 네트워크의 구성은 호스트와 라우터를 중심으로 생각할 수 있다. 만약
이더넷을 사용하는 호스트의 집합이 토큰링(Token-Ring)이라는 다른 형식의
네트워크로 연결돼 있는 경우 이들의 연결에는 라우터라는 장비가 사용된다. 라우터가
이더넷 중심의 네트워크와 토큰링 네트워크를 연결하면 이는 서로 다른 링크 계층의
연결을 의미한다. 여기에서 알 수 있듯이 라우터라는 장비는 TCP/IP에서 링크 계층과
네트워크 계층을 주로 포함함을 알 수 있다. 라우터는 리눅스나 다른 유닉스에 기반한
호스트를 이용해 구성하기도 하고 고속의 전용 장비를 개발해 사용하기도 한다. 현재
가장 높은 주가를 올리고 있는 시스코(CISCO, www.cisco.com)도 주로 전용 라우터를
생산하는 회사다.
네트워크를 구성하는 장치로 호스트와 라우터 이외에 다른 장치가 존재하는데
스위치와 허브가 있다. 라우터는 IP 주소를 기준으로 패킷을 어디로 보내야 할지를
결정하는 반면 스위치는 네트워크 인터페이스 카드의 어드레스인 MAC 어드레스를
기준으로 패킷의 경로를 결정한다. OSI7 레이어를 기준으로 스위치는 데이터링크
계층의 정보만을 이용하며 라우터는 네트워크 계층까지의 정보를 이용한다. 스위치는
서로 다른 형태의 네트워크를 연결하지 않고 같은 형태의 네트워크를 연결한다.
허브는 단순히 특정 포트에 연결된 호스트의 패킷을 다른 모든 포트로 복사하여
전달한다. 그러면 실제 리눅스로 어떻게 라우터를 구성하는지 대략적으로 살펴보기로
한다.
리눅스 라우터의 구성
앞서 살펴봤듯이 라우터는 네트워크 계층을 포함하는데 일반적인 호스트에서는 모든
계층을 가지고 있으므로 이들 계층 중 네트워크 계층 관련 설정을 바꿔주면 라우터로
동작할 수 있다. 보통 인터넷 접속을 위한 라우터를 구성하는데 일반적인 활용은 크게
다음과 같이 이뤄지고 있다.
직렬 포트(Serial port)를 통한 인터넷의 접속
내부에 별도의 네트워크 구성
모두 같은 내용일 수도 있겠지만 일반적으로 고려하는 상황을 기준으로 나눈 것이다.
직렬 포트를 통한 인터넷 접속은 외부로 접근할 수 있는 회선과 호스트가 하나이고
내부에 다른 호스트가 존재할 경우 사용해 왔던 방식이다.
직렬 포트로 호스트의 데이터를 외부로 전달하는 라우터는 최소 하나의 직렬 포트와
네트워크 인터페이스 카드를 운영한다. 이 때 직렬 포트의 데이터는 PPP(Point to
Point Protocol) 또는 SLIP(Serial Line IP)으로 제어해 전달한다.
별도의 네트워크 구성은 내부에 가상의 사설 네트워크를 구축할 경우 사용하는데,
직렬 포트를 통한 인터넷 접속 또한 이 부분에 포함된다. 내부의 가상 네트워크
구성은 외부에서는 사용하지 않는 IP 주소를 내부에서 사용하며, 하나의 공인된 IP
주소를 이용하여 여러 대의 호스트가 인터넷에 접속하게 한다. 라우터는 주소를
변환할 수 있는 NAT(Network Address Translation) 기능을 포함한다. 이 경우
라우터는 라우팅 테이블을 참조해 내부의 패킷이 외부로 보내줘야 하는지를 결정하고
외부에서 온 패킷을 내부로 전달할지를 결정한다. 다음 그림에서 허브는 각
호스트에서 보내는 패킷을 라우터를 포함한 다른 모든 호스트에게 전달하는 역할을
한다.
네트워크에 대한 제반 지식이 없는 독자를 위해 간단한 시나리오를 구성해 보았다.
호스트 A는 www.yahoo.com에 접속 요청을 위한 패킷 A를 발생시킨다.
허브는 패킷 A가 특정 포트에 도착하면 다른 모든 포트로 패킷 A를 전달한다.
호스트 B와 리눅스 라우터는 패킷 A를 허브로부터 받게 된다. 호스트 B는 자신에게
전달되는 패킷이 아니므로 이를 무시하고 리눅스 라우터는 패킷 A가 외부로 전달돼야
함을 인식하고 패킷 A를 외부 회선(LAN 또는 WAN)으로 전달한다.
위의 시나리오를 살펴보면 라우터와 허브의 동작 차이를 이해할 수 있을 것이다. 그럼
이제 라우터를 구성하기 위해서는 여러 개의 네트워크 인터페이스 장치를 운영해야
하는 것을 알 수 있다. 라우터는 네트워크와 네트워크를 연결하는 장치이므로
연결하는 네트워크마다 별도의 네트워크 인터페이스와 이에 따른 별도의 IP 주소를
가질 수 있다.
직렬 포트로 호스트의 데이터를 외부로 전달하는 라우터는 최소한 하나의 직렬 포트와
네트워크 인터페이스 카드를 운영한다. 리눅스 커널은 ATM, T1/E1, T3(DS3), 이더넷,
프레임 릴레이(Frame-Relay), 토큰링 등의 대다수의 WAN과 LAN 인터페이스 카드를
지원한다. 이들 인터페이스 카드를 사용하기 위해서는 커널 설정(make config 또는
make xconfig)시, 이들의 사용을 선택해야 한다. <화면 1>은 make xconfig의
주화면으로 여러 네트워크 장치를 선택할 수 있는 문항이 있다.
리눅스 라우터에 적용되는 기술
이제부터 리눅스에서 제공되는 라우터 관련 기술을 조금씩 살펴보기로 한다. 지면상
모든 것을 자세히 설명하기 어려우니 나머지 부분에서는 참고 자료를 살펴보기
바란다.
라우팅 테이블
먼저 라우터로서 가장 중요한 것은 얼마나 올바르게 경로를 설정하여 패킷을 전달하는
데 있다. 이는 라우팅 테이블(Routing Table)을 참조하여 이루어지는데 라우팅
테이블은 직접 확인할 수 있다. 라우팅 테이블은 ‘/proc/net/route’로 저장돼 있고
일정 시간마다 업데이트된다. 텍스트 형식으로 되어 있으므로 직접 확인해 보면서
내용을 이해하기 바란다. 그리고 보통 네트워크 인터페이스 설정 명령어인 ifconfig은
실제로 라우팅 테이블을 변경시키는 명령어이므로 이에 대해 알아야 한다.
방화벽
방화벽(Firewall)은 외부로부터 내부의 네트워크 또는 자체 호스트의 시스템에 접근할
수 있는 범위를 제한하는 방법이다. 보통 애플리케이션 또는 포트 어드레스를
구분하여 접근을 막으며 패킷 필터링 기능을 포함한다. 기본적으로 리눅스는 커널
설정에서 선택, 사용할 수 있으며 필요한 경우 방화벽 운영의 정책까지 선택할 수
있다. 리눅스를 이용하여 방화벽 기능이 있는 라우터를 구성하고자 한다면
‘Firewall-HowTo’ 문서를 참고하기 바란다.
리눅스 IP 매스커레이드
IP 매스커레이드는 리눅스의 네트워킹 기능으로, 상용 방화벽이나 네트워크
라우터에서 흔히 볼 수 있는 1:n 방식의 NAT와 유사하며 방화벽 기능에 포함되는
기술이라 할 수 있다. 예를 들어, 어떤 리눅스 호스트가 PPP, 이더넷 등의 방법으로
인터넷에 연결돼 있다면, 이 리눅스 박스에 연결된(PPP, 이더넷 등) 내부의
컴퓨터들도 IP 매스커레이드를 통해 인터넷에 연결할 수 있다. IP 매스커레이드를
통하면, 내부의 컴퓨터들이 공식적으로 할당된 IP 주소가 없더라도 인터넷에 접속할
수 있다. 즉, 인터넷에 있는 다른 컴퓨터들에게는, IP 매스커레이드를 통해 바깥으로
나가는 정보는 IP 매스커레이드 기능을 가진 리눅스 라우터에서 보내는 것처럼
인식된다. 이러한 기능에 덧붙여, IP 매스커레이드는 대단히 안전한 네트워크 환경을
제공한다. 잘 구성된 매스커레이딩 시스템과 내부 네트워크의 보안을 깨는 것은, 잘
구성된 방화벽의 보안을 깨는 것만큼이나 어렵다.
커널을 설정할 때 IP 매스커레이드에 관한 부분을 지정해야 한다. <리스트 1>의
옵션에서 Yes인가 또는 No인가를 확인하고 관련 내용을 공부하기 바란다.
이 옵션들은 단지 IP 매스커레이딩이 동작하기 위한 요소들이다. 특정한 네트워크와
특정 하드웨어를 설정하기 위해서는 필요한 다른 옵션을 더 선택해야 한다.
QoS(Quality of Service)
과거 순수한 데이터만을 전송했던 네트워크는 높은 전송 속도와 처리율이
관건이었지만 현재 멀티미디어 트래픽의 증가로 QoS에 대한 연구가 필요해졌고 이에
부응하여 커널 2.0대에 들어오면서부터 새롭게 추가된 기능 중 하나가 QoS를 지원하는
것이다. QoS는 쉽게 설명하면 애플리케이션에 따른 패킷의 우선 순위를 정해 처리하는
것인데, 우선 순위를 동적으로 변화시킬 수 있는 방법을 제공한다. 예를 들어 하나의
서버에서 채팅 서비스와 실시간 동영상 서비스를 제공한다고 가정하자. 그러면
동시다발적으로 사용자들의 요구가 발생하는데 거의 비슷한 시간에 두 개의 서비스 중
어느 하나를 선택, 처리해야 하는 경우 다음과 같은 기준으로 서비스 처리의 우선
순위를 정할 수 있을 것이다.
채팅 서비스의 경우 어느 정도의 대기 시간(Delay)이 발생하더라도 큰 문제가 되지
않는다. 다만 전송 과정에서 데이터 손실이 일어나서는 안 된다.
실시간 동영상 서비스의 경우 대기 시간이 최소화돼야 하고 특정 시간 이상 대기한
패킷은 쓸모가 없으므로 폐기한다.
위의 기준을 보면 어떻게 처리 순서를 정해야 할지 난감할 것이다. 이미 수많은
알고리즘들이 검증, 적용되고 있으므로 크게 걱정할 필요는 없다.
서버가 아닌 네트워크에서도 하나의 전송 선로에서 여러 애플리케이션이 만들어내는
패킷이 동시 다발적으로 발생하게 되는데 라우터에서 패킷의 특성을 고려해 전송의
우선 순위를 정해야 한다.
리눅스에서 제공하는 QoS를 사용하기 위해서는 커널 설정에서 선택해야 하며, 아직은
완벽한 모듈이 아니기 때문에 커널 설정 처음에 나오는 다음 물음에 ‘Y’를
선택해줘야 QoS 관련 문항이 나타난다.
·Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [Y/n/?]
그러면 여러 QoS 정책을 확인할 수 있을 것이다. 보통 QoS 정책은 ‘Fair
Queueing’이라는 기법에 기반하는데 트래픽 스케줄링이라는 말로 표현한다. 아직 QoS
관련 트래픽 스케줄링은 완전히 정립되지 않았지만 참고자료에 소개한 “An
Engineering Aproach to Computer Networking”과 “High-Speed Netwo rks”에 간단히
소개돼 있다.
리눅스 라우터의 활용
리눅스를 라우터로 활용하는 것은 리눅스 사용자들이 최근에 접근한 분야는 아니다.
리눅스의 거센 바람이 일기 이전부터 네트워크 연구에 있어 FreeBSD와 함께 폭 넓게
적용되어 왔다. 이론적으로 연구원들이 여러 알고리즘이나 프로토콜을 리눅스나
FreeBSD를 이용하여 실험하고 검증했다.
리눅스의 경우 리눅스 라우터 프로젝트(Linux Router Proj ect)가 오래 전부터 진행돼
왔고 전용 라우터에 가까운 외형을 가지기 위해 디스켓 한 장에 들어갈 정도의 작은
커널까지 개발되어 왔다. 이는 기계적인 부속이 추가되는 하드디스크를 사용하지 않고
플래시 메모리를 사용할 수도 있다. 실제로 리눅스를 이용해 라우터를 만들고자 하는
독자는 리눅스 라우터 프로젝트의 홈페이지(http://www.linuxrouter.org)에 접속해
자세한 정보를 얻기 바란다.
리눅스를 네트워크 장치로 활용하고자 하는 노력은 임베디드 시스템을 위한
운영체제의 개발에도 많은 영향을 주었는데 임베디드 리눅스 중에서
mClinux(http://ww w.moretonbay.com/coldfire/ linux-coldfire.html)는 소형
라우터의 운영체제로 사용되고 있으며, 다른 임베디드 리눅스의 배포본인 PeeWeeLinux
(http://www.peeweelinux.com/)는 라우터에 사용하려는 임베디드
리눅스 개발
과정에서 탄생했다.
리눅스의 라우터 관련 프로젝트는 실험 정신이 강하다고는 하지만 실제 라우터로
사용해 왔다. 몇몇 업체는 커널을 수정하고 새로운 모듈을 추가하여 웹 캐시
클러스터링을 위한 부하분산장치 등으로 발전시켜 상용화에 성공했으며, 여러분이
자주 방문하는 사이트에서 활용되고 있다. 실제 상용화된 장치에 관해서는
신텔정보통신의 홈페이지(http://www.cintel.co.kr)를 살펴보기
바란다.
연재를 마치며
시스템 최적화는 적용 애플리케이션에 따라 기법이 달라지며 요구 사항 또한 상이하게
달라질 것이다. 시스템은 적용하는 분야에 따라 리소스 요구량의 최소화, 처리 속도의
최대화, 안정성의 3박자가 맞춰질 때 올바르게 최적화됐다고 말할 수 있을 것이다.
총 4회에 걸쳐 서버와 리눅스에 관련하여 최적화 기법에 대해 연재했다. 필자가 알고
있는 모든 기법에 대해 소개하려 했으나 일부는 단편적으로 소개한 것에 대해
아쉬움이 남는다. 아쉬움을 뒤로 하면서 미흡하나마 연재를 마치고자 한다.
필자 연락처 : turtle@ece.skku.ac.kr
정리 : 송우일 wooil@sbmedia.co.kr
--------------------------------------------------------------------------------
잠깐, 오픈 시스템이란
오픈 시스템(Open System, 개방형 시스템)은 필자가 컴퓨터를 공부하는 학생들에게
자주 질문했던 문제인데 정확하게 대답하지 못했던 사람들이 많았다. 그 중 몇몇은
오픈 시스템을 소스코드가 공개된 의미로 해석하고 있었다. 실제 오픈 시스템은
표준화가 이뤄진 시스템과 표준을 준수하는 시스템을 말한다. 우리가 이제까지
사용해온 전화, TV 등이 대표적인 오픈 시스템에 속한다. 그리고 우리가 사용하는
말도 오픈 시스템에 속한다. 우리가 누구의 핏줄을 이어 받았던 간에 한국어로 의사
소통하는 것이 한국에서의 표준을 지키는 것이라 할 수 있다. 컴퓨터 분야에서도
ATX나 AGP, PCI와 같은 하드웨어 표준이 존재하며 업체별로 자체적인 표준이
존재한다. 네트워크에서는 TCP/IP, IPX 등의 표준이 존재한다. 표준을 준수하지
않거나 자신이 사용한 표준을 공개하지 않는 시스템은 드물다. 오픈 시스템의 다른
중요한 의미는 내가 만든 시스템이 다른 시스템과 인터페이스가 가능하도록 사양을
공개하고 표준화하는 것이다. 그렇다고 해서 무료라는 것은 아니다.
|
댓글목록
등록된 댓글이 없습니다.