IWished
article thumbnail

Socket

소켓의 사전적 의미는 "전구 따위를 끼워 넣어 전선과 접속되게 하는 기구"이다.

우리가 소켓이라는 단어를 들었을 때 흔히 전구 소켓을 떠올리는 것처럼,

네트워크에서 사용되는 소켓의 의미도 마찬가지로 프로그램이 네트워크에서 데이터를 송수신 할 수 있도록 해주는

네트워크 환경에서 클라이언트와 서버가 서로 연결할 수 있게 만들어진 연결부” 를 의미한다.

 

조금 더 명확하게 통용되고 있는 소켓의 정의로는 네트워크 상에서 동작하는 두 프로세스 간 통신의 종착점(EndPoint)이다.

EndPoint란
IP 주소와 Port 번호의 조합으로 즉, 최종 목적지의 역할을 한다.

소켓은 애플리케이션 계층에 존재하는 프로세스들이 전송 계층의 네트워크를 통해 데이터를 통신할 수 있도록 연결해주는 연결부이다.

데이터를 송수신 할 땐 누가, 어디로 보낼지를 정하는 IP주소와 포트 번호가 필요하고, 소켓은 포트 번호에 바인딩되어 전송 계층에서 데이터를 주고 받는 애플리케이션을 식별할 수 있게 한다.

 

IP주소: 데이터를 전달받을 호스트의 주소
포트 번호: 그 데이터를 전달 받을 호스트 안에서 원하는 프로세스를 찾는 용도로 사용

 

정리하자면, 소켓 안에는 다음과 같은 정보들이 포함된다.

  • 프로토콜
  • 호스트 IP 주소 (Source IP Address)
  • 호스트 Port 번호 (Source Port Number)
  • 목적지 IP 주소 (Destination IP Address)
  • 목적지 Port 번호 (Destination Port Number)

소켓의 특징

데이터를 주고 받는 프로세스 간의 양방향 통신을 목적으로 하기 때문에, 클라이언트와 서버의 구조를 가진다.

 

이 때 서버는 특정 포트 번호에 바인딩하여 작동하고, 소켓을 통해 클라이언트의 요청을 리스닝하며 대기한다.

클라이언트는 이미 리스닝하고 있는 서버의 IP 주소 및 포트 번호를 알고 있기 때문에 이에 해당하는 서버에 연결을 시도하게 되고,

순조롭게 연결이 진행되고 나면, 서버는 같은 포트에 바인딩 된 새로운 소켓을 형성한 뒤 기존의 연결된 소켓으로는 연결된 클라이언트의 요청을 처리한다.

따라서, 같은 포트에 여러 개의 소켓을 생성하여 사용할 수 있다.

 

위의 과정을 거쳐 소켓을 통해 연결이 완료되면, 데이터를 주고 받은 후 연결이 끊어지는 것이 아니라 양 쪽에서 실시간으로 통신을 할 수 있게 된다.

그렇기 때문에 실시간으로 메세지를 송수신하는 채팅서비스나 스트리밍 서비스에서 주로 사용된다.