Understanding of Socket and File I/O Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1
컴퓨터통신프로토콜 컴퓨터통신프로토콜데이터를원활이주고받을수있도록정한약속컴퓨터네트워크프로토콜 통신장비는서로간의통신방법이미리정의되어있어야함 같은통신프로토콜을지원하는장비간에만통신이가능컴퓨터통신은네트워크형태로운영 컴퓨터네트워크프로토콜이라부름 2
통신프로토콜의특징 통신프로토콜 효율적, 안정적 으로통신할수있도록미리정한약속 사용자 사용자 통신장비 통신프로토콜 효율성, 안정성, 표준화 통신장비 효율적 주어진통신채널을최대로이용할수있어야한다. 안정적 비정상적인장애발생시에도안정되게동작해야한다. 표준화 널리사용되기위해서는미리표준화되어야한다. 3
인터넷과서브네트워크 인터넷을이용한두호스트사이의통신인터넷을이용하기위해 TCP/IP 프로토콜이설치되어있어야함호스트는라우터들을경유하여서로연결호스트 인터넷에물리적으로접속하기위해네트워크액세스프로토콜이필요함 네트워크액세스프로토콜 : IP 계층이서브네트워크이용을위한프로토콜서브네트워크 이더넷, 패킷교환망, DSL, ATM 등데이터를실제로전달해주는네트워크 응용계층 네트워크서비스 응용계층 TCP, UDP IP 네트워크액세스계층 인터넷 네트워크액세스프로토콜 종점간트랜스포트계층서비스 라우터 IP 서브네트워크 라우팅 라우터 IP 서브네트워크 TCP, UDP IP 네트워크액세스계층 네트워크액세스프로토콜 4
네트워크프로그래밍계층별분류 응용계층프로그래밍 트랜스포트계층프로그래밍 디바이스드라이버계층프로그래밍 응용계층 응용계층프로그래밍 TCP/IP 네트워크디바이스 소켓프로그래밍 디바이스드라이버프로그래밍 LAN 5
응용계층프로그래밍 네트워크응용패키지, TCP/IP 응용프로토콜을이용 데이터의송수신을구체적으로다루지않음유닉스의 rsh, rcp RPC http 장점복잡한네트워크서비스를편리하게구현할수있음 단점하위계층의구체적인동작을직접제어할수없음 6
트랜스포트계층프로그래밍 TCP나 UDP와같은트랜스포트계층의기능을직접이용 데이터그램단위의데이터송수신처리 TCP를이용할경우연결설정, 흐름제어, 에러제어가가능 대표적인 API (Application Program Interface) UNIX BSD socket, winsock 인터넷응용프로그래밍의기초 7
디바이스드라이버계층프로그래밍 OSI 계층 2 이하의인터페이스를직접다루는프로그래밍예 ) Microsoft 사의 NDIS (Network Driver Interface Specification) API Windows 에서이더넷프레임의송수신을직접처리 프레임단위의송수신을구체적으로제어, 네트워크상태모니터링등 LAN 카드개발시테스트프로그램작성에사용 프레임을송수신하는기능만을이용흐름제어, 에러제어, 인터넷주소관리등의기능은별도로구현해야함 8
클라이언트 - 서버모델 대부분의네트워크프로그램의구현모델 서버와클라이언트서버 : 서비스를제공하는장비클라이언트 : 서비스를이용하는장비 서버일반적으로클라이언트보다구현이복잡 클라이언트의인증 정보보호 동시서비스 안정성 9
2-tier 클라이언트 - 서버모델 클라이언트 서비스요청 (request) 서비스응답 (response) 서버 대부분의통신프로그램웹 (http), ftp, telnet, mail 단점서버에서의병목현상클라이언트의증가는서버에트래픽집중과처리용량부족현상발생 10
3-tier 클라이언트서버모델 클라이언트 요청 (request) 응용서버 데이터 데이터서버 응답 (response) 2-tier 클라이언트-서버모델의문제점을개선한구조 응용서버 와 데이터서버 로구분클라이언트는응용서버에서비스를요청응용서버는데이터서버로부터데이터를얻어클라이언트에응답 장점클라이언트는데이터서버의정보가필요없음클라이언트가같은요청을동시에하면응용서버는이를한번만처리 데이터서버의통신부담저하 11
n-tier 클라이언트 - 서버모델 응용서버 1 클라이언트 응용서버 2 데이터서버 응용서버 N 3-tier 모델을확장 여러버전의응용서버가존재기본동작은 3-tier 모델과같지만응용서버가여러형태로구현 장점클라이언트가필요에따라다른응용서버를선택할수있음서비스제공도중새로운응용서버추가가가능서비스의다양성, 확장성, 버전관리 ( 업그레이드 ) 12
P2P 모델 서버, 클라이언트의역할이미리정해지지않음 경우에따라서버또는클라이언트가될수있음 내부적으로는클라이언트 - 서버모델로동작 참가자가필요한시기에서버와클라이언트의역할을수행 순수 P2P 모델 참가자들이동등한자격으로정보를이용하는모델정보검색을위해주변의참가자에게문의 ( 요청 ) 요청은정보를찾을때까지인접한참가자에게계속전파특징 동작이단순, 비효율적 하이브리드형 P2P 모델 순수 P2P 모델을개선한방식인덱스서버가존재 정보검색을위해인덱스서버에게문의 ( 요청 ) 인덱스서버는요청한정보를가지고있는참가자의주소를반환 13
서버구현기술 서버의구현방식이네트워크성능에중요한영향을줌 서버구현기술연결형과비연결형서버 iterative와 concurrent 서버 14
연결형과비연결형서버 연결형서비스 종점간연결설정 / 해제, 데이터송수신등세단계의절차를거침주로 TCP를이용하여작성데이터의안정적인전달을보장 TCP 프로토콜, telnet, ftp 등각클라이언트마다연결을개설 클라이언트수가증가하면서버에부담이클수있음 비연결형서비스 종점간연결설정 / 해제작업없이바로데이터를주고받는방식주로 UDP를이용하여작성안정적인데이터전달을보장하지않으므로응용프로그램에서처리클라이언트마다연결을설정할필요가없음 서버의부담이적음 ( 메모리사용등 ) 방송형, 멀티캐스팅형서비스에적합 15
Iterative 와 Concurrent 서버 Iterative 서버클라이언트의요청을순서대로처리클라이언트의요청이짧은시간에처리할수있는경우에적합 Concurrent 서버보다구현이간단함 Concurrent 서버클라이언트의요청을동시에처리다중처리기능이필요 예 ) 멀티프로세스에의한다중처리 새로운클라이언트접속시이클라이언트를담당하는프로세스생성 클라이언트의증가에따라프로세스수도증가 다중화이용 여러작업을동시에처리하는기능 각서비스처리시간이불규칙적이거나길때필요 16
네트워크프로그램영역 네트워크프로그램의구현영역에따른분류컴퓨터사이의데이터통신 (data communication) TCP/IP 등의통신프로토콜을이용한패킷송수신컴퓨터내의데이터처리 (data processing) 파일입출력, 데이터베이스액세스, 캐싱, 멀티미디어신호처리등컴퓨터내의프로세스간통신 (inter-process communication) 멀티프로세스, 멀티스레드 프로세스작업분담기술등 17
소켓정의 TCP나 UDP와같은트랜스포트계층을이용하는 API 1982년 BSD 유닉스 4.1에서소개모든유닉스운영체제에서제공 Windows는 Winsock으로제공 Java는 Network 관련클래스제공 5-7 응용 1 응용 2 응용 3 소켓 1 소켓 2 소켓 3 소켓인터페이스 4 3 2 1 TCP/IP 네트워크드라이버 18
소켓번호 유닉스는모든파일, 장치등을파일로취급파일디스크립터, 키보드, 모니터, 하드웨어장치, 소켓등 소켓디스크립터소켓을개설하여얻는파일디스크립터 데이터를송수신할때사용 파일또는소켓정보구조체 디스크립터테이블 3 pointer 4 pointer 5 pointer ( 파일 ) ( 파일 ) ( 소켓 ) family : PF_INET service : SOCK_STREAM local IP local port remote IP remote port 19
소켓번호 응용프로그램과소켓그리고 TCP/IP 의관계 20
소켓의생성 소켓은 TCP/IP 만을위해정의된것은아님 TCP/IP, 유닉스네트워크, XEROX 네트워크등에서사용가능 따라서, 소켓개설시프로토콜체계를지정해야함 #include <sys/types.h> #include <sys/socket.h> int socket ( int domain, int type, int protocol); 지정할수있는프로토콜체계의종류 // 프로토콜체계 // 서비스타입 // 소켓에사용할프로토콜 PF_INET PF_INET6 PF_UNIX PF_NS PF_PACKET // 인터넷프로토콜체계 // IPv6 프로토콜체계 // 유닉스방식의프로토콜체계 // XEROX 네트워크시스템의프로토콜체계 // 리눅스에서패킷캡쳐를위해사용 서비스타입 SOCK_STREAM SOCK_DGRAM SOCK_RAW // TCP 소켓 // UDP 소켓 // RAW 소켓 21
소켓사용절차 TCP ( 연결형 ) 소켓프로그래밍절차 서버클라이언트 socket() socket() bind() listen() 연결요청 connect() accept() send() recv() 데이터송수신 종료 recv() send() close() 22
소켓사용절차 UDP ( 비연결형 ) 소켓프로그래밍절차 TCP와달리일대일통신에만사용되지않음비연결형소켓 Connect() 시스템콜을사용할필요가없음 소켓개설후바로상대방과데이터를송수신 서버 socket() 클라이언트 socket() bind() recvfrom() sendto() 데이터송수신 sendto() recvfrom() 종료 close() 23
Hello World! 서버 / 클라이언트 프로그램예제 helloworld_server.c, helloworld_client.c 실행하기포트번호는 123+ 각자아이디 Ex) ID : 25 = 12325 24
파일의조작 25
저수준파일입출력 (Low-Level File Access) 리눅스혹은윈도우즈자체에서제공해주는파일입출력함수를사용하여파일을관리 ( 파일의생성및삭제, 데이터입력및출력 ) 하는것을의미함. 리눅스에서는모든것을파일로관리한다. 파일, 소켓, 표준입력, 표준출력. 파일에파일디스크립터를할당해서관리 ( 파일디스크립터는정수 ) 26
파일디스크립터 (File Descriptor) 파일을관리하기위해서모든파일 ( 파일, 소켓표준입력, 표준출력 ) 에파일디스크립터를할당해준다. 파일디스크립터 대 상 0 표준입력 1 표준출력 2 표준에러출력 Program 5 7 Operating System 파일 A 소켓 B 소켓 C 파일 D 27
#include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> int open(const char *path, int flag); File open 및 close 성공시파일디스크립터, 실패시 -1 리턴 path : 파일의경로를포함한이름을나타내는문자열의포인터 flag : 파일오픈모드 MODE 의미 O_CREAT O_TRUNC O_APPEND O_RDONLY O_WRONLY O_RDWR 필요한경우파일을생성존재하던데이터를모두삭제존재하던데이터보존하고뒤에이어서저장읽기전용모드로파일을오픈쓰기전용모드로파일을오픈읽기쓰기겸용모드로파일을오픈 #include <unistd.h> int close(int fildes); 성공시 0, 실패시 -1 리턴 Fildes : 닫아줄파일의파일디스크립터 28
Data read & write #include <unistd.h> ssize_t write(int fildes, const void * buf, size_t nbytes); 성공시전달한바이트수, 실패시 -1 리턴 fildes : 데이터전송영역을나타내는파일디스크립터 buf : 전송할데이터를가지고있는버퍼의포인터 nbytes : 전송할데이터의바이트수 #include <unistd.h> ssize_t read(int fildes, void *buf, size_t nbytes); 성공시수신한바이트수 ( 단, EOF 만나면 0), 실패시 -1 리턴 fildes : 데이터를전송해주는대상을가리키는파일디스크립터 buf : 수신한데이터를저장할버퍼를가리키는포인터 nbytes : 수신할최대바이트수 29
예제 확인 프로그램 예제 low_open.c, low_read.c, fd_seri.c 실행하기 30