ETC

소켓(Socket) 포트(Port) 뜻과 차이

curiousKidd 2022. 9. 20. 17:20

HOST

네트워크에 연결된 모든 종류의 장치를 노드(Node)라고 부르는데, 노드 중에서도 네트워크 주소(IP 주소)가 할당된 애들을 호스트(Host)라고 부른다. 스마트폰이든 데스크톱이든 노트북이든 인터넷에 연결돼 있으면 다 호스트라고 보면 된다. 이 호스트들끼리 서로 데이터를 주고받는다.

실제로 데이터를 주고받는 것은 호스트 내 프로세스다

프로그램, 애플리케이션, 앱, 소프트웨어를 모두 프로세스로 용어를 통일해서 설명하겠다. 한 컴퓨터나 스마트폰 내에는 여러 개의 프로세스들이 존재하며 이 프로세스들은 동시에 혹은 마치 동시라고 느껴지게끔 동작한다. 예를 들어볼까? 음악을 들으면서 인터넷을 하거나, 게임을 하면서 영화를 다운로드하는 것 등등이 한 호스트에서 동시에 여러 프로세스들이 동작하는 예이다. 지금 여러분도 이 글 보면서 동시에 음악을 듣고 있을 지도 모른다.

네트워크 공간 상에서 데이터를 주고받는다는 것은, 엄밀히 말하면 호스트의 프로세스까지 데이터가 오고 감을 의미한다.

상상해보자. 카톡을 통해 전송한 메시지는 당연히 ( 보안이 유지돼야 한다. ) 상대방의 카톡에 도착해야 한다.
친구가 인스타그램에 맛집 사진을 올렸다면, 내 스마트폰의 ( 페이스북이 아니라 ) 인스타그램에서 해당 사진이 보여야 한다.
이처럼 데이터를 주고받는 것은 호스트의 프로세스 레벨까지 일어나는 일이다.


이제 정말로 소켓(Socket)과 포트(Port)를 알아보자.

'데이터는 프로세스 레벨에서 주고받는다'_라는 것을 이해했고, '호스트에서는 여러 프로세스가 동시에 동작한다' 라는 것을 이해했다면, '데이터가 네트워크를 타고 목적지 호스트에 도착했다고 끝이 아니라, 그 호스트에서 동작하는 여러 프로세스 중에 실제로 이 데이터를 받아야 하는 프로세스까지 전달되야 한다' 라는 것도 이해했을 것이다. 이를 위해 포트가 등장한다.

포트(Port)는, 네트워크를 통해 데이터를 주고받는 프로세스를 식별하기 위해 호스트 내부적으로 프로세스가 할당받는 고유한 값이다.

이 값은 숫자로 표현되기 때문에, 포트 넘버(Port number)라고도 한다. 데이터를 담고 있는 편지봉투에 목적지의 포트가 28080으로 적혀있다면, 목적지 호스트에 도착한 뒤에 해당 호스트에서 28080 포트를 할당받은 프로세스를 찾아서 데이터를 전달해야 한다.

그럼 포트는 데이터를 받기 위해서'만' 필요한 걸까? 노노노~!! 그렇지 않다. 데이터를 보내는 호스트의 프로세스도 반드시 보내기 전에 포트 번호를 할당받아서 보내야 한다. 만약 데이터를 요청하는 호스트가 발신인 불명으로 요청을 보내면 어떻게 될까? 요청받은 호스트의 프로세스가 봉투를 받았는데, 봉투에 발신인이 없다;; 요청한 내용을 처리해서 보내주고 싶어도, 어디로 보내줘야 할지 모른다. 이런 불상사를 막기 위해, 데이터를 보내는 프로세스도 반드시 포트 넘버를 할당받아야 한다.

Socket

소켓(Socket)은, 프로세스가 네트워크를 통해서 데이터를 주고받으려면 반드시 열어야 하는 창구 같은 것이다.

컴퓨터 세계관에서는 프로세스가 데이터를 보내고 싶다고 해서 막 보낼 수 있는 게 아니고, 그들만의 법칙이 있는데, 바로 보내는 쪽도 받는 쪽도 소켓을 열어야 한다는 점이다. 보내는 쪽이 소켓이라는 창구를 열고 소켓을 통해서 데이터를 보내면 네트워크 모델에 따라 목적지 호스트에 데이터가 도착하게 되고, 데이터를 담은 봉투에 써진 도착지의 포트 넘버와 같은 포트를 할당받은 프로세스를 찾아서, 그 프로세스의 소켓을 통해 해당 프로세스에 데이터를 전달한다.

소켓을 열기 위해선 호스트에 할당된 IP 주소, 포트 넘버, 프로토콜(Protocol) 등이 필요하며, 이 세 가지가 소켓을 정의한다.


소켓과 포트는 다르다!

프로세스가 네트워크 통신을 하기 위해서는 포트를 할당받아야 하는데, 서버의 경우에는 보통 하나만 할당받는다.

왜냐하면 같은 프로세스가 같은 포트를 가지고도 여러 개의 소켓을 열 수 있기 때문이다. 요게 매우 중요하다.

나도 이것을 헷갈려 했었다.

흥미롭게도 하나의 프로세스는 같은 프로토콜, 같은 IP 주소, 같은 포트 넘버를 가지는 수십 혹은 수만 개의 소켓을 가질 수 있다.

이런 이유 때문에 하나의 프로세스는 하나의 포트만으로도 다른 여러 호스트에 있는 프로세스의 요청을 처리할 수 있고,

게임 서버의 동시 접속자 수가 수십수백만이 될 수 있는 것이다.

소켓을 정의하는 것과 소켓을 식별하는 것을 구분하자.

IP 주소, 포트 넘버, 프로토콜로 소켓을 정의할 수 있지만, 이것이 소켓을 유일하게 식별하진 않는다.

이름이 홍길동이라고 해도 여러 홍길동이 있는 것처럼, 같은 IP 주소, 포트 넘버, 프로토콜을 가지는 소켓이라고 해도, 서로 다른 소켓이 존재하는 것이다.


후아~ 모든 이야기가 끝이 났다. 소켓과 포트의 차이가 이제는 좀 이해가 될까? 정리하면 이렇다.

포트(Port)는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 프로세스가 할당받아야 하는 고유한 숫자이다. 한 호스트 내에서 네트워크 통신을 하고 있는 프로세스를 식별하기 위해 사용되는 값이므로, 기본적으로는 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없다. (방법이 있긴 하다.)

소켓(Socket)은 프로세스가 드넓은 네트워크 세계로 데이터를 내보내거나 혹은 그 세계로부터 데이터를 받기 위한 실제적인 창구 역할을 한다. 그러므로 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다.

소켓은(Socket)은 프로토콜, IP 주소, 포트 넘버로 정의된다.

[출처] 소켓(Socket) 포트(Port) 뜻과 차이|작성자 딩동

'ETC' 카테고리의 다른 글

Decoupled Architecture - 백엔드와 프론트엔드의 분리  (0) 2023.04.11
WEB SOCKET  (0) 2022.11.23
SOCKET 통신  (1) 2022.11.22
Web Server? WAS?  (0) 2022.05.20
LocalDateTime( yyyyMMddHHmmssSSS)  (1) 2022.04.13