Network & AWS
[Socket]이란 무엇인가
Haksae
2022. 2. 4. 19:36
1. Socket
소켓은 컴퓨터 네트워크를 경유하는 프로세스 간 통신(IPC)의 종착점(End Point)이다.
오늘날 컴퓨터 간 통신의 대부분은 인터넷 프로토콜을 기반으로 하고 있으므로, 대부분의 네트워크 소켓은 인터넷 소켓이다.
이는 네트워크를 이용해 데이터를 송수신하고 싶은 프로그램들은 소켓을 거쳐야만 한다는 것을 의미한다.
- End Poing : 아이피 주소와 포트 번호의 조합을 의미한다. 모든 TCP 연결은 2개의 엔드 포인트로 유일하게 식별되어질 수 있다.OSI
- OSI 7 계층의 어플리케이션 계층(application layer)에 존재하는 네트워크 응용 프로그램들은 데이터를 송수신 하기 위해 소켓을 거쳐 전송 계층(transport layer)의 통신망으로 전달함으로써 데이터를 송수신 하게 된다.
- 따라서 소켓은 그 사이에 위치하고 있으며, 응용프로그램에서 TCP/IP를 이용하는 인터페이스 역할을 한다.
2. 소켓 통신의 흐름
- 서버 (server)
- 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
- 1) socket() 함수를 이용하여 소켓을 생성
- 2) bind() 함수로 ip와 port 번호를 설정
- 3) listen() 함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정
- 4) accept() 함수를 사용하여 클라이언트와의 연결을 기다림
- 클라이언트 소켓의 연결 요청을 대기하고, 연결 요청이 오면 클라이언트 소켓을 생성하여 통신이 가능하게 한다.
- 클라이언트(client)
- 실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
- 1) socket() 함수로 가장 먼저 소켓을 연다
- 2) connect() 함수를 이용하여 통신할 서버의 설정된 ip와 port 번호에 통신을 시도
- 3) 통신을 시도시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환
- 이를 통해 클라이언트와 서버가 서로 read(), write() 하며 통신
- 실제로 데이터 송수신이 일어나는 것은 클라이언트 소켓이다.
3. 소켓 종류
1) 스트림 (TCP)
- 양방향으로 바이트 스트림을 전송, 연결 지향성
- 오류 수정, 전송 처리, 흐름 제어 보장
- 송신된 순서에 따라 중복되지 않게 데이터를 수신 -> 오버 헤드가 발생
- 소량의 데이터보다 대량의 데이터 전송에 적합 -> TCP를 사용
2) 데이터그램 (UDP)
- 비연결형 소켓
- 데이터의 크기에 제한이 있음
- 확실하게 전달이 보장되지 않음, 데이터가 손실되도 오류가 발생하지 않음
- 실시간 멀티미디어 정보를 처리하기 위해 주로 활용
4. 소켓 통신의 특징
1) server-client 구조
- TCP/UDP 위에서 동작하므로 당연하게 server-client 통신 구조를 갖춘다.
- 처음에 데이터를 보내는 쪽이 client가 되고, 받는 쪽이 server가 된다. 이후에는 서로가 데이터를 송수신할 수 있다. (자세한 설명은 아래)
2) 양방향 통신
- socket은 한 쪽에서 데이터를 보내고 반대 편에서 이를 수신한 뒤 연결이 끊어지는게 아니라 양 쪽에서 실시간으로 데이터를 송수신할 수 있다.
- 따라서 실시간 스트리밍이나 채팅에 주로 유용하게 사용된다.
3) 프로그래밍 언어나 운영체제에 종속적
- socket은 TCP/IP 표준이 아니라 네트워크 프로그래밍 인터페이스다.
- 따라서 운영체제마다 사용법이 약간씩 다르며, 그 안에서 또 프로그래밍 언어마다 소켓 aip를 구현한 라이브러리가 다 다르다.