1. Environment 1/18
1. Environment 2/18 1. Environment 본장에서는기본적으로네트워크프로그래밍을수행하기위한기본적인환경을구축하는실습을다루도록하겠다. 본실습에서는기본적으로프로그래밍플랫폼인리눅스의서비스중하나인 Samba Server와프로그래밍을구조적으로할수있게도와주는 Source Insight를사용하는방법을다루도록한다. 1.1 Samba Server 를통한 Linux 접근 1.1.1 Samba Server[1] SAMBA( 삼바 ) 는 LINUX 플랫폼에서작동하는 File 및 Printer 를공유할수있게해주는공개 Protocol이다. SAMBA를설치함으로써 SAMBA서버와연결된각종 OS(Window, OS/2) 는강력하고방대한자원을자유자재로사용할수있게된다. Samba란 LINUX서버에서동작하면서마이크로소프트사의랜매니저기능을흉내내는소프트웨어 ( 또는데몬 ) 이다. 즉, PC쪽의랜매니저호환의각종클라이언트로하여금 LINUX 쪽의파일시스템 (UFS(4.2 File System), NFS(Network File System), AFS (Andrew File System)) 과 LINUX쪽의프린터를원거리접근이가능하도록만드는기능을제공하는것이다. 한마디로 PC쪽에서 LINUX서버의하드디스크와네트워크프린터자원을공유하도록환경을설정하는프로그램인셈입니다. 물론 Samba를통해 LINUX 쪽에서 PC쪽의파일시스템및프린터로도접근가능하다는것이다. Samba 버전 2.x대에들어와서는 Windows NT에서제공하는각종서비스를 ( 비록불완전하나마 ) 상당수제공하고있다. 동일한하드웨어환경에서라면 LINUX에 Samba를설치한서버가 Windows NT를설치한서버보다성능이월등히우세하다는장점이있으며현재많은곳에서리눅스의에디팅및 GUI에익숙한사람들을위해서많이사용되고있다. 즉, 간단하게다시정리하자면, 윈도우에서접근이가능한리눅스의파일서버의개념으로생각하면된다. 많은곳에서리눅스에서프로그래밍하기위하여서터미널에서작업을하지만 Samba를사용하므로인하여서터미널작업의불편함을덜어줄수있으며, 윈도우에서자신의파일시스템처럼리눅스의파일시스템을사용할수있게된다. 1.1.2 Samba Server 접속하기 먼저, 앞절에서다루었던것처럼윈도우에서리눅스파일시스템을적용하기위한방식이므로, 먼저윈도우에서 Samba Server가설치가된서버로접속을하여야한다. 따라야하는동작은다음과같다. 윈도우의탐색기를실행시킨다. 주소필드에 \\URL 또는 IP 주소를넣는다. 본실습의서버는 220.67.124.129로하겠다.
1. Environment 3/18 접속이완료가되면, 접근을위한계정정보를입력하는절차를거치게된다. 계정정보는수업시간에부여가된다. 접속을수행하면, 자신이엑세스할수있는디렉토리리스트가정렬된다.
1. Environment 4/18 결과적으로자신계정에등록이된리눅스파일시스템의디렉토리를윈도우에서도마치윈 도우파일시스템의디렉토리인듯사용할수가있다. 자신의디렉토리에있는임의의파일을리눅스의디렉토리에복사 1.1.3 Network Drive 로연결 Samba 로연결된디렉토리를마치나의로컬컴퓨터에있는디렉토리인듯사용하는방법에 대해서실습한다. 일반적으로윈도우계열 OS 에서는네트워크디렉토리를지원한다. 연결하면 내컴퓨터 에서마치로컬디렉토리처럼접속이가능해진다. 위의그림처럼자신의계정의이름으로된디렉토리에마우스오른쪽클릭을하여오른쪽그림의메뉴에서 네트워크드라이브연결 을선택하도록한다. 그런후에다음과같이네트워크드라이브설정이나오면자신의로컬컴퓨터에맞는드라이버를선택한후완료를하도록한다.
1. Environment 5/18 그후에 내컴퓨터 를확인해보면, 그안에네트워크드라이브가연결된것을파악할수 있다. 자신의리눅스계정의디렉토리가윈도우의디렉토리로완전히오러래핑이된다.
1. Environment 6/18 1.2 Source Insight 사용법 Source Insight 는객체지향의프로그램편집기이며코드브라우저로 C/C++, C# 및 Java program의분석기를내장하고있다. Source Insight 는소스코드를분석하여작업중에동적으로기호정보에관한자체데이터베이스를유지하여자동적으로유용한문맥 (contextual) 정보를제공한다. Source Insight는훌륭한프로그램편집기일뿐아니라레퍼런스트리, class inheritance diagrams 및 call tree 를보여줍니다. Source Insight는어떤프로그래밍편집기의소스코드및소스정보를빨리찾아주는기능을갖추고있다. Source Insight는에디트중에소스코드와소스정보를빠르게찾아바로유용한정보및분석을제공하여다른편집기와는차별화를두어서큰단위의프로젝트를다룰수있다. 본실험에서는 Samba와함께리눅스에서프로그래밍을할때사용하는사용자환경을구축하도록한다. 1.2.1 Source Insight 설치 일반어플리케이션을설치할때와같이간단한절차를통하여서설치하면된다. 설치후실 행을하도록한다. Source Insight 에서자신이 C/C++, MFC 또는 JAVA 의기존라이브러리와연동하고싶
1. Environment 7/18 다면경로를선택해서사용하면더좋다. 고급사용자가선택하는부분이나, 이번실습에서는 제외하고, Continue 을버튼을통해서 Skip 하도록한다. 1.2.2 Source Insight 로프로젝트관리 본절에서는설치한 Source Insight 로프로젝트를생성, 관리하여서사용하는방법에대해 서실습해보도록한다. Menu > Project > New Project 종전에연결한네트워크디렉토리를사용하도록한다. 이름은 FileCopy 라고한다. 다음과같이화면에나올것이다. 이렇게나오면프로젝트가제대로생성이된것이다. 실습을하기위해서 C 프로그래밍을간단하게하도록하겠다. 주제는 FileCopy 이다. 먼저 FileCopy.h 만들어서필요한정의를하도록한다. 새로운파일을만들기위해서는오른쪽에프로젝트파일리스트창에마우스오른쪽클릭을
1. Environment 8/18 수행한후에 New File 명령어를통해서만들수있다. FileCopy.h 파일을만들도록하겠다. New File 선택한후에자신의네트워크드라 이브에프로젝트의이름으로디렉토리를만든후파일명을넣어서만들도록한다. 그림에서보면오른쪽파일리스트에 FileCopy.h 이생긴것이다. 이는기본적으로리눅스명 령어의 vi FileCopy.h 와같은명령어라고할수있다. 헤더파일을작성하도록한다. 헤더는다음과같다.
1. Environment 9/18 위의 5 와같은과정을통해서 FileCopy.c 파일을작성하도록한다. 컴파일을하기위한 Makefile 을작성한다.
1. Environment 10/18 #Makefile 의작성에대한 Reference (http://www.nicklib.com/library/make/make-1.html) 코딩이다되었으니, 이제 SSH 클라이언트프로그램을사용한후에 Complie 을하도록한 다. 이실습에서는 Xshell 프로그램을사용한다. 자신의아이디로접속을한후에자신의프로젝트로들어간다음 make 를실행한다../FileCopy 를실행해보고실제로제대로복사가되었는지파악하도록한다.
1. Environment 11/18 1.3 UNP Library 설치 부교재로사용중인 UNIX, by W. Richard Stevens 의소스코드는기본적으로기존에제작된 Library를사용한다. 독자들의이해를돕고자하는 Wrapper Function들과교재의예제코드들로구성되어있다. 자세한내용은교재를참고하길바랍니다. Solaris, Linux, FreeBSD 등에설치가가능함. UNP Library 의설치방법은다음순서를따른다. 먼저실습게시판에있는 UNP Library 파일을다운받은후자신의계정디렉토리에 Copy 를한다. ( 네트워크디렉토리사용 ) http://www.unpbook.com/unpv13e.tar.gz 파일이있는디렉토리에서아래의명령어를이용하여서압축을푼다. n Tar xvfz unpv13e.tar.gz
1. Environment 12/18 다음표의설치방법을따르도록한다. cd unpv13e./configure cd lib make cd../libfree make cd../intro # into the basic directory that all programs need # try to figure out all implementation differences # build the basic library that all programs need # use "gmake" everywhere on BSD/OS systems # continue building the basic library # build and test a basic client program Intro 디렉토리에있는 daytimetcpsrv 와 daytimetcpcli 의파일을자신에게할당된포트번 호로적절히수정한후실행해보도록한다. UNP Library 의 Directory 구조는다음과같다. ü ü ü config*.* : library 설치관련파일 ex> config.h, config.h.in, config.log, config.status, configure.in 등 libunp.a : UNP library archive 파일 lib, libfree : library 에서추가한함수들의 object 파일
1. Environment 13/18 1.4 LAB 1.4.1 Simple TCP Server/Client Source [TCP Server Code] : UNP 의예제를간단히구동하여본다.
1. Environment 14/18 [TCP Client Code]
1. Environment 15/18 1.4.2 Netstat & Strace l Netstat n n 활성화된연결에대한여러네트워크관련데이터구조의내용을표시 u 열려있는포트번호와같은네트워크상태를확인하기위해서사용함 Command Option Option Discription -a 현재다른호스트와연결 (Established) 되어있거나, 대기 (Listening) 중인 모든포트번호확인 -r 라우팅테이블확인및 Connection 되어있는포트번호확인 -n 현재다른호스트와연결 (Established) 되어있는포트번호확인 (IP 주소로화면출력 ) -i 네트워크의패킷전송상태를검사 -c Netstat 의결과를연속적으로출력 -l 현재 listen 되고있는소켓정보출력 -p 실행되고있는각프로그램과 PID 정보출력 n 실행화면
1. Environment 16/18 l Strace n 네트워크프로그램코드의대부분은시스템콜 (system call) 로구성된임무를수행한다. 결국이런시스템콜들을적절히추적할수있다면, 네트워크프로그램에서수행되는모든흐름을정확히이해하고디버깅하는효율적임 n 사용법 u Strace [ 사용프로그램 ] u Strace c [ 사용프로그램 ] 시스템콜사용통계 u Starce o [ 사용프로그램 ] - 시그널추적및통계 n 실습 u Step 1 : 간단한 daytime Client 프로그램을작성 l $unp/intro/daytimetcpcli 127.0.0.1
1. Environment 17/18 u Step 2: strace 사용으로 system call 동작확인 l [ 통계자료, strace 모두포함 ]
1. Environment 18/18 1.4.2 실습보고서 l 1. Simple TCP Server/Client 을수행해보고, netstat 을이용해아래의 TCP State Diagram 에어떻게접근하게되는지작성하시오. 그림 1 TCP State Diagram l 2. Daytimeclient 구동하는동작을 strace 로 debugging 한후 socket 과관련한 system call 에대해서작성하시오.