1. 라이브러리
  2. 포트
  3. 포트 기본 개념

업데이트됨 1개월 전

큰 아파트에 사는 친구에게 택배를 보낸다고 상상해 보세요. 도로명 주소는 알고 있지만, 그것만으로는 부족합니다. 우체국은 호수가 필요합니다. 호수가 없으면 택배는 로비에 그냥 쌓여 있을 뿐입니다.

이것이 바로 네트워크에서 포트가 해결하는 문제입니다. IP 주소는 건물의 도로명 주소이고, 포트 번호는 호수입니다. 이 둘이 합쳐져야 데이터가 컴퓨터에 도달할 뿐만 아니라, 그것을 기다리고 있는 특정 애플리케이션에까지 정확히 전달됩니다.

포트란 실제로 무엇인가

포트는 숫자입니다. 물리적인 것이 아니라, 0에서 65,535 사이의 16비트 값일 뿐입니다. 데이터가 컴퓨터에 도착하면, 운영체제는 목적지 포트를 확인하고 해당 포트를 수신 대기 중인 애플리케이션으로 패킷을 전달합니다.

IP 주소가 "서울시 강남구 테헤란로 123"이라면, 완전한 네트워크 주소는 "서울시 강남구 테헤란로 123, 80호"가 되는 셈입니다. 기술적 표기로는 192.168.1.1:80이며, 콜론이 주소와 포트를 구분합니다.

포트가 없다면, 컴퓨터는 한 번에 하나의 네트워크 서비스만 실행할 수 있을 것입니다. 웹 브라우저, 이메일 클라이언트, 화상 통화 중 하나만 선택해야 하죠. 동시에 둘 이상은 불가능합니다. 포트는 별도의 채널을 만들어, 수십 개의 애플리케이션이 데이터를 뒤섞지 않고 동시에 통신할 수 있게 합니다.

세 가지 포트 범위

**잘 알려진 포트(0–1023)**는 표준 서비스를 위해 예약되어 있습니다. 웹 서버는 포트 80(HTTP) 또는 443(HTTPS)에서 수신 대기합니다. 이메일은 발신에 포트 25를 사용합니다. SSH는 포트 22를 사용합니다. URL을 입력하면 브라우저는 자동으로 포트 443에 연결합니다. 수십 년 전부터 모두가 따르는 약속이기 때문에 따로 지정할 필요가 없습니다.

**등록된 포트(1024–49151)**는 특정 애플리케이션을 위한 것입니다. MySQL은 3306을 사용합니다. Microsoft SQL Server는 1433을 사용합니다. 게임 서버들도 이 범위에 모여 있습니다. 잘 알려진 포트만큼 엄격하게 통제되지는 않지만, 애플리케이션들은 충돌을 피하기 위해 원하는 포트를 등록합니다.

**동적 포트(49152–65535)**는 임시 외부 연결을 위한 것입니다. 브라우저가 웹사이트에 연결할 때, 운영체제는 이 범위에서 임의의 포트를 출발지 포트로 할당합니다. 연결이 끊기면 해당 포트는 반환되어 다음 연결에 사용됩니다.

여러 연결이 뒤섞이지 않는 이유

지금 이 순간, 여러분의 컴퓨터는 음악을 스트리밍하고, 웹 페이지를 불러오고, 이메일을 동기화하고, 화상 통화를 하고 있을 수 있습니다. 모두 동시에요. 운영체제는 어떻게 들어오는 패킷이 어느 애플리케이션에 속하는지 알 수 있을까요?

그 답은 소켓 쌍입니다. 내 IP 주소, 내 포트, 상대방의 IP 주소, 상대방의 포트, 이 네 가지 정보의 조합이죠. 이 네 가지 식별자의 조합은 모든 연결에서 고유합니다.

같은 웹사이트를 열고 있는 브라우저 탭이 열 개 있다고 해도, 각 탭은 서로 다른 출발지 포트를 사용하여 열 개의 고유한 소켓 쌍을 만들어 냅니다. 패킷이 도착하면 운영체제는 즉시 올바른 탭으로 매칭합니다.

이것이 포트가 존재하는 이유입니다. 서비스를 식별하기 위해서만이 아니라, 대화를 식별하기 위해서입니다. IP 주소는 패킷을 건물까지 데려다 주고, 포트 번호는 그것을 올바른 대화 상대에게 전달합니다.

포트에 관해 자주 묻는 질문

포트가 정확히 65,536개인 이유는?

포트 번호는 네트워크 패킷에 16비트 값으로 저장됩니다. 2^16 = 65,536입니다. 설계상의 선택이 아니라, TCP와 UDP 헤더의 구조에서 비롯된 제약입니다.

두 애플리케이션이 같은 포트를 사용할 수 있나요?

같은 프로토콜로는 동시에 사용할 수 없습니다. 웹 서버가 TCP 연결로 포트 80을 수신 대기 중이라면, 다른 애플리케이션은 TCP 포트 80을 동시에 수신 대기할 수 없습니다. 하지만 한 애플리케이션이 UDP 포트 80을 사용하고 다른 애플리케이션이 TCP 포트 80을 사용하는 것은 가능합니다. 기술적으로 서로 다른 채널이기 때문입니다.

닫힌 포트에 연결을 시도하면 어떻게 되나요?

연결이 실패합니다. 컴퓨터가 요청을 보내면, 응답이 없거나(포트가 방화벽에 의해 차단된 경우) 거절 메시지를 받게 됩니다(포트는 닫혀 있지만 접근은 가능한 경우). 어느 쪽이든 연결은 성립되지 않습니다.

포트를 수동으로 설정해야 하나요?

대부분의 경우 그렇지 않습니다. 애플리케이션이 자동으로 처리합니다. 방화벽을 구성하거나, 서버를 직접 구축하거나, 연결 문제를 해결할 때만 포트에 대해 직접 신경 써야 합니다.

이 페이지가 도움이 되었나요?

😔
🤨
😃
포트란 무엇인가? 아파트 호수 비유 • 라이브러리 • Connected