▶ 네트워크 프로그래밍이란?
- 소켓이라는 것을 기반으로 프로그래밍을 하기 때문에 소켓 프로그래밍이 라고도 한다.
- 네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 데이터 송수신 프로그램의 작성을 의미 한다.
▶ 소켓에 대힌 간단한 이해
- 네트워크(인터넷)의 연결 도구
- 운영체제에 의해 제공이 되는 소프트웨어적인 장치
- 소켓은 프로그래머에게 데이터 송수신에 대한 물리적, 소프트웨어적 세세한 내용을 신경 쓰지 않게 한다.
▶ 소켓의 전기와의 비유
(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!"를 응답해주는 서버 프로그램을 구현한 것이다. 코드 상의 내용을 간단히 확인하고 넘어가면 된다.
'Foundation > - TCP IP' 카테고리의 다른 글
OSI 7계층 (0) | 2017.11.18 |
---|---|
(3) 소켓의 타입과 프로토콜의 설정 (0) | 2017.09.22 |
(2) 연결을 요청하는 소켓의 구현(클라이언트 소켓) 및 서버 접속 (0) | 2017.09.07 |