정의
소켓은 프로세스가 네트워크를 통해 데이터를 송수신할 수 있도록 하는 창구이며,
떨어져 있는 두 호스트를 연결해주는 인터페이스의 역할을 한다.
역할에 따라 서버 소켓, 클라이언트 소켓으로 구분된다.
소켓 통신의 흐름
- 서버 소켓
1) socket() : 클라이언트와 서버를 연결할 연결용 소켓을 생성한다.
2) bind() : IP와 Port 번호를 결합한다.
3) listen() : 클라이언트의 접근 요청을 수신하는 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정한다.
클라이언트가 connect() 해오기 전까지 대기하기 때문에 listen()은 별도 스레드를 만들어서 처리한다고 한다.
4) accept() : 새로운 소켓을 만들어 클라이언트와 실질적인 연결을 수행한다.
- 클라이언트 소켓
1) socket() : 소켓을 생성한다.
2) connect() : 통신할 서버에 설정된 ip와 port 번호에 통신을 시도한다.
3) 통신 시도 시, 서버가 accept() 함수로 클라이언트의 socket descriptor를 반환한다.
4) 이를 통해 클라이언트와 서버는 서로 send(), recv()하며 데이터를 송수신한다.
소켓 종류
1) 스트림 소켓(TCP)
- 양방향으로 바이트 스트림을 전송하며, 연결 지향성을 띤다.
- 오류수정, 전송처리, 흐름제어를 보장한다.
- 송신된 순서에 따라 중복되지 않게 데이터를 수신한다.
- TCP를 사용하여 소량의 데이터보다 대량의 데이터 전송에 적합하다.
2) 데이터그램 소켓(UDP
- 비연결형 소켓이다.
- 데이터의 크기에 제한이 있다.
- 전달이 확실하게 보장되지 않고, 데이터가 손실되어도 오류가 발생하지 않는다.
- 실시간 멀티미디어 정보를 처리하기 위해 주로 사용한다.
ex) 전화
소켓 통신의 특징
- 서버와 클라이언트가 특정 포트를 통해 실시간으로 양방향 통신을 하는 방식이다.
- 연결은 close()하기 전까지 유지된다.
- 실시간 데이터 송수신에 적합하다.
- 실시간 동영상 스트리밍이나 온라인 게임에 자주 사용된다.
'■ 웹 개발 > 네트워크' 카테고리의 다른 글
네트워크 개요 (0) | 2021.04.13 |
---|---|
VPN이란? (0) | 2020.12.09 |
직렬(Serial) 통신이란? (0) | 2020.12.08 |
포트(Port)란? (1) | 2020.12.08 |