Socket
소켓의 사전적 의미는 "전구 따위를 끼워 넣어 전선과 접속되게 하는 기구"이다.
우리가 소켓이라는 단어를 들었을 때 흔히 전구 소켓을 떠올리는 것처럼,
네트워크에서 사용되는 소켓의 의미도 마찬가지로 프로그램이 네트워크에서 데이터를 송수신 할 수 있도록 해주는
”네트워크 환경에서 클라이언트와 서버가 서로 연결할 수 있게 만들어진 연결부” 를 의미한다.
조금 더 명확하게 통용되고 있는 소켓의 정의로는 네트워크 상에서 동작하는 두 프로세스 간 통신의 종착점(EndPoint)이다.
EndPoint란
IP 주소와 Port 번호의 조합으로 즉, 최종 목적지의 역할을 한다.
소켓은 애플리케이션 계층에 존재하는 프로세스들이 전송 계층의 네트워크를 통해 데이터를 통신할 수 있도록 연결해주는 연결부이다.
데이터를 송수신 할 땐 누가, 어디로 보낼지를 정하는 IP주소와 포트 번호가 필요하고, 소켓은 포트 번호에 바인딩되어 전송 계층에서 데이터를 주고 받는 애플리케이션을 식별할 수 있게 한다.
IP주소: 데이터를 전달받을 호스트의 주소
포트 번호: 그 데이터를 전달 받을 호스트 안에서 원하는 프로세스를 찾는 용도로 사용
정리하자면, 소켓 안에는 다음과 같은 정보들이 포함된다.
- 프로토콜
- 호스트 IP 주소 (Source IP Address)
- 호스트 Port 번호 (Source Port Number)
- 목적지 IP 주소 (Destination IP Address)
- 목적지 Port 번호 (Destination Port Number)
소켓의 특징
데이터를 주고 받는 프로세스 간의 양방향 통신을 목적으로 하기 때문에, 클라이언트와 서버의 구조를 가진다.
이 때 서버는 특정 포트 번호에 바인딩하여 작동하고, 소켓을 통해 클라이언트의 요청을 리스닝하며 대기한다.
클라이언트는 이미 리스닝하고 있는 서버의 IP 주소 및 포트 번호를 알고 있기 때문에 이에 해당하는 서버에 연결을 시도하게 되고,
순조롭게 연결이 진행되고 나면, 서버는 같은 포트에 바인딩 된 새로운 소켓을 형성한 뒤 기존의 연결된 소켓으로는 연결된 클라이언트의 요청을 처리한다.
따라서, 같은 포트에 여러 개의 소켓을 생성하여 사용할 수 있다.
위의 과정을 거쳐 소켓을 통해 연결이 완료되면, 데이터를 주고 받은 후 연결이 끊어지는 것이 아니라 양 쪽에서 실시간으로 통신을 할 수 있게 된다.
그렇기 때문에 실시간으로 메세지를 송수신하는 채팅서비스나 스트리밍 서비스에서 주로 사용된다.
'Network > OSI 7 Layer' 카테고리의 다른 글
[OSI 7계층/Application] 응용 계층 - HTTP (0) | 2023.04.08 |
---|---|
[OSI 4계층/Transport] 전송 계층 (0) | 2023.04.08 |
[OSI 3계층/Internet] 네트워크 계층 (0) | 2023.04.08 |
[OSI 1,2 계층/Network Access] 물리 계층, 데이터 링크 계층 (0) | 2023.04.08 |