Network_15 : 포트

이준익·2026년 5월 28일

IP 주소는 네트워크에서 호스트를 찾기 위한 주소다.

여기서 호스트는 쉽게 말해 네트워크에 연결된 컴퓨터, 서버, 스마트폰 같은 장비라고 볼 수 있다.
그런데 실제 통신은 호스트까지만 도착한다고 끝나는 게 아니다.

내 컴퓨터가 어떤 서버에 요청을 보낸다고 해보자.
IP 주소를 이용하면 “어느 서버로 갈지”는 정할 수 있다.
하지만 그 서버 안에는 여러 프로그램이 동시에 실행되고 있을 수 있다.

웹 서버도 떠 있을 수 있고, 데이터베이스도 있을 수 있고, SSH 접속을 받는 프로그램도 있을 수 있다.
그러면 도착한 데이터는 그중 어떤 프로그램에게 전달되어야 할까?

이 문제를 해결하기 위해 등장하는 개념이 포트다.

IP 주소의 한계

IP 주소는 목적지 호스트를 찾는 데 사용된다.

예를 들어 택배로 비유하면 IP 주소는 건물 주소에 가깝다.

서울시 어딘가에 있는 특정 건물까지 택배를 보내는 것.
여기까지가 IP 주소의 역할이라고 볼 수 있다.

그런데 건물에 도착했다고 해서 택배 전달이 끝나는 것은 아니다.
그 건물 안에는 여러 사무실이 있을 수 있다.

1층 카페로 가야 할 수도 있고,
3층 회사 사무실로 가야 할 수도 있고,
5층 관리실로 가야 할 수도 있다.

IP 주소만 있으면 “건물”까지는 갈 수 있지만,
“건물 안의 어느 사무실”로 가야 하는지는 알 수 없다.

네트워크에서도 비슷하다.

IP 주소는 서버라는 호스트까지 데이터를 보내는 데 필요하다.
하지만 서버 안에서 실행 중인 어떤 애플리케이션이 이 데이터를 받아야 하는지는 IP 주소만으로 구분할 수 없다.

여기서 중요한 건, 네트워크 통신의 최종 도착지는 단순히 컴퓨터가 아니라 그 안에서 실행 중인 프로그램이라는 점이다.

포트란 무엇인가

포트는 호스트 내부에서 애플리케이션이나 프로세스를 구분하기 위한 번호다.

IP 주소가 “어느 컴퓨터로 갈 것인가”를 나타낸다면,
포트는 “그 컴퓨터 안의 어떤 프로그램으로 갈 것인가”를 나타낸다.

다시 택배 비유로 보면 이렇다.

IP 주소: 건물 주소
포트 번호: 건물 안의 사무실 번호

데이터가 서버까지 도착했을 때 운영체제는 포트 번호를 확인한다.

“이 데이터는 80번 포트로 왔네?”
“그럼 웹 서버 프로세스에게 전달해야겠다.”

“이 데이터는 22번 포트로 왔네?”
“그럼 SSH 서버 프로세스에게 전달해야겠다.”

이런 식으로 포트 번호를 보고 데이터를 넘겨줄 프로그램을 결정한다.

즉, 포트는 네트워크 데이터를 실제 애플리케이션까지 이어주는 마지막 구분자라고 볼 수 있다.

전송 계층은 왜 필요할까

포트는 전송 계층에서 다루는 중요한 개념이다.

이전까지 IP를 보면서 네트워크 계층의 역할을 살펴봤다.
네트워크 계층은 목적지 호스트까지 데이터를 보내는 데 관심이 있다.

하지만 호스트에 도착한 데이터가 어떤 프로세스로 가야 하는지는 또 다른 문제다.
이 역할을 맡는 계층이 전송 계층이다.

전송 계층은 호스트와 호스트 사이의 통신을 넘어서,
실제로는 프로세스와 프로세스 사이의 통신을 가능하게 해준다.

브라우저가 웹 서버에 요청을 보낸다고 할 때,
겉으로 보면 “내 컴퓨터가 서버에 요청한다”라고 말한다.

하지만 조금 더 정확히 보면 이렇다.

내 컴퓨터의 브라우저 프로세스가
서버의 웹 서버 프로세스에게
데이터를 보내는 것이다.

이때 필요한 정보가 IP 주소와 포트 번호다.

IP 주소로 서버를 찾고,
포트 번호로 서버 안의 웹 서버 프로그램을 찾는다.

웹 서버는 보통 80번과 443번 포트를 사용한다

웹에서 자주 만나는 포트 번호가 있다.

HTTP는 보통 80번 포트를 사용한다.
HTTPS는 보통 443번 포트를 사용한다.

그래서 브라우저에서 http://example.com에 접속하면 기본적으로 80번 포트로 요청을 보낸다.
https://example.com에 접속하면 기본적으로 443번 포트로 요청을 보낸다.

물론 URL에 포트 번호를 직접 적을 수도 있다.

예를 들어 이런 식이다.

http://localhost:3000

여기서 localhost는 내 컴퓨터를 의미하고,
3000은 포트 번호다.

개발할 때 React, Vite, Express, Spring 같은 서버를 실행하면 3000, 5173, 8080 같은 포트를 자주 보게 된다.

이 말은 결국 내 컴퓨터 안에서 특정 개발 서버 프로세스가 해당 포트 번호로 요청을 기다리고 있다는 뜻이다.

예를 들어 localhost:3000에 접속한다는 것은
“내 컴퓨터의 3000번 포트에서 기다리고 있는 프로그램에게 요청을 보내겠다”는 의미에 가깝다.

포트 번호는 아무렇게나 쓰는 걸까

포트 번호는 0번부터 65535번까지 있다.

이 포트 번호들은 크게 몇 가지 범위로 나누어 볼 수 있다.

Well-known Port는 잘 알려진 포트다.
보통 0번부터 1023번까지를 말한다.

대표적으로 HTTP는 80번, HTTPS는 443번, SSH는 22번 포트를 사용한다.
이런 포트들은 많은 시스템에서 관례적으로 정해진 용도로 사용된다.

Registered Port는 특정 애플리케이션이나 서비스에서 사용하기 위해 등록된 포트 범위다.
보통 1024번부터 49151번까지다.

개발하면서 자주 보는 3306번 MySQL, 5432번 PostgreSQL, 6379번 Redis 같은 포트도 이 범위에 들어간다.

Dynamic Port 또는 Ephemeral Port는 임시로 사용되는 포트다.
보통 49152번부터 65535번까지다.

이 포트는 클라이언트 쪽에서 일시적으로 사용되는 경우가 많다.

예를 들어 내 브라우저가 웹 서버의 443번 포트로 접속한다고 해보자.
서버의 목적지 포트는 443번이다.

그런데 서버가 응답을 다시 보내려면 내 컴퓨터의 어느 포트로 보내야 할지도 알아야 한다.
이때 내 컴퓨터는 임시 포트를 하나 열어서 사용한다.

즉, 통신에는 보통 출발지 포트와 목적지 포트가 함께 들어간다.

서버 포트와 클라이언트 포트

처음에는 포트라고 하면 서버 포트만 떠올리기 쉽다.

“웹 서버는 80번 포트를 연다.”
“Spring 서버는 8080번 포트에서 실행된다.”
“DB는 3306번 포트를 사용한다.”

이런 식으로 많이 보기 때문이다.

하지만 실제 통신에서는 클라이언트도 포트를 사용한다.

예를 들어 내 브라우저가 웹 서버에 접속한다고 해보자.

내 컴퓨터는 임시 포트 하나를 사용한다.
서버는 443번 포트에서 HTTPS 요청을 기다리고 있다.

그러면 통신은 대략 이런 모양이 된다.

내 컴퓨터 임시 포트 → 서버 443번 포트

서버가 응답할 때는 반대로 돌아온다.

서버 443번 포트 → 내 컴퓨터 임시 포트

이렇게 해야 내 컴퓨터도 여러 통신을 동시에 구분할 수 있다.

브라우저 탭을 여러 개 열고,
메신저도 켜고,
게임도 실행하고,
백그라운드에서 업데이트도 진행할 수 있는 이유는
각 통신을 포트 정보로 구분할 수 있기 때문이다.

포트가 닫혀 있다는 말

개발이나 배포를 하다 보면 이런 표현을 자주 듣는다.

“포트가 열려 있나요?”
“방화벽에서 8080 포트 허용했나요?”
“서버는 떠 있는데 접속이 안 돼요.”

여기서 포트가 열려 있다는 말은 보통 해당 포트에서 요청을 받을 프로그램이 실행 중이고, 외부에서 접근할 수 있는 상태라는 뜻이다.

반대로 포트가 닫혀 있다면 몇 가지 가능성이 있다.

해당 포트에서 실행 중인 프로그램이 없을 수 있다.
프로그램은 실행 중이지만 다른 주소에만 바인딩되어 있을 수 있다.
운영체제 방화벽이 막고 있을 수 있다.
클라우드 보안 그룹이나 네트워크 ACL에서 막고 있을 수도 있다.

그래서 “서버가 살아 있다”는 말과 “서비스에 접속할 수 있다”는 말은 다르다.

서버 자체는 켜져 있을 수 있다.
IP로 ping도 될 수 있다.
하지만 내가 접속하려는 애플리케이션 포트가 열려 있지 않으면 서비스는 사용할 수 없다.

여기서 중요한 건, 네트워크 문제를 볼 때 IP 도달성과 포트 접근 가능성을 구분해서 봐야 한다는 점이다.

포트를 기준으로 통신을 다시 보면

이제 브라우저에서 웹사이트에 접속하는 흐름을 포트 관점으로 다시 볼 수 있다.

브라우저는 먼저 목적지 서버의 IP 주소를 알아낸다.
그리고 HTTPS라면 목적지 포트를 443번으로 정한다.

그다음 데이터에는 이런 정보가 포함된다.

출발지 IP
출발지 포트
목적지 IP
목적지 포트

목적지 서버에 데이터가 도착하면 운영체제는 목적지 포트를 확인한다.

“443번 포트로 들어온 데이터네.”
“그럼 HTTPS 요청을 처리하는 웹 서버 프로세스로 넘기자.”

웹 서버는 요청을 처리한 뒤 응답을 만든다.
그리고 응답은 다시 클라이언트의 IP와 임시 포트를 향해 돌아간다.

이렇게 보면 포트는 단순한 숫자가 아니다.
호스트 안에서 실제 데이터를 받아야 할 프로그램을 찾기 위한 주소 같은 역할을 한다.

IP 주소가 네트워크상의 위치를 찾는 주소라면,
포트는 그 위치 안에서 실행 중인 프로그램을 찾는 번호다.

네트워크 통신은 결국
“어느 컴퓨터로 갈 것인가”와
“그 컴퓨터 안의 어떤 프로그램으로 갈 것인가”를 함께 해결해야 한다.

IP만으로는 첫 번째 질문까지만 답할 수 있다.
두 번째 질문에 답하기 위해 포트가 필요하다.

profile
밥 잘 먹고 잠 잘 잡니다

0개의 댓글