본문 바로가기

Operating System

[OS/네트워크] 네트워크 프로그래밍

1. 네트워크 프로그래밍?

네트워크 프로그래밍은 네트워크를 통해서 연결된 둘 이상의 컴퓨터 사이에 데이터 송수신 프로그램 개발을 하는 것.

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

 

2. 소켓?

소켓은 네트워크에 연결하기 위한 연결 도구로써, OS가 제공하는 소프트웨어적인 디바이스라 보면 된다. 소켓을 이용하면 프로그래밍을 할 때 개발자가 데이터 송수신에 대해서 HW/SW적인 세세한 내용을 신경쓰지 않아도 된다는 장점이 있다.

 

소켓은 일종의 전화기로 비유가 가능하다. 먼저 프로그램은 socket 함수를 호출해서 이 소켓을 생성할 수 있다. 단 전화를 거는 용도와 받는 용도의 소켓 생성 방법은 다르다. 여기서 우리가 게임이나 그외 소프트웨어를 사용하다보면 자주 들을 수 있는 클라이언트/서버라는 개념이 나온다.

#include <sys/socket.h>
int socket(int domain, int type, int protocol);

 

우리는 전화기를 샀다고 가정하자. 그럼 우리는 이 전화기에 전화번호를 부여해야 한다. 마찬가지로 소켓은 주소정보가 할당이 되는데, 소켓의 주소 정보는 IP와 Port 번호로 구성된다. 아래 코드에서 sockaddr이 이러한 정보를 저장하게 된다.

#include <sys/socket.h>
int bind(int sockfd, struct socketaddr * myaddr, socklen_t addrlen);

sockaddr (출처 - msdn)

연결 요청이 가능한 상태의 소켓을 만들어줘야 한다. 이는 휴대폰을 켜놓고, 전화가 오기를 기다리는 느낌으로 받아들이면 된다. 연결 요청이 가능한 상태면 걸려오는 전화를 받을 수 있다는 뜻이다. 

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

#include <sys/socket.h>
int listen(int sockfd, int backlog);

마지막으로 서버에서는 전화가 걸려오면 내가 받아도 되는 전화번호로 전화가 왔다면 이를 받아줘야 한다. 연결 요청이 수락되어야 데이터의 송수신이 가능해진다. 수락되었다면 데이터의 송수신 즉 대화가 양방향으로 가능해진다.

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr * addr, socklen_t * addrlen);

 

자 이제 정리를 하면

   1. 소켓을 생성한다. (socket)

   2. IP와 PORT 번호의 할당을 진행한다. (bind)

   3. 연결 요청 가능 상태로 변경한다. (listen)

   4. 연결 요청에 대한 수락(accept)

 

 

'Operating System' 카테고리의 다른 글

[Windows] 커널 오브젝트란?  (0) 2022.07.04
[OS/Linux] 파일 디스크립터  (0) 2022.04.24
[OS] CPU 스케쥴링  (0) 2022.02.08
[C#, OS] Monitor  (0) 2022.02.08
[OS] 쓰레드  (0) 2022.01.20