안녕하세요. SomeDay입니다.
최근 서버 구축을 목표로 소켓 프로그래밍에 대한 책을 보기 시작해서 해당 카테고리를 만들었습니다.
그럼 네트워크 프로그래밍을 하기 앞서, 먼저 인터넷에 대해 알아볼까요?
인터넷: 전세계를 걸쳐 파일 전송, 메일 등 데이터 통신 서비스를 받을 수 있는 네트워크 시스템.
국내에는 국내 네트워크 망이 있습니다.
하지만 국내에서 지역으로 한정되기 때문에 해외와 연결된 네트워크 망이 필요한데요.
해외와 연결된 네트워크 망은 아래와 같이 바다 밑에 광속 케이블이 설치되어 있습니다.
위와 같은 환경을 통하여 우리는 국내 뿐만 아니라 해외와도 데이터를 주고 받을 수 있습니다.
이렇게 오늘날 컴퓨터는 인터넷이라는 거대한 물리적인 네트워크로 연결되어 있어,
우리는 소프트웨어적인 네트워크에만 신경쓰면 됩니다.
이때 사용하는 것이 소켓 프로그래밍인데,
- 소켓 프로그래밍(Socket Programming) 이란?
: 간단하게 말하면, 소켓을 이용한 네트워크 프로그래밍입니다.
- 소켓(Socket) 이란?
: 운영체제에서 제공하는 소켓은 물리적으로 연결된 네트워크 상에서의 데이터 송수신에 사용할 수 있는 소프트웨어 장치.
소켓은 크게 2가지로 구분되는데, 먼저 얘기할 내용은 TCP 소켓입니다.
책에서는 이를 전화기에 비유합니다.
전화기도 전화망을 통하여 음성 데이터를 주고 받는 구조이기 때문에 비슷하다고 볼 수 있습니다.
1. 먼저 전화를 하기 위해서는 전화가 필요합니다.
(= 소켓 프로그래밍에서 통신을 하려면 소켓을 생성해야 합니다.) -> int socket() 이라는 함수
2. 전화가 있으면 전화번호도 있어야 합니다.
(= 소켓에 IP, Port 번호, 주소 정보를 할당해야 합니다.) -> int bind() 라는 함수
- IP(Internet Protocol) 이란?
: Internet Protocol 의 약자로 네트워크상에서 다른 컴퓨터와 구별 하게끔 해주는 고유번호입니다.
- 프로토콜(Protocol) 이란?
: 네트워크 통신에서 미리 정해놓은 규약(약속)
모르는 용어가 많아도 그냥 넘어가지 마시고 구글에서 한번 검색해서 어떤 단어인지 확인하면 좋습니다!
3. 1번과 2번이 완료되면 이제 전화를 받을 수 있는 상태로 전환이 가능합니다.
(= 현재 해당 소켓은 IP, Port 번호, 주소 정보가 할당되어 있기 때문에 다른 곳에서 통신을 받을 수 있습니다.)
-> int listen() 이라는 함수
4. 누군가 전화를 걸었으면 수화기를 들어 전화를 받을 수 있습니다.
(= 다른 곳에서 데이터 송수신을 위해 연결 요청을 해오면, 이를 수락할 수 있습니다.) -> int accept() 이라는 함수
위의 내용을 정리하면,
1. int socket()으로 소켓 생성
2. int bind()로 소켓에 필요한 내용 할당
3. int listen()으로 연결 요청 가능한 상태로 변경
4. int accept()로 연결 요청이 왔을 시 이를 수락
코드로 보시면,
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
int bind(int socketfd, struct sockaddr *myaddr, socklen_t addrlen);
int listen(int socketfd, int backlog);
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
참고 영상
혹시나 잘못된 내용이 있으면 댓글로 알려주세요! 이제 서버쪽을 공부하는 상태라서 많이 부족할 수 있습니다..ㅎㅎㅎ