본문 바로가기
개념/Web

네트워크 포트 (Port) 번호

by Hwanii_ 2023. 12. 19.
728x90

다른 게시글에서 IP와 Port에 대해서 학습 했었는데, 추가로 다뤄 보려고 한다.

 

https://hwanii96.tistory.com/515

 

IP 와 Port

1. IP 이란 ? IP (Internet Protocol) 인터넷을 통해 데이터를 주고 받을 때 사용 되는 통신 규칙 이다. OSI 7계층 중 레이어 3에 위치 하는 프로토콜 이다. IP는 데이터를 패킷 단위로 나누어 전송 한다. 받

hwanii96.tistory.com

 

 

 

포트 (Port) 번호란 ?

 

예) 192.168.178.1:139

 

위의 예시와 같이 IP (Internet Protocol) Address 뒤에 : (콜론) 기호와 함께 붙는 번호를 포트 (Port) 라고 한다.

 

포트는 0 ~ 65535 숫자 범위 내의 번호만 가질 수 있다.

 

시스템 내에서 실행 되고 있는 프로세스 (Process) 를 구분 짓기 위해 사용 되는 16비트의 논리적 할당을 의미 한다.

(* 2의 16 제곱 >> 65536 이다. 컴퓨터 세계의 숫자는 0 부터 시작하므로 범위는 0 ~ 65535가 된다)

 

즉, 포트번호컴퓨터에서 실행 되는 특정한 프로세스를 찾아갈 때 사용 된다.

 

다시말하면,

위의 예시에서 192.168.178.1이라는 IP는 컴퓨터 찾을 때 필요한 주소 이고,

139이라는 포트는 컴퓨터 내부에서 실행 되고 있는 프로그램을 찾을 때 사용 된다.

 

 

 

포트 (Port) 단어의 뜻 및 단어의 유래

 

 

원래 단어의 뜻은 항구를 의미 한다.

 

항구를 생각해보자.

 

항구의 입장에서 화물을 채운 화물선이 들어온다고 가정할 때, 여러 대의 화물선이 한꺼번에 항구로 들어온다면,

 

A 화물선은 제 1 부두로 안내를 받아서 입항 하고,

B 화물선은 제 2 부두로 안내를 받아서 입항 하고,

C 화물선은 제 3 부두로 안내를 받아서 입항 하고,

...

 

이런식으로 유도를 통해 항구로 들어와야 질서정연하게 막힘 없이 들어올 수 있을 것이다.

 

컴퓨터로 돌아와보자.

 

컴퓨터의 IP 주소가 항구를 의미 하게 된다.

 

컴퓨터의 포트 번호가 부두를 의미 하게 된다.

 

 

 

포트 (Port) 번호가 필요한 이유는 무엇일까 ?

 

위에서 포트 번호가 필요한 이유에 대해 이미 알아 보았지만, 좀 더 디테일 하게 학습해보자.

 

cmd 창에서 netstat -an 을 입력 한다.

 

 

그러면 현재 컴퓨터에서 실행 중인 수 많은 포트를 확인할 수 있게 된다.

 

 

이를 보면 하나의 IP 주소로 다양한 포트가 붙어짐으로써, 여러 개의 프로그램이 실행 되고 있음을 알 수 있다.

 

클라이언트 또는 서버는 여러 개의 프로세스 (Process) 가 동시에 실행 되고 있다.

 

예)

 

클라이언트는 컴퓨터로 웹 브라우저를 열어서 검색을 하고, 동시에 파일도 다운 받고, 메일도 보낼 수 있다.

 

즉, 클라이언트는 검색을 이용할 수 있는 서비스 1개,

파일을 다운받을 수 있는 서비스 1개,

메일을 보낼 수 있는 서비스 1개,

 

총 3개의 서비스를 동시에 이용하고 있는 것이다.

 

그렇다는 것은, 서비스를 제공 하고 있는 서버에서 패킷을 클라이언트에게 보내 주고 있음을 의미 한다.

 

그런데, 각 서버에서 보내주는 패킷이 구분 되어야 할 것 이다.

 

도대체 이 패킷이 웹 브라우저에서 나의 검색 요청에 대한 응답 결과로 오는 패킷 인지 ?

파일을 다운 받으면서 오게 되는 패킷 인지 ?

메일을 송수신 하면서 필요한 패킷 인지 ?

 

이 패킷들이 각각 무슨 데이터 패킷인지가 구분 되지 않으면 패킷을 주고 받는 개념 자체가 성립할 수 없을 것이다.

 

그래서 각각의 패킷들이 데이터 송수신 될 때, 온전하게 구분될 수 있도록 포트번호의 개념이 사용 되는 것이다.

 

오늘날 가장 많이 사용하는 전송 계층 (OSI 4 계층) 의 프로토콜인 TCP의 헤더에는 출발지 포트와 목적지 포트가 있다.

 

따라서 클라이언트와 서버는 동시에 개별적으로 안전한 데이터 요청 및 응답을 하는 통신을 할 수 있게 된다.

 

Reference :  [Web] 네트워크 포트(PORT)번호란 무엇인가? >> coding-factory.tistory.com/1002

 

 

 

[ 참고 ]

 

 

IP 주소는 현실 세계의 바닷가에 존재 하는 항구와 유사한 개념이라고 볼 수 있다.

 

컨테이너 화물선이 동시에 항구로 들어 올 때, 각 화물선을 각 부두로 유도 해서,

동시에 여러 대의 화물선을 받을 수 있게 하는 개념이 포트 번호 라고 했다.

 

현실 세계의 바닷가에 항구가 여러 개가 있듯이, 컴퓨터 세계 에서도 여러 개의 IP 주소를 가질 수 있다. 

 

netstat -an 을 cmd 창에 입력 해보면 확인할 수 있다.

 

 

0.0.0.0 은 현재 시스템 내부의 모든 네트워크 인터페이스를 나타내는 것이다.

 

0.0.0.0 은 모든 IP 주소를 의미 한다.

 

 

127.0.0.1 은 로컬 루프백 (localhost) 주소 이다.

 

시스템 내부에서 자기 자신과 통신할 때 사용 된다.

 

 

192.168.0.59 는 로컬 네트워크에서의 IP 주소 이다.

 

주로 로컬의 라우터 또는 게이트웨이의 IP 주소 라고 볼 수 있다.

 

즉, 네트워크 상의 다른 기기 또는 서비스에 대한 연결을 할 수 있는 항구라고 볼 수 있다.

 

 

192.168.40.1 도 로컬 네트워크에서의 IP 주소 이다.

 

마찬가지로 네트워크 상의 다른 기기 또는 서비스에 대한 연결을 할 수 있는 항구 이다.

 

 

192.168.178.1 도 로컬 네트워크에서의 IP 주소 이다.

 

마찬가지로 네트워크 상의 다른 기기 또는 서비스에 대한 연결을 할 수 있는 항구 이다.

 

위의 예시를 보면 확인할 수 있듯이, 하나의 시스템 (컴퓨터) 내부에 다양한 IP 주소를 가질 수 있음을 의미 한다.

 

하나의 시스템이 여러 네트워크 인터페이스를 가지고 있거나,

가상 머신 (Virtual Machine) 또는 VPN 연결 같은 경우에도 여러 IP 주소가 표시될 수 있다고 볼 수 있다.

 

 

 

각 포트번호에 대한 설명

 

Reference :  [Web] 네트워크 포트(PORT)번호란 무엇인가? >> coding-factory.tistory.com/1002

 

 

위에서 학습했듯이, 포트 번호는 0 ~ 65535 숫자 까지 할당이 가능 하다.

 

하지만 포트 번호를 아무거나 할당할 수는 없다.

 

TCP/IP 상위 프로토콜을 사용 하는 응용프로그램에서는,

인터넷 번호 할당 허가 위원회 (IANA) 에 의해 미리 지정된 포트 번호들을 이미 가지고 있다.

 

https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

 

Service Name and Transport Protocol Port Number Registry

mpm 45 tcp Message Processing Module [recv]

www.iana.org

 

예)

 

 

위와 같이, 이미 사용 하고 있는 포트를 중첩 할당 해서 사용 하게 되면 프로그램은 오작동을 일으키게 된다.

 

특히 위의 이미지와 같이 0 ~ 1023 번 포트는 웰 노운 포트 (well-known ports) 라고, '잘 알려진 포트' 를 의미 한다.

 

이 숫자 범위에 해당 하는 포트 번호들은 이미 예약 사용 되어 있기 때문에, 사용 하지 않는 것이 좋다.

(언제든지 잠재적으로 사용될 수 있기 때문 이다)

 

따라서, 포트 번호를 할당 해야 한다면, 나머지 포트 번호를 가지고 사용 하기를 권장 한다.

 

well-known ports 예시 : 

 

Reference :  [Web] 네트워크 포트(PORT)번호란 무엇인가? >> coding-factory.tistory.com/1002

 

 

우리가 잘 아는 HTTPS 프로토콜을 사용해서 통신할 때는 443번 포트를 사용 한다.

 

우리가 잘 아는 DNS (Domain Name System) 서버와 통신할 때는 53번  포트를 사용 한다.

 

 

 

registered ports 예시 :

 

잘 알려진 포트에 비해서는 덜 범용적이지만 흔히 사용 되는 어플리케이션

 

OpenVPN : 1194

 

MSSQL : 1433

 

MySQL : 3306

 

Redis : 6379

 

 

 

[ 참고 2 ]

 

서버는 일반적으로 잘 알려진 포트와 등록된 포트로 동작 한다.

 

클라이언트는 일반적으로 동적 포트로 동작 한다.

 

클라이언트가 서버와 통신할 때는 반드시 출발지 포트와 목적지 포트가 존재 해야 한다.

 

이때, 클라이언트는 동적 포트로 동작 하기 때문에 매번 포트 번호가 변하게 된다.

 

참고로 알아두도록 하자.

 

 

위의 이미지를 보면, 클라이언트는 동적으로 할당 받은 55771 번의 포트 번호로 통신 한다.

 

 

 

리소스 모니터를 통해 확인할 수 있다.

 

 

로컬 포트는 클라이언트의 동적 포트이다.

 

위에서 학습했듯이, 동적 포트는 49152 ~ 65535 번대의 범위에서 사용 된다고 했었다.

 

크롬, 카카오톡은 모두 HTTPS로 통신 되기 때문에, 원격 서버의 포트는 443 번 인것을 확인할 수 있다.

반응형

'개념 > Web' 카테고리의 다른 글

네트워크 액세스 계층 - 이더넷  (0) 2023.12.20
TCP와 UDP  (0) 2023.12.20
DNS (Domain Name System)  (1) 2023.12.19
쿠키와 세션  (0) 2023.10.25
HTTPS  (0) 2023.10.25