소켓 프로그래밍이 무엇인지 간단하게 다뤄보자.
소켓(Socket)은 프로세스 간 소통을 위한 인터페이스이다. OS라는 우체통의 Socket이라는 구멍을 통해 프로세스가 소통한다고 생각하면 이해가 쉽다.
TCP 기반의 소켓(SOCK_STREAM)과 UDP 기반의 소켓(SOCK_DGRAM)이 있는데, HTTP는 SOCK_STREAM을 사용한다.
Sockets API란?
Sockets API란 운영체제에서 제공하는 시스템콜 중 네트워크와 관련된 기능을 제공하는 시스템콜들의 집합을 말한다.
TCP기반 소켓의 연결 과정을 살펴보자.
- TCP 서버에서 socket()을 호출한다.
- 포트 번호를 bind()한다.
- listen()을 통해 서버측에서 듣도록 한다.
- accept()까지 실행 후 서버는 클라이언트 측으로부터 요청이 올 때까지 대기한다.
- TCP 클라이언트는 socket()을 호출하고 서버 측에 connect()를 통해 연결한다.
- 클라이언트와 서버가 결합되어 클라이언트의 write()를 서버가 read()할 수 있다.
- close()를 통해 연결이 해제된다.
1. Server
- socket(): 소켓을 생성한다.
- bind(): 생성한 socket에 특정 도메인을 연결한다.
- listen(): 소켓을 서버에서 listen 하는 용도로 사용한다.
- accept(): 클라이언트의 요청이 있을 때까지 대기한다.
- close(): 소켓에서 활용한 리소스와 포트를 해제한다.
2. Client
- socket(): 소켓을 생성한다.
- connect(): 소켓에 연결한다.
- write(): 소켓을 서버에 write 하는 용도로 사용한다.