본문 바로가기
전쟁과 기술

포트 번호는 왜 필요할까?

by 전쟁과 기술 2026. 8. 6.

앞선 글의 마지막에서는 HTTP와 HTTPS를 살펴보겠다고 하였다. TCP와 UDP를 통해 데이터가 전달되는 방식을 알아보았으니, 웹브라우저와 서버가 어떤 규칙으로 대화하는지를 이어서 살펴보는 것이 자연스러워 보여 그렇게 얘기했는데 고민하다 보니 뭔가 부족한 듯 한건 느낌적인 느낌인가?

HTTP를 설명하기 전에 한 가지를 먼저 알아둘 필요가 있다. 웹브라우저가 서버와 대화를 시작하려면 어느 컴퓨터로 갈 것인지만 알아서는 부족하다. 그 컴퓨터 안에서 어떤 프로그램과 통신할 것인지도 찾아야 한다.

지금까지는 IP 주소가 목적지 컴퓨터를 구분하고, 라우터가 패킷이 이동할 경로를 찾는 과정을 살펴보았다. 그런데 한 대의 컴퓨터에서는 웹브라우저와 메일 프로그램, 메신저, 게임처럼 여러 프로그램이 동시에 네트워크를 사용한다. 서버 역시 웹서비스와 파일전송 서비스, 데이터베이스와 관리 프로그램을 함께 운영할 수 있다.

패킷이 목적지 컴퓨터까지 무사히 도착해도 운영체제는 그 데이터를 어느 프로그램에 전달해야 하는지 판단해야 한다. 이때 사용하는 것이 바로 포트(Port) 번호이다. IP 주소가 목적지 컴퓨터를 찾는 주소라면 포트 번호는 그 컴퓨터 안에서 통신할 프로그램을 구분하는 번호에 가깝다.

이번 글에서는 HTTP보다 먼저 포트 번호가 왜 필요한지를 살펴본다. 포트의 역할을 알아두면 다음 글에서 웹브라우저가 웹서버와 어떻게 연결되고, HTTP와 HTTPS가 그 위에서 어떤 대화를 나누는지 훨씬 자연스럽게 이해할 수 있다.

한줄 요약
IP 주소가 데이터를 목적지 컴퓨터까지 안내한다면 포트 번호는 그 컴퓨터 안에서 데이터를 전달받을 프로그램을 구분한다.

IP 주소만으로는 왜 통신이 끝나지 않을까?

인터넷에서 IP 주소는 목적지 컴퓨터나 네트워크 장비를 식별한다. 패킷에 목적지 IP 주소가 담겨 있으면 라우터는 그 정보를 확인해 데이터가 이동할 경로를 정한다. 여러 네트워크를 통과한 패킷은 최종적으로 해당 IP 주소를 사용하는 컴퓨터에 도착한다.

그러나 컴퓨터에 도착했다는 사실만으로 데이터의 최종 목적지가 정해지지는 않는다. 오늘날의 컴퓨터는 한 번에 하나의 프로그램만 실행하지 않는다. 웹페이지를 열어둔 상태에서 이메일을 확인하고, 메신저로 대화하며, 파일을 내려받는 일이 동시에 이루어진다.

서버에서는 더 많은 통신이 한꺼번에 처리된다. 하나의 서버가 웹페이지를 제공하면서 파일을 전송하고, 데이터베이스 요청을 처리하며, 관리자의 원격 접속까지 받아들일 수 있다. 모든 통신은 같은 컴퓨터에 도착하지만 데이터를 받아야 할 프로그램은 서로 다르다.

아파트 주소를 알고 건물 앞까지 찾아왔다고 생각해 보자. 건물의 위치만 알아서는 누구를 만나야 하는지 알 수 없다. 정확한 사람에게 가려면 동과 호수에 해당하는 정보가 더 필요하다. 인터넷에서도 IP 주소가 건물의 주소라면 포트 번호는 그 안의 특정 출입구나 호수에 가깝다.

운영체제는 패킷에 담긴 포트 번호를 확인하고 해당 포트를 사용하는 프로그램에 데이터를 전달한다. 덕분에 여러 프로그램이 동시에 네트워크를 사용하더라도 각 통신은 서로 뒤섞이지 않는다.

IP 주소를 통해 서버에 도착한 데이터가 포트 번호에 따라 서로 다른 프로그램으로 전달되는 과정

포트 번호는 컴퓨터 안의 통신 출입구이다

영어 Port는 항구를 뜻한다. 배가 바다를 건너 항구에 도착하더라도 모든 화물이 같은 장소로 옮겨지는 것은 아니다. 여객선과 화물선이 이용하는 시설이 다르고, 화물의 종류에 따라 처리되는 장소도 달라진다.

네트워크의 포트도 비슷한 역할을 한다. 데이터가 컴퓨터에 도착하면 포트 번호에 따라 어느 프로그램으로 들어갈지가 결정된다. 다만 네트워크 포트는 컴퓨터 뒤편에 달린 USB 단자나 랜 케이블 연결부처럼 눈에 보이는 물리적인 구멍은 아니다.

포트 번호는 운영체제가 네트워크 통신을 프로그램별로 구분하기 위해 관리하는 논리적인 번호이다. 사용할 수 있는 번호는 0번부터 65535번까지이며, TCP와 UDP는 각각 포트 번호를 사용한다. 따라서 같은 숫자라도 TCP 포트와 UDP 포트는 서로 다른 통신으로 구분된다.

서버 프로그램은 정해진 포트에서 접속 요청이나 데이터를 기다린다. 웹서버가 특정 포트를 사용하도록 설정되면 운영체제는 그 포트로 들어온 데이터를 웹서버 프로그램에 전달한다. 메일서버와 파일전송 프로그램도 각자 사용하는 포트를 통해 요청을 구분한다.

이를 두고 서버가 특정 포트를 열어 두었다거나, 해당 포트에서 대기한다고 표현한다. 실제 문이 열려 있다는 뜻은 아니다. 특정 프로그램이 그 포트를 사용하도록 운영체제에 등록하고 외부의 연결이나 데이터를 받을 준비를 하고 있다는 의미이다.

반대로 어떤 프로그램도 사용하지 않는 포트로 통신이 들어오면 정상적인 서비스는 제공되지 않는다. 운영체제나 방화벽 설정에 따라 접속이 거절되거나 아무런 응답도 돌아오지 않을 수 있다. 상대방의 IP 주소를 정확히 알아도 서비스가 사용하는 포트를 모르면 원하는 프로그램과 통신하기 어려운 이유이다.

포트 번호는 용도에 따라 나뉜다

모든 포트 번호가 같은 방식으로 사용되는 것은 아니다. 널리 알려진 서비스가 사용하는 번호도 있고, 특정 프로그램이나 회사가 등록해 사용하는 번호도 있으며, 클라이언트가 짧은 시간 동안 임시로 사용하는 번호도 있다.

일반적으로 0번부터 1023번까지는 잘 알려진 포트(Well-Known Ports)라고 부른다. 웹과 이메일, 원격 접속, 도메인 조회처럼 오랫동안 널리 사용된 서비스가 이 범위에 포함된다. 서로 다른 프로그램이 같은 기본 번호를 알고 있기 때문에 별도의 설명 없이도 접속을 시도할 수 있다.

1024번부터 49151번까지는 등록 포트(Registered Ports) 범위이다. 특정 애플리케이션과 서비스가 사용하는 번호가 이 구간에 등록될 수 있다. 다만 등록된 번호라고 해서 반드시 그 프로그램만 사용할 수 있다는 물리적 제한이 생기는 것은 아니다.

49152번부터 65535번까지는 흔히 동적 포트 또는 임시 포트 범위라고 부른다. 클라이언트 프로그램이 서버에 연결할 때 운영체제로부터 잠시 배정받아 사용하는 경우가 많다. 실제 운영체제에서 사용하는 세부 범위는 설정에 따라 달라질 수 있다.

이러한 구분은 포트 번호를 체계적으로 관리하기 위한 기준이다. 서비스마다 번호를 제각각 사용하면 클라이언트가 어느 포트로 접속해야 하는지 알기 어렵다. 공통된 번호 체계를 사용함으로써 서로 다른 운영체제와 프로그램도 같은 서비스에 접속할 수 있다.

80번과 443번 포트는 왜 자주 보일까?

웹 통신에서 자주 등장하는 번호가 80번과 443번이다. 일반적인 HTTP 통신은 기본적으로 TCP 80번 포트를 사용하고, HTTPS 통신은 기본적으로 TCP 443번 포트를 사용한다.

웹브라우저의 주소창에 인터넷 주소를 입력할 때 사용자가 매번 포트 번호까지 적지 않아도 되는 이유가 여기에 있다. 주소가 HTTP로 시작하면 브라우저는 기본적으로 80번 포트를 사용하고, HTTPS로 시작하면 443번 포트로 연결을 시도한다.

예를 들어 사용자가 HTTPS 웹사이트에 접속하면 브라우저는 해당 서버의 443번 포트에 연결을 요청한다. 서버에서 웹서비스가 정상적으로 실행 중이고 방화벽이 통신을 허용하면 브라우저와 웹서버 사이에 연결이 만들어진다.

다만 포트 번호가 서비스의 종류를 절대적으로 보장하지는 않는다. 웹서버를 반드시 80번이나 443번에서만 실행해야 하는 것은 아니다. 관리자는 웹서버를 8080번이나 8443번처럼 다른 포트에서 실행할 수도 있다.

반대로 다른 프로그램이 80번 포트를 사용하도록 설정하는 것도 기술적으로는 가능하다. 포트 번호는 흔히 사용되는 서비스의 위치를 알려주는 약속이지, 프로그램의 기능 자체를 결정하는 장치는 아니다.

포트 번호 대표 서비스 일반적인 용도
20·21 FTP 파일 전송과 제어에 사용한다.
22 SSH 암호화된 원격 접속과 시스템 관리에 사용한다.
25 SMTP 메일서버 사이에서 이메일을 전송할 때 사용한다.
53 DNS 도메인 이름과 IP 주소를 확인하는 통신에 사용한다.
80 HTTP 일반적인 웹 요청과 응답에 사용한다.
443 HTTPS 암호화된 웹 요청과 응답에 사용한다.

표에 있는 번호는 대표적인 기본값이다. 실제 환경에서는 보안정책과 서비스 구성에 따라 다른 번호를 사용할 수 있으며, 하나의 서비스가 여러 포트를 함께 사용하기도 한다. 포트 번호만 보고 통신 내용이나 프로그램을 무조건 단정해서는 안 된다.

짧은 생각
포트 번호는 아주 작은 숫자에 불과해 보인다. 그러나 서로 다른 회사와 운영체제가 같은 번호를 같은 의미로 이해하기 때문에 인터넷의 수많은 서비스가 연결된다. 복잡한 체계를 움직이는 힘은 거대한 장비에만 있지 않다. 작은 약속을 함께 지키는 일도 연결의 중요한 기반이 된다. 결국 표준화의 영역인데 사람들은 이런 것을 당연하게 보고 고민하지 않는다.

클라이언트도 포트 번호를 사용한다

포트 번호는 서버 프로그램만 사용하는 것이 아니다. 웹브라우저와 메신저 같은 클라이언트 프로그램도 서버와 통신할 때 자신의 포트 번호를 사용한다. 서버가 응답을 보낼 때 어느 컴퓨터의 어느 프로그램으로 돌려보내야 하는지 알아야 하기 때문이다.

사용자가 웹사이트에 접속하면 브라우저는 운영체제로부터 임시 포트 번호를 배정받는다. 브라우저는 자신의 IP 주소와 임시 포트를 출발지 정보로 사용하고, 웹서버의 IP 주소와 443번 같은 서비스 포트를 목적지로 사용한다.

서버는 요청에 담긴 출발지 IP 주소와 출발지 포트 번호를 확인한다. 응답을 보낼 때는 이 정보를 목적지로 사용한다. 같은 컴퓨터에서 여러 개의 웹페이지를 열고 다른 프로그램도 함께 통신할 수 있는 것은 각 통신이 서로 다른 연결 정보로 구분되기 때문이다.

클라이언트가 잠시 사용하는 포트를 임시 포트 또는 동적 포트라고 부른다. 운영체제는 사용 가능한 번호 가운데 하나를 선택해 통신이 이루어지는 동안 배정한다. 연결이 끝나면 해당 번호는 나중에 다른 통신에서 다시 사용될 수 있다.

따라서 웹 통신에는 서버의 443번 포트만 존재하는 것이 아니다. 서버는 잘 알려진 서비스 포트에서 요청을 기다리고, 클라이언트는 임시 포트를 사용해 요청과 응답을 구분한다. 양쪽의 IP 주소와 포트 번호가 함께 사용되어 하나의 통신 관계가 만들어진다.

여러 클라이언트가 서로 다른 임시 포트를 사용하여 한 서버의 서비스 포트와 통신하는 과정

방화벽에서 포트를 연다는 것은 무엇일까?

서버를 운영하거나 네트워크 문제를 해결하다 보면 포트를 열어야 한다는 말을 자주 듣는다. 이는 컴퓨터에 물리적인 출입구를 만든다는 뜻이 아니다. 방화벽이나 네트워크 장비의 정책을 조정해 특정 포트를 사용하는 통신을 허용한다는 의미이다.

방화벽은 들어오고 나가는 통신을 검사해 허용하거나 차단한다. 출발지와 목적지의 IP 주소, 포트 번호, TCP와 UDP의 구분 등을 확인하고 미리 정한 보안정책에 따라 처리한다.

외부에 웹서비스를 제공하려면 웹서버가 사용하는 포트로 들어오는 통신을 허용해야 한다. HTTPS 웹사이트를 운영한다면 일반적으로 443번 포트에 대한 접근을 허용한다. 방화벽이 이 통신을 차단하면 웹서버가 정상적으로 실행 중이어도 외부 사용자는 접속할 수 없다.

반대로 외부에서 사용할 필요가 없는 관리용 프로그램이나 데이터베이스 포트를 공개하면 공격자가 접근을 시도할 수 있는 통로가 늘어난다. 보안에서는 필요한 서비스의 포트만 허용하고 사용하지 않는 포트는 차단하는 원칙이 중요하다.

그렇다고 포트를 차단하는 것만으로 모든 보안 문제가 해결되지는 않는다. 허용된 포트에서 동작하는 웹서버에 취약점이 있다면 공격자는 정상적으로 열린 통신 경로를 이용할 수 있다. 포트 접근 통제와 함께 프로그램 업데이트, 사용자 인증, 통신 암호화와 로그 점검이 필요하다.

공유기에서는 포트가 어떻게 사용될까?

가정이나 사무실에서는 여러 기기가 하나의 공유기를 통해 인터넷에 접속한다. 외부에서 보이는 공인 IP 주소는 하나일 수 있지만, 내부에서는 컴퓨터와 스마트폰, 태블릿과 서버가 각각 사설 IP 주소를 사용한다.

내부 기기가 외부 서버에 접속하면 공유기는 해당 통신 정보를 기록한다. 서버에서 응답이 돌아오면 공유기는 IP 주소와 포트 정보를 확인해 원래 요청을 보낸 내부 기기로 전달한다. 이 과정을 통해 여러 기기가 하나의 공인 IP 주소를 함께 사용할 수 있다.

반대로 외부 인터넷에서 내부의 특정 서버에 먼저 접속하려면 어느 기기로 데이터를 전달해야 하는지 공유기에 알려주어야 한다. 이때 사용하는 대표적인 설정이 포트 포워딩(Port Forwarding)이다.

포트 포워딩은 공유기의 특정 외부 포트로 들어온 통신을 내부 네트워크에 있는 정해진 기기와 포트로 전달하는 방식이다. 집 안에서 웹서버나 원격접속 서버를 운영할 때 사용할 수 있다.

예를 들어 외부에서 공유기의 특정 포트로 접속하면 공유기는 그 통신을 내부 서버의 웹 포트로 전달할 수 있다. 외부 사용자는 내부 서버의 사설 IP 주소를 직접 알지 못해도 공유기를 통해 서비스에 접속한다.

다만 포트 포워딩은 외부에서 내부 네트워크로 들어오는 통로를 만드는 설정이다. 필요하지 않은 서비스를 공개하거나 단순한 비밀번호를 사용하면 보안 위험이 커질 수 있다. 서비스의 목적을 분명히 하고 접속 대상을 제한하며 암호화와 인증을 함께 적용해야 한다.

공유기가 외부 포트로 들어온 통신을 내부 네트워크의 특정 서버로 전달하는 과정
짧은 생각
연결이 많아질수록 모든 통로를 열어 두는 것이 능사는 아니다. 필요한 대상에게 필요한 통로만 제공하고, 그 통로가 올바르게 사용되는지 확인해야 한다. 편리한 연결과 안전한 통제는 서로 반대되는 목표가 아니라 처음부터 함께 설계해야 할 조건이다.

포트 번호가 인터넷 서비스를 나누어 준다

IP 주소는 패킷을 목적지 컴퓨터까지 안내한다. 하지만 한 대의 컴퓨터에서는 여러 프로그램이 동시에 네트워크를 사용하기 때문에 IP 주소만으로는 데이터의 최종 목적지를 구분할 수 없다.

포트 번호는 컴퓨터에 도착한 데이터를 알맞은 프로그램으로 전달한다. 웹서버와 메일서버, 파일전송 프로그램은 서로 다른 포트를 사용해 통신을 나눈다. 클라이언트 프로그램도 임시 포트를 배정받아 자신에게 돌아오는 응답을 다른 통신과 구분한다.

방화벽은 포트 정보를 확인해 통신을 허용하거나 차단하고, 공유기는 포트 정보를 이용해 외부에서 들어온 데이터를 알맞은 내부 기기로 전달한다. 포트 번호는 프로그램을 구분하는 기능을 넘어 네트워크 운영과 보안에서도 중요한 기준이 된다.

이제 웹브라우저는 서버의 IP 주소를 찾고, 웹서비스가 기다리는 포트까지 연결할 수 있다. 그러나 연결이 만들어졌다고 해서 원하는 웹페이지가 저절로 전달되는 것은 아니다.

브라우저는 어떤 자료가 필요한지 서버에 알려야 하고, 서버는 그 요청을 이해해 알맞은 결과를 돌려주어야 한다. 요청한 페이지가 없거나 접근할 수 없는 상황도 정해진 방식으로 알려야 한다.

다음 글에서는 앞선 글에서 예고했던 대로 웹브라우저와 서버가 요청과 응답을 주고받는 규칙인 HTTP와, 그 통신 내용을 안전하게 보호하는 HTTPS의 원리를 살펴본다.

짧은 생각
IP 주소는 컴퓨터를 찾고 포트 번호는 그 안의 프로그램을 찾는다. 인터넷은 하나의 거대한 기술로 움직이는 것이 아니다. 주소와 경로, 전송 방식과 프로그램 구분처럼 서로 다른 역할을 맡은 규칙이 층층이 쌓여 하나의 통신을 완성한다.