본문 바로가기

Foundation/- TCP IP

(1) 리스닝 소켓의 전반적인 생성과정

▶ 네트워크 프로그래밍이란?

- 소켓이라는 것을 기반으로 프로그래밍을 하기 때문에 소켓 프로그래밍이 라고도 한다.

- 네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 데이터 송수신 프로그램의 작성을 의미 한다.

 

▶ 소켓에 대힌 간단한 이해

- 네트워크(인터넷)의 연결 도구

- 운영체제에 의해 제공이 되는 소프트웨어적인 장치

- 소켓은 프로그래머에게 데이터 송수신에 대한 물리적, 소프트웨어적 세세한 내용을 신경 쓰지 않게 한다.

 

▶ 소켓의 전기와의 비유 

(1) 소켓의 생성(전화기의 장만)

- TCP 소켓은 전화기에 비유될 수 있다.

- 소켓은 socket 함수의 호출을 통해서 생성한다.

- 소켓의 생성은 전화기의 장만에 비유할 수 있다.

- 단, 전화를 거는 용도의 소켓과 전화를 수신하는 용도의 소켓 생성 방법에는 차이가 있다.

 

- #include <sys/socket.h>

int socket(int domain, int type, int protocol);    // 소켓의 생성

 

(2) 소켓의 주소 할당 및 연결(전화번호 할당)

- 전화기에 전화번호가 부여되듯이 소켓에도 주소정보가 할당된다.

- 소켓의 주소정보는 IP와 PORT번호로 구성이 된다.

 

#include <sys/socket.h>

int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);  // 주소의 할당

 

(3) 연결요청이 가능한 상태의 소켓(전화기의 케이블 연결)

- 연결요청이 가능한 상태의 소켓은 걸려오는 전화를 받을 수 있는 상태에 비유할 수 있다.

- 전화를 거는 용도의 소켓은 연결요청이 가능한 상태의 소켓이 될 필요가 없다. 이는 걸려오는 전화를 받는 용도의 소켓에서 필요한 상태이다.

 

- #include<sys/socket.h>

int listen(int sockfd, int backlog);

// 소켓에 할당된 IP와 PORT번호로 연결요청이 가능한 상태가 된다.

 

(4) 연결요청의 수락(수화기를 드는 것)

- 걸려오는 전화에 대해서 수락의 의미로 수화기를 드는 것에 비유할 수 있다.

- 연결요청이 수락되어야 데이터의 송수신이 가능하다.

- 수락된 이후에 데이터의 송수신은 양방향으로 가능하다.

- #include<sys/socket.h>

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

//연결요청 가능한 상태로 변경

- accept 함수호출 이후에는 데이터의 송수신이 가능하다. 단, 연결요청이 있을 때에만 accept 함수가 반환을 한다.

 

# 위 설명의 연결요청을 허용하는 소켓의 생성 과정을 요약하면 다음과 같다.

(1) - 소켓의 생성                                         // socket 함수호출

(2) - IP와 PORT번호의 할당                            // bind 함수 호출

(3) - 연결요청 가능상태로 변경                       // listen 함수 호출

(4) - 연결요청에 대한 수락                             // accept 함수 호출

 

▶ 서버(리스닝 소켓)의 특징

- 연결요청을 허용하는 프로그램을 가리켜 일반적으로 서버(Server)라 한다.

- 서버는 연결을 요청하는 클라이언트보다 먼저 실행되어야 한다.

- 클라이언트보다 복잡한 실행의 과정을 거친다.

- 아래는 "Hello World!"를  응답해주는 서버 프로그램을 구현한 것이다. 코드 상의 내용을 간단히 확인하고 넘어가면 된다.