Linux Network Programming (LNP): 환경구축안내서 <CPL-TR-09-03> 2009 년 2 월 경북대학교통신프로토콜연구실 김지인 (jiin16@gmail.com) 박재완 (jwparkinf8@gmail.com) 요약 본문서에서는 Linux에서의 TCP, UDP Socket 프로그래밍뿐만아니라, SCTP (Stream Control Transmission Protocol) 에대하여학습할수있는기회를제공한다. SCTP는 TCP와유사한연결지향성프로토콜이나, Multi-Stream을비롯한 Multi-Homing 특성을제공할뿐만아니라, 몇가지특징들을통하여 TCP에서의문제점들을개선한프로토콜이다. 1
목 차 1. 서론... 3 2. VMWARE 를이용한 LNP 환경구축... 3 2.1 VMWARE... 3 2.1.1 VMware 설치... 3 2.1.2 VMware 실행및 VM 생성... 9 2.1.3 Ubuntu 설치...14 2.2 SCTP (STREAM CONTROL TRANSMISSION PROTOCOL)...19 2.2.1 SCTP의특징...19 3. SCTP 예제실행을위한 LKSCTP 설치...21 3.1 VMWARE...21 3.2 LKSCTP 설치...23 4. 결론...23 5. 참고문헌...24 2
1. 서론 본문서는 Linux Network Programming에대한전반적인이해를돕기위하여, 예제를실습할수있는환경을구축하는방법을제시한다. Linux를운영체제로사용하여프로그래밍환경을구성하지만, 여기서다루는예제들이 Unix 환경으로구축되었기때문에몇가지수정이필요하다. 따라서, 관련하여몇가지패치작업이요구될수도있다. 2. VMware 를이용한 LNP 환경구축 이장에서는 VMware 와 Ubuntu Linux 를이용한 LNP 환경구축에대해서언급한다. 사용한 Linux 는 Ubuntu 8.04 버전이다. 2.1 VMware VMware란 Virtual Machine Software의약자로말그대로가상의머신을위한소프트웨어이다. 주로기존의운영체제위에서다른운영체제를사용하기위해서사용된다. 예를들면, Windows에서 Linux를사용하거나, Linux에서 Windows를동시에사용하기위해서사용하는소프트웨어이다. 2.1.1 VMware 설치 VMware 의설치는아주간단하다. 일반적인 Windows program 과다른점이없다. 다음은 VMware 설치과정을설명하고있다. 3
그림 1. VMware 설치화면 간단하게 Next 를선택함으로써다음단계로넘어간다. 그림 2. VMware 설치화면 라이선스에대해서사용자의동의를구하는화면이다. Yes, I accept the terms in the license agreement 를선택한후 Next 를선택하여다음단계로넘어간다. 4
그림 3. VMware 설치화면 설치경로를선택하는화면이다. 기본값으로는 C:\Program Files\VMware\VMware Workstation\ 이되어있다. 값을바꾸고싶다면 Change 를통하여변경한후 Next 를 선택하여다음단계로넘어간다. 그림 4. VMware 설치화면 바로가기를설정하는화면이다. 기본적으로바탕화면, 시작메뉴, 빠른실행모든메뉴에바 로가기가생성되도록체크되어있다. 사용자가원하는대로조작후 Next 를선택하여다 음단계로넘어간다. 5
그림 5. VMware 설치화면 CD-ROM의자동실행을설정하는화면이다. CD-ROM 자동실행이설정되어있을경우예상하지못한 Virtual Machine과의 interaction으로인해문제가발생할수있으므로, VMware 에서는 CD-ROM 자동실행을방지할것을권고하고있다. 실제로 Disable하지않고 VMware를설치, 사용해보았으나별다른문제는발생하지않았다. 그림 6. VMware 설치화면 6
이제설치준비가끝나본격적인설치화면이나온다. VMware 를설치할준비가끝났다면 Install 을선택하여설치를시작한다. 그림 7. VMware 설치화면 VMware 설치진행화면이다. Status 에서설치상태를알수있다. 그림 8. VMware 설치화면 7
VMware 설치가종료된후등록정보를입력하는화면이다. 사용자이름, 회사, Serial Number 를입력하는화면이다. 위정보들을작성하고 Enter 를선택하여다음단계로넘어 간다. 그림 9. VMware 설치화면 설치가완료되었다. 이제 Finish 를선택하여설치마법사를종료한다. 8
2.1.2 VMware 실행및 VM 생성 그림 10. VMware 실행화면 VMware 실행화면이다. VMware를실행화면위와같은화면이나온다. 간단한 VMware에대한설명과함께아래에는세가지메뉴가존재한다. New Virtual Machine 에서는새로운 Virtual Machine을만들수있고, New Team 에서는여러개의 Virtual Machine으로 private 네트워크를구축할수있으며, Open Existing VM or Team 에서는기존의 VM이나 team을불러올수있다. 여기에서는새로운 VM 에 Linux 를설치할것이므로 New Virtual Machine 을선택한다. New Virtual Machine 을선택하면아래와같은마법사가실행이되며, VM 구성을위한몇가지 설정들을하게된다. 9
그림 11. VM 생성화면 VM 을생성하는마법사의첫화면이다. 지금부터는메뉴가한글로표시되므로설치하기가 더욱쉽다. 다음 을선택하여다음단계로넘어간다. 그림 12. VM 생성화면 설정을선택하는화면으로 Typical ( 일반 ) 과 Custum ( 사용자정의 ) 두가지가존재한다. 일반설정과사용자정의설정의차이의경우사용자정의설치가몇가지설정을더하게된다. 추가되는설정으로는 VM의 memory size를정의하는것등이있다. 여기서는일반적인방법인 Typical을선택하여설치를하도록하겠다. 10
그림 13. VM 생성화면 게스트 OS 를선택하는화면이다. 게스트 OS 로는 Microsoft Windows 와 Linux, Nevell Netware, Sun Solaris, 등이있다. 여기서는 Ubuntu Linux 를설치할것이기때문에 Linux 와 Ubuntu 를선택하였다. 다음단계로넘어가기위해서 다음 을선택한다. 그림 14. VM 생성화면 11
VM 의이름과경로를지정하는화면이다. VM 의이름은기본값으로운영체제의이름으로되 어있고경로또한내문서안 My Virtual Machine 으로되어있다. 변경을원하는사람은변 경을한후 다음 을선택하여다음단계로넘어간다. 그림 15. VM 생성화면 다음은네트워크종류를설정하는화면이다. 기본적으로세가지유형이존재한다. Use bridged networking 의경우, 게스트 OS가하나의독립된 IP 주소를가질수있을때사용하는것이고, Use network address translation(nat) 의경우, 게스트 OS가독립된 IP 주소를가질수없을때 NAT를활용해서사설망을구축하여사용하는경우에사용된다. 그리고 Use host-only networking 의경우 host에서가상사설망을사용할경우에쓰이며, Do not use a network connection 의경우네트워크를사용하지않을때사용하는것이다. 12
다음은 VM 의디스크크기를설정하는화면이다. 기본값으로는 8GB 가설정이되어있다. 하 드디스크의여유가있다면좀더늘릴것을권장한다. 그림 16. VM 생성 VM 생성이완료되었다. 이제부터는 Ubuntu Linux 설치에대해서알아볼것이다. 13
2.1.3 Ubuntu 설치 Ubuntu 를설치하기위해서우선 Ubuntu 를다운받아야한다. 다운로드는 Ubuntu 공식사이 트 (http://www.ubuntu.com/) 에서가능하다. iso 파일을사이트에서다운받은후 VMware 에서별도의 CD 없이바로설치가가능하다. VM 은가상으로만든머신이므로 iso 파일을바로 CD-ROM 에서읽을수있기때문이다. 설 정방법은다음과같다. 그림 17. VM CD-ROM 설정 먼저 CD-ROM 을더블클릭한다. 그러면 CD-ROM 을설정하는화면이나타난다. 14
그림 18. VM CD-ROM 설정 Use ISO image 를선택하여 Ubuntu 사이트에서다운받은이미지파일을선택한다. 로컬 머신에있는 CD-ROM 을사용하려면 Use physical drive 를선택하면알아서설정을해준다. 그림 19. VM start 15
이제모든설정이끝났다. Start this virtual machine 을선택하여 VMware 를시작하도록한 다. 그림 20. VM 실행 VM 을시작한화면이다. 시작후아래와같은 Ubuntu 기본화면이나타난다. 그림 21. Ubuntu 설치 16
Ubuntu 초기화면이다. 여기서는 Ubuntu 를설치하기위해서제일위에있는 Start or install Ubuntu 를선택한다. 그럼아래와같은로딩화면이나타난다. 그림 22. Ubuntu 설치 Ubuntu 설치를위한로딩화면이다. 로딩이끝난후아래와같은화면이나타난다. 그림 23. Ubuntu 설치 17
install 을더블클릭하면설치가시작이되며, 설치는마법사를통해진행이되어 Windows 설치보다간단하다. 설치는간단한설정작업으로이루어져있으며, 언어, 키보드, 파티션, 계정, 관리자계정에대한설정을하면모든설정이끝나고설치가이루어진다. 대표적으로시작부분에있는언어설정부분만을설명하고나머지부분은쉽게설정후설 치를할수있을것이다. 그림 24. Ubuntu 설치 언어설정부분이다. 여기서한국어를선택할경우이후모든설치과정은한글로진행이 된다. 모르는부분이있다면천천히읽어보면서설치를진행할수있으므로자세한과정 은생략하도록하겠다. VMware 사용시 Tip : VMware 를사용하다가 local machine 으로나오기위해서는 Alt + Ctrl 키를동시에누르면 local machine 으로나올수있다. 18
2.2 SCTP (Stream Control Transmission Protocol) SCTP 의경우, 앞서언급한바와마찬가지로 TCP 와마찬가지로연결지향성프로토콜이지 만, 이와는몇가지차이점을가지고있는데, 대표적으로 Multi-Stream 과 Multi-Homing 이 있다. 2.2.1 SCTP 의특징 Multi-Stream의경우하나의 association (TCP에서의 connection 개념 ) 에여러개의 stream을통하여파일을전송하게된다. 이러한전송방법은 Head-of-Line Blocking 문제 (TCP에서 packet이손실될경우, 그 packet을다시전송받기전까지, 그이후에수신되는 packet을처리하지못하는문제 ) 가생긴다. 이를해결하는방안으로제시된방법이 SCTP의 Multi-Stream 전송이다. 이방법을사용할경우, 각각의독립적인 Stream을통하여 packet이전송된다. 그렇기때문에만약하나의 Stream에서 packet손실이일어날경우, 그하나의 Stream에한해서만재전송이일어나기때문에, 이후에도착하는 packet들이불필요하게대기하는일이없어진다. TCP 에서의파일전송및재전송 19
SCTP에서 Multi-Stream을사용한전송 Multi-Homing은여러개의네트워크 IP를주소를바인딩하는것이다. 이렇게될경우, 정해진순위에따라 primary IP address를사용하여통신을하다가, 통신이끊어지게되면바인딩된나머지 IP address를사용한다. 아래그림은 SCTP의구조를큰그림으로써보여주고있다. SCTP 프로토콜구조 20
3. SCTP 예제실행을위한 lksctp 설치 3.1 VMware 우선, SCTP 예제들을실행하기에앞서, 파일을다운받아야한다. 이문서에서는 Unix Network Programming 에서의예제코드들을사용하되, linux 환경에서는몇가지수정작업 이필요하다. 우선, UNP 예제파일들을다운받는다. tar zxvf unpv13e.tar.gz 명령어를통해서압축을풀게되면, unpv13e 라는폴더가새로생성 되었음을볼수있다. unpv13e 폴더안의 README 파일을읽어보게되면, 해야할작업들을제시하고있다. 21
그중, unpv13e 폴더안에서아래명령어들을순서대로입력한다../configure cd lib make cd../libfree make 그후에, 각예제를실행하기위해서는해당하는폴더에서 make를입력하면된다. TCP, UDP 관련예제의경우거의대부분문제없이컴파일될것이다. 그렇지만, 몇가지함수선언과관련한문제들을수정하기위하여, 자체적인패치파일을다음경로에서제공한다. 패치파일은 http://protocol.knu.ac.kr/pub에서다운로드할수있다. linux 상에서는다음과같이다운받는다. wget http://protocol.knu.ac.kr/pub/sw/unpv13e-patch-20080908.sh 을입력하면다운로드하고 sh unpv13e-patch-20080908.sh 를입력하면패치를완료한다. 이후다시./configure 및이전과정들을한번더수정한다. 여기까지완료하게되면, tcpcliserv 및 udpcliserv 폴더에서 make 하면성공적으로예제들이 컴파일될것이다. 그렇지만, sctp 의경우기본적으로헤더파일이포함되어있지않기때문에 linux 상에서 구현된 lksctp 를설치하여야한다. 22
3.2 lksctp 설치 lksctp 는 sctp 를 linux kernel level 에서구현해놓은것이다. http://lksctp.sourceforge.net/ 에 서 download 링크를따라가면다운받을수있다. 문서작성기준일 2009 년 2 월 12 일자로 lksctp-tools-1.0.9.tar.gz 파일이최신 version 이다. 이파일을다운받고 1. tar zxvf lksctp-tools-1.0.9.tar.gz를입력하여압축을풀어준다. 2. cd lksctp-tools-1.0.9를입력하여폴더를이동한다. 3../configure. 4. make 5. make install를하게되면 lksctp의설치가완료된다. ( 만약권한문제가발생한다면 ubuntu 의경우명령어앞에 sudo 를붙여주어실행할것 ) 여기까지완료한후에, unpv13e/sctp 폴더에서 make 를통해일부예제를제외하고컴파일 가능하다. 4. 결론 지금까지본문서에서는리눅스네트워크프로그래밍을위한환경및네트워크프로그래밍을학습하는데필요한예제를위한환경을구성하는방법에대하여소개하였다. 뿐만아니라, SCTP 프로토콜의기본특징및주요확장기능에대하여살펴보았다. SCTP는 TCP 이후의차세대수송계층프로토콜로써지속적인표준확장및보급이이어질것으로전망된다. 시간이지남에따라 SCTP 보급이확대되면, 기존에 TCP를통해제공되던응용들도 SCTP를통해보다효율적으로제공될수있을것으로전망된다. 특히, 실시간멀티미디어전송및고도의신뢰성이요구되는응용에대해서는 SCTP 의적 용이선호된다. 또한, 차세대이동통신망에서의 IP 이동성제공측면에서도 SCTP 의사용이 긍정적으로검토될수있을것이다. 23
5. 참고문헌 [1] Stewart R., et al., "Stream Control Transmission Protocol", IETF RFC 2960, October 2000 [2] Pastor J. and Belinchon M., SCTP Management Information Base, IETF Internet Draft, draft-ietf-sigtran-sctp-mib-08.txt, November 2002 [3] SCTP implementations by Linux, http://rivus.sourceforge.net/ [4] SCTP ns-2 simulations codes, http://pel.cis.udel.edu/#downloads [5] SCTP tutorial, http://www.iec.org/online/tutorials/sctp/ [6] Stewart, R., et al., "SCTP Partial Reliability Extension", IETF Internet Draft, draft-stewarttsvwg-prsctp-02.txt, December 2002 [7] Stewart, R., et al., " SCTP Dynamic Address Reconfiguration", IETF Internet Draft, draftietf-tsvwg-addip-sctp-05.txt, May 2002 24