1. 포트란?

본래의 의미로 직역하면 ‘항구’라는 뜻으로, 컴퓨터 관련 분야에서의 의미로는 운영 체제 통신에서의 종단점을 뜻한다.
네트워크 상에서 통신을 할 때 IP를 토대로 해당 서버가 있는 컴퓨터에 접근한다.
그런데 대부분의 경우 하나의 컴퓨터에는 여러 개의 서버가 실행될 수 있다.
컴퓨터에 여러 개의 서버가 실행되고 있다면, 어느 서버에 접속해야 하는지 컴퓨터에게 알려주어야 한다.
예를 들어 컴퓨터에 카카오톡, 라인, Slack 채팅서버 앱 메세지 프로세스가 여러개 실행 중이라고 해보자.
컴퓨터가 메세지를 받았을 때 어떤 프로그램으로 해당 메세지를 전송해야 하는가?
만약 아무런 정보가 없다면 어떤 프로세스로 메세지를 보내야 하는지 알 수 없다. 이를 해결하기 위해 TCP에서는 패킷에 어떤 프로세스가 받아야 하는지에 대한 정보(Port 정보)를 추가하여 보낸다.
2. 포트번호

포트 번호는 컴퓨터에서 실행되고 있는 서버를 구분 짓기 위한 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를 적고, 뒤에 포트 번호를 적는다.
3. 주요 포트 번호 종류
| 프로토콜 | 포트 | TCP/UDP | 포트 종류 | 용도 |
|---|---|---|---|---|
| (사용되지 않음) | 0 | UDP | Well-known | 예약된 포트로서 사용 불가 |
| TCPMUX | 1 | TCP | Well-known | TCPMUX (TCP Port Service Multiplexer) |
| ECHO | 7 | TCP, UDP | Well-known | ECHO |
| DISCARD | 9 | TCP, UDP | Well-known | DISCARD |
| DAYTIME | 13 | TCP, UDP | Well-known | DAYTIME |
| FTP | 21 | TCP | Well-known | 파일 전송 프로토콜 (File Transfer Protocol) |
| SSH / SFTP / SCP | 22 | TCP | Well-known | SSH(Secure Shell) 보안 셸, 보안 파일 전송(SSH File Transfer Protocol) 등에 사용TELNET에 보안 가미된 통신이라 보면 된다. |
| TELNET | 23 | TCP | Well-known | 텔넷 텍스트 통신(암호화되지 않음)을 위한 프로토콜 |
| SMTP | 25 | TCP | Well-known | 이메일 전송을 위한 SMTP(Simple Mail Transfer Protocol) 프로토콜 |
| DNS | 53 | TCP, UDP | Well-known | DNS(Domain Name System)서버에서 사용되는 프로토콜 |
| TFTP | 69 | UDP | Well-known | 단순 파일 전송을 위한 프로토콜 (Trivial File Transfer Protocol) |
| HTTP | 80 | TCP, UDP | Well-known | www 통신에 대한 요청-응답 프로토콜 (HyperText Transfer Protocol) |
| Kerberos5 | 88 | TCP | Well-known | MIT 커버로스(Kerveros) 인증 에이전트 |
| POP3 | 110 | TCP | Well-known | 이메일 가져오기/보내기 프로토콜 (Post Office Protocol version 3) |
| NTP | 123 | UDP | Well-known | 인공위성 표준 시간 동기화 (Network Time Protocol) |
| IMAP4 | 143 | TCP | Well-known | 이메일 가져오기 프로토콜 (Internet Message Access Protocol version 4)메일 서버들이 쓰는 포트 |
| XDMCP | 177 | UDP | Well-known | 디스플레이 매니저 제어 프로토콜 (X Display Manager Control Protocol) |
| HTTPS | 443 | TCP | Well-known | 보안 강화 www 통신 프로토콜 (HyperText Transfer Protocol over Secure Socket Layer) |
| SMTPS | 465 (비공식) | TCP | Well-known | SSL이 적용된 SMTP 프로토콜 (비공식 프로토콜) |
| RLOGIN (login) | 513 | TCP | Well-known | RLOGIN 접속을 위해 사용되는 프로토콜 |
| syslog | 514 | UDP | Well-known | 시스템 로그 프로토콜 |
| LPD | 515 | TCP | Well-known | 프린트 프로세스 처리 (Line Printer Daemon protocol) |
| Submission | 587 | TCP | Well-known | Email message submission |
| Rsync | 873 | TCP | Well-known | 원격 서버 간의 파일 동기화 프로토콜 (Remote Sync) |
| POP3S | 995 | TCP | Well-known | pop3(110)의 보안 버젼 |
| MS-SQL | 1433 | TCP | Registered | Microsoft SQL Server에서 사용됨 |
| Oracle DB | 1521 | TCP | Registered | Oracle Database에서 사용됨 |
| MySQL | 3306 | TCP, UDP | Registered | MySQL에서 사용됨 |
| RDP | 3389 | TCP | Registered | 원격 제어 프로토콜 (Remote Desktop Protocol) |
| SVN | 3690 | TCP | Registered | 버전 관리 시스템인 서브버전(Subversion)에서 사용되는 프로토콜 |
| PostgreSQL | 5432 | TCP | Registered | PostgreSQL에서 사용됨 |
→ 이 밖의 자세한 포트 종류들은 리눅스 디렉토리 /etc/services에서 확인할 수 있다. 윈도우 포트도 똑같이 통용된다.