소켓(Socket)
네트워트에서 사용되는 소켓의 의미는 프로그램이 네트워크에서 데이터를 송수신 할 수 있도록, "네트워크 환경에서 클라이언트와 서버가 서로 연결할 수 있게 만들어진 연결부"
조금 더 명확하고 통용되고 있는 소켓의 정의
네트워크 상에서 돌아가는 두 개의 프로세스 간 양방향 통신의 하나의 엔드포인트이며, 여기서 엔드포인트는 IP주소와 포트 번호의 조합을 의미합니다.
소켓은 포트 번호에 *바인딩되어 전송계층에서 데이터를 주고 받는 어플리케이션을 식별할 수 있게 합니다.
어플리케이션 계층에 존재하는 프로세스들은 데이터를 주고 받기 위해 소켓을 거쳐 전송 계층의 네트워크로 전달함으로써 데이터를 송수신 할 수 있습니다.
이 때, 누가 어디로 보낼지를 정하는 IP주소와 포트 정보가 필요합니다.
IP 주소는 데이터를 전달받을 호스트의 주소를 가리키고, 포트 번호는 그 데이터를 전달받을 호스트 안에서 원하는 프로세스를 찾는 용도로 사용됩니다.
*바인딩 : 프로그램에서 모든 주소를 절대 주소로 바꾸어 주기억 장치의 고정된 부분에 묶어 놓는 일.
소켓 안에 포함되는 정보
프로토콜
호스트 IP 주소 (Source IP Address)
호스트 Port 번호 (Source Port Nunber)
목적지 IP 주소 (Destination IP Address)
목적지 Port 번호 (Destination Port Number)
소켓의 특징
데이터를 주고 받는 프로세스 간의 양방향 통신을 목적으로 하기 때문에, 클라이언트와 서버의 구조를 가집니다.
이때 서버는 특정 포트 번호에 바인딩하여 작동하고, 소켓을 통해 클라이언트의 요청을 리스닝하며 대기합니다.
클라이언트는 이미 리스닝하고 있는 서버의 IP주소 및 포트 번호를 알고 있기 때문에, 이에 해당하는 서버에 연결을 시도하게 됩니다.
순조롭게 연결이 진행되고 나면, 서버는 같은 포트에 바인딩 된 새로운 소켓을 형성하고, 기존의 연결된 소켓으로는 연결된 클라이언트의 요청을 처리합니다.
따라서 같은 포트에 여러 개의 소켓을 생성하여 사용할 수 있습니다.
위의 과정을 거쳐 소켓을 통해 연결이 완료되면, 데이터를 주고 받은 후 연결이 끊어지는 것이 아니라 양 쪽에서 실시간으로 통신할 수 있습니다.
따라서 실시간으로 메세지를 송수신 하는 채팅서비스나 스트리밍 서비스에서 주로 사용됩니다.
댓글