3학년/네트워크 프로그래밍

네트워크_Chpater04 - UNIX C 소켓

김야키 2018. 10. 1. 19:10

Chapter04 – UNIX C 소켓


1.     정의

l  응용 프로그램을 개발할 때 TCP/UDP 또는 IP(raw socket)를 이용하여 프로그램을 개발 할 수 있도록 지원


l  유닉스/리눅스에서의 소켓 인터페이스

ü  파일 입출력과 유사한 구조


l  소켓 디스트립터

ü  sd = socket(AF_INET, SOCK_STREAM, 0)


l  소켓 함수 포멧

ü  int socket(int family, int type, int protocol)

ü  family

Ø  AF_INET: AF_INET(인터넷 주소 체계) -> 주로 사용

Ø  AF_UNIX(유닉스 주소 체계)

Ø  AF_INET6(128비트 IPv6 주소 체계) -> IPv6일 때 사용

ü  type: 서비스 타입을 의미

Ø  연결형(stream) 서비스를 위해서는 SOCK_STREAM을 사용(연결은 대부분 TCP)

Ø  비연결형(datagram) 서비스를 위해서는 SOCK_DEGRAM을 사용(비연결형은 UDP)

ü  Protocol: 소켓 지원 프로그램 지정, 보통 0 사용


 

l  소켓 프로그램에서는 소켓 주소를 담을 구조체

struct sockaddr{                   /* 소켓의 타입과 형태 */

u_short sa_family;                      /* address family */

char sa_data[14];            /* address */

};


struct sockaddr_in{               /* 소켓에 들어가는 정보들 */

short sin_family;             /* 주소 패밀리 */

u_short sin_port;            /* 16비트 포트 번호 */

struct in_addr sin_addr;    /* 32비트 IP 주소 */

char sin_sero[8];             /* 더미 문자열: 전체 크기를 맞추기 위함 */

}


l  소켓을 이용한 네트워크 연결 절차

ü  서버 진행 순서

socket( )

bind( ) -> 내가 지정한 IP주소와 포트번호와 TCP/UDP 결정됨

listen( ) -> 서버만 가지고 있음

accept( ) -> 클라이언트와 연결을 허용

---------------------------------------------------- 클라이언트 요청 시까지 대기

                                                              클라이언트 진행 방식

                                                              socket( )

                                                              connect( ) -> 서버와 연결 설정

read( ): 받을 준비 ß----- 요청 데이터 --------    write( )

write( ): 입력 준비 --------- 응답 데이터 ----à   read( )


ü  만약 Thread가 하나라면 클라이언트가 데이터를 입력 도중에 다른 클라이언트는 데이터 입력이 불가능함

ü  Sing Thread는 한 쪽에서 입력을 하면 한 쪽에서는 받을 준비를 해야 한다.


l  기본 과정

ü  서버가 소켓을 만든다.

ü  클라이언트가 서버의 소켓을 요청한다.

ü  서버는 해당 요청에 맞는 서비스를 만들어서 클라이언트와 통신을 한다.

ü  클라이언트를 서비스 하기 시작하면 서버의 소켓은 서비스와 분리 시킨다.

ü  서비스에서는 읽기, 쓰기 전용으로 나눈다.

ü  클라이언트 측에서도 읽기, 쓰기 전용으로 나눈다.