네트워크

포트(port)란 뭘까?

샥쿠 2023. 11. 25. 16:23

📚

포트?

💡
포트(port)는 항구를 의미한다. 🚢
인터넷의 바다에 연결되어 다른 곳과 통신하려면 항구를 열어놓아야 한다.
  • 네트워크 통신이 필요한 프로세스는 포트를 할당 받아서 다른 프로세스와 통신할 수 있다.
  • 네트워크 통신할 때 컴퓨터(기기)까지는 IP 주소로 찾아갈 수 있다. (네트워크 계층)
  • 그러나 컴퓨터 안에서 실행되는 특정 프로세스(웹서버, 데이터베이스 등)에 접근하려면 해당 프로세스의 포트 번호를 알아야 한다. (전송 계층)
  • 이해를 돕기 위해 다음과 같은 비유를 들어보겠다.
    • IP 주소 = 집주소
    • 포트 번호 = 방 번호
    • 프로세스 = 방 주인

프로세스는 포트 번호가 꼭 필요할까?

  • 프로세스가 반드시 포트를 할당받아 실행되어야 하는 것은 아니다. 프로세스가 네트워크를 사용하지 않는 경우 포트를 할당 받지 않고 실행될 수 있다.
  • 일을 하기 위한 방(컴퓨터의 리소스)은 주지만, 네트워크 상에서 아무도 찾아오지 않기 때문에🥲 방 번호(포트)는 붙일 필요가 없다.
    • 예시: docker daemon

      docker daemon은 백그라운드에서 도커를 관리하는 프로세스이다. 소켓(파일 시스템의 파일 같은 것)을 이용하여 컨테이너와 상호작용하며, 포트를 할당받지 않는다.

  • 한편, 하나의 포트에서는 두개 이상의 프로세스가 실행될 수 없다. 한개의 방을 두 사람이 쓸 수는 없는 것이다.
    • 1 포트 번호 → 1개의 프로세스
    • 1 프로세스 → 0 또는 1개의 포트 번호

포트 번호는 몇번까지 있을까?

  • 0 ~ 65535번 (16비트 = 2^16개)
  • 최대 65536개의 프로세스를 내맘대로 할당할 수 있는건가? 안타깝지만 그건 아니다.

웰논 포트 (Well-Known Ports)

  • 0 ~ 1023번. 특정 서비스에 할당되도록 약속되어있다.
  • 웰논 포트의 몇가지 예시
    22SSH
    80HTTP
    443HTTPS
  • 사실 포트는 임의로 지정할 수 있어서 웰논 포트에 다른 프로세스를 실행시켜도 돌아간다. 다만, 웰논 포트를 다른 용도로 사용하면 혼란이 생길 수 있으므로 정해진 용도 외에 사용하지 않는 것이 좋다.
  • 예를 들어 웹 서버를 80이 아닌 포트에 열어놓는다면 클라이언트는 해당 포트 번호로 요청하는 경우에만 웹 서버에 접근할 수 있다. 만약 88 포트에 열어놓는다면 http://example.com:88 이렇게 포트 번호를 명시해줘야 접근 가능하다.
  • 웹 브라우저는 기본적으로 HTTP 요청은 80 포트, HTTPS 요청은 443 포트로 요청한다.
    • 예시) http://google.com:80, https://google.com:443

등록된 포트 (Registered Ports)

  • 1024 ~ 49151번. 특정 애플리케이션에 할당될 수 있다.
  • 등록된 포트의 몇가지 예시
    3000NestJS
    3306MySQL
    5173Vite 개발 서버
    8080Jenkins
  • 위 예시들에서 애플리케이션은 따로 포트 번호를 설정해주지 않는다면 설정된 기본 값으로 포트를 할당한다.
  • 만약에 해당 포트에 이미 다른 애플리케이션이 돌아가고 있다면 새로운 애플리케이션은 실행되지 않고 오류가 난다.

동적 포트 (Dynamic Ports)

  • 49152 ~ 65535번. 클라이언트 애플리케이션에서 동적으로 할당하는 포트이다.
  • 동적 할당이란? 클라이언트 애플리케이션은 프로세스 생성시 포트 번호를 미리 정하지 않고, 클라이언트 OS는 포트 번호가 필요할 때마다 동적 포트 번호 범위 내에서 사용되고 있지 않은 임의의 포트를 자동으로 할당한다.
  • 크롬 브라우저를 여러개 띄우는 경우를 생각해보면 각자 다른 프로세스가 새롭게 실행되는 것이기 때문에 새로운 포트 번호를 할당 받아야 하는데, 크롬 브라우저에 하나의 포트 번호가 고정적으로 할당되어 있다면 여러개의 브라우저를 띄우지 못할 것이다. 따라서 생성될 때마다 클라이언트에서 사용하고 있지 않은 동적 포트 범위 중에서 하나를 할당해주는 것이다.

참고자료

https://inpa.tistory.com/entry/WEB-🌐-포트-란-무엇인가

https://forward-movement.tistory.com/188

https://urmaru.com/7