포트 - Port
본래의 의미로 직역하면 '항구'라는 뜻으로, 컴퓨터 관련 분야에서의 의미로는 운영 체제 통신에서의 종단점을 뜻한다.
※ 참고
어떠한 데이터가 송수신을 할 때
Datalink 계층에서는 호스트의 NIC로 MAC Address를 판별하고
Network 계층에서는 IP Address로 목적지를 판별한다.
이렇게 MAC Address와 IP Address를 통해 목적지 호스트까지 도달한 후에는
어떤 Process(프로세스)에서 데이터를 받을 것인지 를 알아야 하는데 이 때 쓰이는 것이
Port Number(포트 번호)다.
네트워크 상에서 통신을 할 때 IP를 토대로 해당 서버가 있는 컴퓨터에 접근한다.
그런데 대부분의 경우 하나의 컴퓨터에는 여러 개의 서버가 실행될 수 있다.
컴퓨터에 여러 개의 서버가 실행되고 있다면, 어느 서버에 접속해야 하는지 컴퓨터에게 알려주어야 한다.
예를 들어 컴퓨터에 카카오톡, 라인, Slack 채팅서버 앱 메세지 프로세스가 여러개 실행 중이라고 해보자.
컴퓨터가 메세지를 받았을 때 어떤 프로그램으로 해당 메세지를 전송해야 할까?
만약 아무런 정보가 없다면 어떤 프로세스로 메세지를 보내야 하는지 알 수 없다. 이를 해결하기 위해 TCP에서는 패킷에 어떤 프로세스가 받아야 하는지에 대한 정보(Port 정보)를 추가하여 보낸다.
Port Number ( 포트 번호 )
포트 번호는 컴퓨터에서 실행되고 있는 서버를 구분 짓기 위한 16비트의 논리적 할당으로 0~65536번이 존재한다.
IP내에서 프로세스 구분을 하기 위해서 사용한다.
예시로 내 컴퓨터의 주소가 123.456.789.000라고 치면, 자료를 받을 경우 & 채팅을 하는 경우 포트 번호를 나누지 않으면 혼란이 생긴다.
그래서 자료는 :1000 채팅은 :1001로 이렇게 구분을 해주는것
👉IP주소는 컴퓨터의 집 주소, 포트는 집 안에서 각 프로세스가 위치한 방 번호라고 생각하면될 듯 하다
이 중에 0~1023번까지는 이미 어떤 통신이 해당 포트를 사용할 것인지 정해져 있다.
예를 들어 http 통신은 80번 포트를 사용하고, ssh 통신은 22번 포트를 사용한다.
이렇게 정해져 있는 0~1023번까지의 포트를 well-known port라고 한다.
컴퓨터에 있는 웹서버는 기본적으로 80번 포트와 연결(listening)되어 있다.
만약 웹서버를 하나 더 사용하고 싶은 경우 80번 포트는 이미 기존 웹서버가 사용하고 있기 때문에 사용할 수 없다.
그런 경우 well-known port가 아닌 다른 포트들과 연결하여 사용한다.
보통 관습적으로 8080 포트에 연결하여 사용한다. (톰캣)
그런데 이런 경우 웹 통신이 들어왔을 때 80번과 8080번 포트 중에 어떤 포트와 통신할까?
정답은 URL에 포트번호를 적어서 통신할 포트를 구분한다.
예를 들어 http://test.com에 접속하면 80포트에 연결된다.
http://test.com:80에서 80 포트는 생략이 가능하기 때문에 생략된 것이다.
그렇다면 http://test.com:8080에 접속하면 어떻게 될까?
예상 가능하듯 8080 포트에 연결이 된다.
URL 구성을 살펴보면 맨 앞에는 http와 같은 통신 규약이 온다.
http, ftp 등등 어떠한 방법으로 통신을 할 것인지를 적는 것이다.
그다음 도메인이나 ip를 적고, 뒤에 포트 번호를 적는다.
Well-Known Ports ( 잘 알려진 포트 ) : 0번 ~ 1023번
Registered Ports ( 등록된 포트 ) : 1024번 ~ 49151번
Dynamic Ports ( 동적 포트 ) : 49152번 ~ 65535번
- 사용자가 임의로 사용가능한 포트 번호
Port Forwarding ( 포트 포워딩 )
외부에서 공유기 내의 특정한 장치로 접속하기 위해서는 IP Address를 알아야 하지만 공유기 내부의 IP는 사설 IP로 이루어져 있어 외부에서 IP만으로 특정 PC를 지정할 수 없다.
따라서 공유기의 공인 IP로 접속한 후 특정한 PC로 연결되도록 포트 넘버를 공유기에서 정의해주는 작업이 필요하다.
이러한 과정을 Port Forwarding 이라 한다.
참고