[Network] Socket & Port

어흥·2024년 5월 5일

Computer Science

목록 보기
14/28

안녕하세요! Network 편으로 돌아왔습니다. 네트워크는 개인적으로 다른 cs 보다 많이 어렵다고 느끼는데요😨

오늘은 socket과 port에 대해서 정리해보려고 합니다. 항상 많이 들어봤지만 남에게 설명할 수 없는 수준이어서 이번에 확실히 정리해보려고 합니다.

Host

네트워크 주소(IP 주소)가 할당된 노드를 Host(호스트)라고 합니다.
(Node: 네트워크에 연결된 모든 종류의 장치)

네트워크에 연결된 스마트폰, 노트북등 모든 장치가 호스트입니다. 서버-클라이언트 모델을 예시로 노트북으로 네이버 웹사이트에 접속하면 웹사이트에 대한 정보를 주고받는 것을 알 수 있습니다. 이처럼 호스트들끼리 서로 데이터를 주고받습니다.

중요한 것은 데이터는 호스트가 아닌 호스트 내 프로세스에 도착해야합니다.

호스트 내 프로세스

지금 컴퓨터에서도 여러 프로세스들이 존재합니다. 보통 유튜브를 보면서 블로그 글을 쓴다던가, 강의를 틀다던가, 이렇게 여러가지 프로그램이 실행됩니다. 이처럼 호스트 내에서 여러 프로세스가 존재합니다.

근데 만약 데이터를 주고 받는 주체가 호스트라면 동영상 데이터가 블로그 페이지 도착한다거나 블로그 글 데이터가 영상 프로세스에 도착할 것입니다...(엉망진창)

따라서 네트워크 상에서 데이터를 주고받는 것은 호스트의 프로세스 레벨까지 일어나는 일이라고 할 수 있습니다.

그럼 호스트 내에서 어떤 프로세스인지 구별해야 하겠죠? 이때 필요한 게 포트입니다!

1️⃣ Port

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

데이터를 보내거나 받는 프로세스 모두 포트를 할당받아야 합니다.

포트 번호는 크게 세 종류로 나뉘어집니다.

  • 0번 ~ 1023번: 잘 알려진 포트 (well-known port)
  • 1024번 ~ 49151번: 등록된 포트 (registered port)
  • 49152번 ~ 65535번: 동적 포트 (dynamic port)

HTTP 통신은 기본적으로 80번 포트를 사용하며, HTTPS 통신은 443번 포트를 사용합니다.

IP 주소 vs Port 번호

네트워크 상에서 다른 PC에 접속하기 위해서는, 다른 PC를 가리키는 주소를 알아야 한다. 이렇게 네트워크에 연결된 특정 PC의 주소를 IP 주소라고 합니다.

Port 번호는 같은 IP 내에서 애플리케이션 상호 구분(프로세스 구분)을 위해 사용하는 번호입니다. 포트 번호는 IP 주소가 가리키는 PC에 접속할 수 있는 통로(채널)을 의미합니다.

즉, ip 주소는 도로명 주소라고 한다면 포트번호는 동, 호수인 세부 주소라고 할 수 있습니다.

2️⃣ Socket

네트워크 소켓(network socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점(시작점, 도착점)입니다.
즉, 프로세스가 네트워크를 통해서 데이터를 주고받으려면 반드시 열어야 하는 창구라고 할 수 있습니다.

즉, 소켓은 클라이언트-서버 모델에서 클라이언트와 서버 사이에 데이터를 전송할 수 있는 통신 경로를 제공해주는 일종의 톨게이트같은 역할을 한다고 볼 수 있습니다.

  • 클라이언트 프로세스는 반드시 소켓을 열어서 소켓에 데이터를 써서 서버에게 보내야 합니다.
  • 서버 프로세스는 소켓으로부터 받은 데이터를 읽어 사용하게 됩니다.

프로세스마다 고유한 포트번호를 가지고 있으며, 여러개의 소켓을 가질 수 있습니다. 포트번호에서 보여진 정보들인 ip주소, 프로토콜 정보, 포트번호를 통해 소켓은 생성될 소켓의 종류를 결정하여 프로세스에 맞게 생성되었다가 통신이 종료되면 소켓을 삭제합니다.

인터넷 소켓은 다음과 같은 요소들로 구성되어 있습니다.

  • 인터넷 프로토콜 (TCP, UDP, raw IP)
  • 로컬 IP 주소
  • 로컬 포트
  • 원격 IP 주소
  • 원격 포트

Socket, Port 비교

포트(Port)는 네트워크 상에서 통신하기 위해서 호스트 내부적으로 구분할 수 있도록 프로세스가 할당받아야 하는 고유한 숫자로, 같은 호스트 내에서 서로 다른 프로세스가 같은 포트 넘버를 가질 수 없습니다.

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

예를 들어, 서버는 보통 포트를 하나만 할당받습니다. 같은 프로세스가 하나의 포트를 가지고도 여러 개의 소켓을 열 수 있기 때문입니다.

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

간단하게 정리하자면, 소켓이 아파트 입구의 도로라면 포트는 아파트의 동호수라고 할 수 있습니다.

참고

위키백과 _네트워크 소켓
[Network] 소켓과 포트의 의미와 차이점
소켓(Socket) 포트(Port) 뜻과 차이

0개의 댓글