팀 업무 중 인프라 관련 업무가 늘면서 port 번호를 마주치는 경우가 점점 더 많아졌다.
팀원들이 했던 말들..
모든 노드 간 통신이 가능해야 합니다. (SSH, 6443 포트 등)
임시로 포트 열고 체크했고 통신 되는 부분 확인했습니다.
한번 개념을 잡고 가야겠다는 생각이 들어 간략하게 핵심만 정리해보고자 한다.
왜 22번 포트는 SSH인지? 왜 8080 을 자주 쓴느지? 등을 자연스럽게 이해하는 것을 목표로 한다.
port는 네트워크 통신에서 어떤 서비스가 어떤 통신을 받는지 식별하는 번호이다.
네트워크에서 하나의 IP 주소 내에서 여러 서비스(프로그램)을 구분하는 번호이다.
TCP, UDP 각각 별도로 포트 번호를 가진다. 즉 TCP80 ≠ UDP 80
참고로 TCP, UDP 란?
"TCP는 느리지만 신뢰성 있는 전송. UDP는 빠르지만 데이터 손실 감수."
TCP 는 택배
- 주소 확인하고, 배달 상태 추적되고, 못 받으면 다시 보내줌
- 사용 예 : 웹(http/https), ssh, ftp, 메일 등
UDP 는 우편함 전단지
- 막 뿌리고 끝! 도착했는지 확인 안함. 대신 빠름
- 사용 예 : 게임, 스트리밍, DNS
0 ~ 65535 사이의 숫자를 사용할 수 있다.
| 범위 | 이름 | 설명 |
|---|---|---|
| 0 ~ 1023 | Well-known ports | OS나 표준 서비스용 (예약됨) |
| 1024 ~ 49151 | Registered ports | 일반 앱, 개발자가 자주 쓰는 포트 |
| 49152 ~ 65535 | Dynamic/private ports | 클라이언트나 일회성 통신용 |
HTTP status code처럼 실무에서 매우 자주 등장하므로 어느 정도 암기 필요
| 포트 | 프로토콜 | 서비스/의미 | 용도 / 예시 |
|---|---|---|---|
| 22 | TCP | SSH (서버 원격 접속) | ssh 접속 시 사용. AWS EC2에 접근할 때, Git 서버에 SSH key 연결할 때 |
| 80 | TCP | HTTP (웹. 비암호화) | http://example.com 으로 웹 접속할 때 기본 포트 |
| 443 | TCP | HTTPS (보안 웹) | SSL 인증서를 적용한 웹사이트(https://...) 는 무조건 이 포트 사용 |
| 21 | TCP | FTP (파일 전송) | |
| 25 | TCP | SMTP (메일 발송) | |
| 53 | TCP/UDP | DNS (도메인 네임 시스템) | www.google.com 접속 시 내부적으로 이 포트를 통해 IP 주소 변환 |
| 3306 | TCP | MySQL 데이터베이스 | mysql -h 127.0.0.1 -P 3306 |
| 5432 | TCP | PostgreSQL 데이터베이스 | |
| 6379 | TCP | Redis | 캐시나 세션 저장용 Redis 서버 띄우는 경우 |
| 27017 | TCP | MongoDB | localhost:27017 |
| 8080 | TCP | 개발/테스트용 웹 서버 (HTTP 프로그래밍용 보조 포트) | localhost:8080 에 Node.js 서버 띄울 때 사용 |
| 3000 | TCP | 개발용 웹 서버 (Node.js 등) | React/Vue 개발 시 기본 포트. npm run dev 하면 localhost:3000 |
| 5000 | TCP | Flask, FastAPI 기본 포트 | Python 백엔드 실습 시 |
| 9200 | TCP | Elasticsearch 검색엔진 | kibana로 로그 검색 시 |
필수 포트들을 외워둔다면, 회사에서 "방화벽/보안그룹 설정 시 22 포트 허용하겠다"라고 한다면 즉 SSH 연결 가능하게 하겠다는 뜻으로 이해할 수 있게 된다.
실무에서 이런 식으로!
초반엔 22(SSH), 80/443(웹), 8080/3000(개발 서버), 3306(MySQL) 정도만 익혀두기
포트 열려 있는지 확인하기
telnet : 가장 오래된 방식
telnet 호스트 포트번호
nc (=netcat) : 포트 확인 + 더 많은 기능
nc -zv 호스트 포트번호
- `-z` : 포트 스캔만 하고 데이터 송수신 안 함
- `-v` : verbose(결과출력)
curl : HTTP 서비스 확인
curl -I URL
# - `-I` : 헤더만 요청
# - `-v` : 더 자세한 로그
리눅스 서버에서 포트 확인
sudo netstat -tuln
# 또는
ss -tuln