이번 문서의 목표: 네트워크 상태를 확인하는 명령어의 용도를 구분하고, 잘 알려진 포트 번호를 서비스와 짝지어 말할 수 있으며, 웹·DNS·메일·파일공유 서비스가 각각 무엇을 하는지 설명한다.
포트 — 한 컴퓨터 안의 여러 창구
23편에서 IP 주소는 네트워크에서 컴퓨터 한 대를 가리키는 번지수라고 배웠다. 그런데 컴퓨터 한 대 안에서도 웹 서버, 메일 서버, 파일 서버 등 여러 프로그램이 동시에 네트워크 통신을 할 수 있다. IP 주소만으로는 “이 데이터가 그 컴퓨터의 어느 프로그램에게 가야 하는지”를 알 수 없으므로, 프로그램별로 구분하는 번호가 하나 더 필요하다. 이것이 포트(port) 다.
쉽게 말하면: IP 주소가 건물 주소라면, 포트는 그 건물 안의 몇 호실인지를 가리키는 호실 번호다.
포트 번호는 0부터 65535까지의 정수로 표현하며, 그중 0번부터 1023번까지는 잘 알려진 포트(well-known port) 라 하여 특정 서비스가 전통적으로 고정해서 쓰도록 국제인터넷주소관리기구(IANA)가 미리 정해 둔 번호다. 이 잘 알려진 포트 번호는 리눅스마스터 시험에서 거의 매 회차 나오는 핵심 암기 항목이다.
| 서비스 | 포트 번호 | 용도 |
|---|---|---|
| FTP(File Transfer Protocol) | 20/21 | 파일 전송. 21번은 명령을 주고받는 제어용, 20번은 실제 데이터가 오가는 전송용 |
| SSH(Secure Shell) | 22 | 암호화된 원격 접속·원격 명령 실행 |
| Telnet | 23 | 암호화되지 않은 원격 접속(오래된 방식, 보안상 SSH로 대체됨) |
| SMTP(Simple Mail Transfer Protocol) | 25 | 메일을 보내는(발신) 프로토콜 |
| DNS(Domain Name System) | 53 | 도메인 이름과 IP 주소를 주고받는 질의·응답 |
| HTTP(HyperText Transfer Protocol) | 80 | 암호화되지 않은 일반 웹 통신 |
| POP3(Post Office Protocol version 3) | 110 | 메일 서버에서 메일을 자신의 컴퓨터로 내려받는(수신) 프로토콜 |
| IMAP(Internet Message Access Protocol) | 143 | 메일 서버에 메일을 둔 채로 여러 기기에서 동기화해 보는 프로토콜 |
| HTTPS(HTTP Secure) | 443 | 암호화된(TLS/SSL) 웹 통신 |
자주 틀리는 점: FTP의 두 포트(제어용 21번, 데이터용 20번)를 하나로만 외우거나 순서를 반대로 외우는 실수가 흔하다. “21번으로 먼저 접속해 명령을 주고받고, 실제 파일 데이터는 20번으로 오간다”는 순서로 기억해 두면 헷갈리지 않는다. POP3(110번)와 IMAP(143번)을 서로 바꿔 외우는 것도 잦은 실수다 — POP3는 메일을 PC로 가져와 버리는(내려받는) 방식, IMAP은 서버에 그대로 두고 여러 기기에서 함께(sync) 보는 방식이라고 구분하면 좋다. 잘 알려진 포트를 벗어난 임의의 큰 번호(예: 8080)와 헷갈리지 않도록, 표의 아홉 개 번호는 숫자 자체를 정확히 암기해야 한다.
이 포트 번호가 어떤 프로그램에 의해 현재 열려서(LISTEN 상태로) 대기하고 있는지 확인하는 것이 아래에서 다룰 netstat·ss 명령의 주된 쓰임이다.
ping — 상대가 살아 있는지 확인하기
ping은 네트워크로 연결된 상대 컴퓨터에게 짧은 신호(ICMP Echo Request, 인터넷 제어 메시지 프로토콜의 메아리 요청)를 보내고, 그 응답(Echo Reply)이 돌아오는지·얼마나 걸리는지를 확인하는 가장 기본적인 네트워크 점검 명령이다.
쉽게 말하면: ping은 “거기 있나요?”라고 소리쳐 보고 메아리가 돌아오는지 재는 것이다.
$ ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.412 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=0.389 ms-c 4는 4번만 보내고 멈추라는 옵션이다(생략하면 중단 키를 누를 때까지 계속 보낸다). 출력의 time은 신호를 보내고 응답이 돌아오기까지 걸린 왕복 시간이고, ttl(Time To Live, 생존 시간)은 이 패킷이 몇 개의 라우터(경유지)를 더 거칠 수 있는지를 나타내는 값으로, 경유지를 하나 지날 때마다 1씩 줄어든다. 응답이 전혀 오지 않으면 상대 컴퓨터가 꺼져 있거나, 네트워크 연결이 끊어졌거나, 방화벽이 ICMP 신호 자체를 막고 있다는 뜻이다.
traceroute — 어느 경유지를 거쳐 가는지 확인하기
ping이 “도달하는지 안 하는지”만 알려 준다면, traceroute는 “어느 경로를 거쳐서” 도달하는지를 한 단계씩 보여 준다. 목적지까지 가는 길에 있는 라우터(경유지)들을 순서대로 나열하고, 각 구간에 걸리는 시간을 함께 보여 준다.
쉽게 말하면: traceroute는 목적지까지 가는 길에 어느 정류장들을 거치는지 하나씩 짚어 주는 명령이다.
$ traceroute example.com
1 192.168.0.1 (192.168.0.1) 0.523 ms
2 10.10.10.1 (10.10.10.1) 3.211 ms
3 203.0.113.1 (203.0.113.1) 8.774 ms이 명령은 TTL 값을 1부터 하나씩 늘려 가며 패킷을 보내는 방식으로 동작한다. TTL이 1인 패킷은 첫 번째 라우터에서 TTL이 0이 되어 버려지면서 “시간 초과” 응답을 보내는데, 이 응답을 보낸 라우터가 곧 경로의 첫 번째 구간이다. TTL을 2, 3, 4로 늘려 가며 같은 과정을 반복하면 목적지까지의 전체 경로가 한 줄씩 드러난다. 어느 구간에서 응답 시간이 갑자기 크게 늘어나거나 응답이 끊기면, 그 구간이 네트워크 지연이나 장애의 원인일 가능성이 크다는 것을 알 수 있다.
netstat와 ss — 지금 열려 있는 연결과 포트 보기
netstat(network statistics) 은 현재 컴퓨터에서 맺어진 네트워크 연결, 열려서 대기 중인(LISTEN) 포트, 라우팅 테이블 등을 보여 주던 전통적인 명령이다. 하지만 최근 배포판에서는 더 빠르고 정보가 풍부한 ss(socket statistics) 가 그 자리를 대체하고 있다.
쉽게 말하면: netstat과 ss는 모두 “지금 이 컴퓨터가 어떤 문(포트)을 열어 놓고 누구와 통화 중인지” 보여 주는 명령이며, ss가 그 최신 버전이다.
$ ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1204,fd=6))옵션은 조합해서 쓴다. -t는 TCP 소켓만, -u는 UDP 소켓만 보여 준다. -l은 현재 연결을 기다리며 대기(LISTEN) 중인 소켓만 추려 보여 주고, -n은 포트·주소를 이름으로 바꾸지 않고 숫자 그대로 보여 주며(이름 조회에 걸리는 시간을 아낀다), -p는 그 포트를 어느 프로세스(process, 실행 중인 프로그램 하나하나)가 쓰고 있는지 프로세스 이름과 PID(프로세스 번호)까지 보여 준다. 위 예시에서는 22번 포트(SSH)를 sshd 프로세스가, 80번 포트(HTTP)를 nginx 프로세스가 열어 놓고 대기 중임을 알 수 있다.
이 조합은 예를 들어 “SYN Flooding(정상적인 접속 완료 없이 연결 요청만 대량으로 보내 서버 자원을 고갈시키는 공격) 여부를 점검하려 한다”는 상황에서 ss -ant state syn-recv처럼 특정 연결 상태만 걸러 보는 형태로도 응용된다. 반면 arp는 IP 주소와 MAC 주소(네트워크 카드에 부여된 하드웨어 고유 번호)의 대응표(ARP 캐시)를 보여 주는 명령으로, 소켓 연결 상태를 보여 주는 ss·netstat와는 용도가 다르다는 점도 구분해 두어야 한다.
nslookup과 dig — 이름과 주소를 서로 물어보기
23편에서 DNS가 도메인 이름을 IP 주소로 바꿔 주는 전화번호부 역할을 한다고 배웠다. 이 DNS 서버에 직접 질문을 던져 결과를 확인하는 도구가 nslookup과 dig(Domain Information Groper) 다.
쉽게 말하면: nslookup과 dig는 DNS 전화번호부에 “이 이름의 번호가 뭐야?”라고 직접 물어보는 도구다.
$ nslookup example.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Name: example.com
Address: 93.184.216.34$ dig example.com MX
;; ANSWER SECTION:
example.com. 300 IN MX 10 mail.example.com.dig는 도메인 이름 뒤에 조회할 레코드 유형을 지정하면 그 유형만 정확히 뽑아 보여 준다는 점이 nslookup보다 정교하다. 예를 들어 dig example.com MX는 그 도메인의 메일 서버 정보(MX 레코드)만 조회한다. 레코드 유형은 목적에 따라 나뉜다.
| 레코드 유형 | 의미 |
|---|---|
| A | 도메인 이름에 대응하는 IPv4 주소 |
| AAAA | 도메인 이름에 대응하는 IPv6 주소 |
| CNAME | 다른 도메인 이름으로의 별칭(별명) |
| MX(Mail eXchanger) | 그 도메인의 메일을 받아 줄 메일 서버 주소. 값이 여러 개면 우선순위(preference) 숫자가 작을수록 먼저 쓰인다 |
| NS(Name Server) | 그 도메인을 관리하는 네임서버 |
| PTR(Pointer) | IP 주소로 도메인 이름을 거꾸로 찾는 역방향 조회용 |
dig -x IP주소처럼 -x 옵션을 쓰면 IP 주소를 넣어 도메인 이름을 거꾸로 찾는 역방향 조회(PTR 레코드 조회)를 수행한다. 반대로 도메인 이름을 넣고 PTR을 직접 조회 유형으로 지정하는 것은 일반적인 사용법이 아니다.
자주 틀리는 점: “메일 서버 정보를 조회하려 한다”는 상황에서
dig 도메인 A(IPv4 주소만 조회)를 답으로 고르는 오답이 잦다. 메일 서버는 반드시 MX 레코드로 조회해야 하며, MX는 우선순위 값이 함께 붙는다는 점도 함께 기억해 둔다.
웹·DNS·메일·파일공유 서비스가 하는 일
지금까지 배운 명령어들은 결국 컴퓨터들이 주고받는 서비스의 상태를 들여다보는 도구다. 2급 1차는 이 서비스들을 직접 구축하는 설정 파일 작성까지는 묻지 않지만, “이 서비스가 무엇을 하는 물건인지”는 개념 문제로 자주 낸다.
쉽게 말하면: 서비스는 특정 포트를 열어 두고 정해진 규칙(프로토콜)대로 요청에 응답하는 프로그램이다.
| 서비스 종류 | 하는 일 | 대표 소프트웨어 | 기본 포트 |
|---|---|---|---|
| 웹(Web) 서비스 | 웹 브라우저의 요청을 받아 HTML 페이지·이미지 등을 응답 | Apache(httpd), Nginx | 80(HTTP), 443(HTTPS) |
| DNS 서비스 | 도메인 이름과 IP 주소를 관리하고 질의에 응답 | BIND(named) | 53 |
| 메일(Mail) 서비스 | 메일을 발신·수신·저장 | 발신: Sendmail·Postfix(SMTP) / 수신: Dovecot(POP3·IMAP) | 25(SMTP), 110(POP3), 143(IMAP) |
| 파일공유 서비스 | 네트워크로 파일이나 디렉터리를 공유 | NFS(리눅스·유닉스 간 공유), Samba(윈도우와 호환되는 공유) | NFS 2049 등, Samba 445 등 |
웹 서비스는 클라이언트(브라우저)가 요청한 자원을 서버가 찾아 돌려주는 구조로, 암호화 여부에 따라 HTTP(80번)와 HTTPS(443번)로 나뉜다. DNS 서비스는 위에서 다룬 이름 해석을 서버 쪽에서 실제로 수행하는 소프트웨어(대표적으로 BIND)를 가리킨다. 메일 서비스는 “보내는 일”과 “받는 일”이 서로 다른 프로토콜로 나뉘어 있다는 점이 특이한데, 발신은 SMTP(25번) 하나로 통일되어 있지만 수신은 POP3(110번)와 IMAP(143번) 두 방식이 공존한다. 파일공유 서비스는 운영체제 간 호환성에 따라 갈리는데, 리눅스·유닉스 계열끼리는 NFS(Network File System)를, 윈도우와 함께 쓰는 환경에서는 Samba(SMB/CIFS 프로토콜을 구현한 소프트웨어)를 주로 쓴다.
자주 틀리는 점: “메일을 발신하는 프로토콜”과 “메일을 수신하는 프로토콜”을 헷갈려 SMTP 자리에 POP3나 IMAP을 넣는 오답이 흔하다. SMTP는 오직 발신(그리고 서버 간 전달)만 담당하며, 사용자가 자기 메일함을 열어 보는 것은 POP3나 IMAP의 역할이다.
직접 해보기
00편에서 만든 Rocky Linux 컨테이너에서 진행합니다. ping·ss·nslookup이 없다는 메시지가 뜨면 dnf install -y iputils bind-utils iproute로 설치한 뒤 다시 시도한다.
앞에서 익힌 명령과 잘 알려진 포트 번호를 직접 실행해 확인한다.
ping -c 3 8.8.8.8
ss -tuln
nslookup example.com
cat /etc/services | grep -E '^(ssh|http|https|ftp) '무엇을 보아야 하나: ping -c 3은 3번만 보내고 멈추며, 각 줄의 time(왕복 시간)을 확인한다. ss -tuln의 Local Address:Port 열에서 지금 열려 있는 포트 번호를 확인한다(-u는 UDP까지 포함, -n은 이름 대신 숫자 그대로 보여 줌). nslookup은 Address 줄에서 IP가 나오는지 본다. 마지막 줄에서는 ssh 22, http 80, https 443, ftp 21처럼 서비스 이름 옆 숫자가 앞서 외운 포트 번호와 일치하는지 확인한다.
왜 이걸 해보나: 잘 알려진 포트 번호는 그냥 암기표가 아니라
/etc/services라는 실제 파일에 정의돼 있는 값이라는 것을 확인해 두면, “이 포트 번호는 어디서 정해진 것인가”를 묻는 응용 문제에도 흔들리지 않는다.
핵심 정리
- 포트는 한 컴퓨터 안에서 여러 서비스(프로그램)를 구분하는 번호이며, 잘 알려진 포트는 FTP(20/21)·SSH(22)·Telnet(23)·SMTP(25)·DNS(53)·HTTP(80)·POP3(110)·IMAP(143)·HTTPS(443)를 정확히 암기해야 한다.
- ping은 상대의 응답 여부와 왕복 시간을, traceroute는 목적지까지의 경유 경로를 확인한다.
- ss(또는 netstat)는 현재 열려 있는 포트와 그 포트를 쓰는 프로세스를 보여 주며, arp는 IP-MAC 대응표를 보여 준다는 점에서 용도가 다르다.
- nslookup·dig는 DNS에 직접 질의하며, dig는 A·AAAA·CNAME·MX·NS·PTR 같은 레코드 유형을 지정해 정밀하게 조회할 수 있다.
- 메일 서비스는 발신(SMTP)과 수신(POP3·IMAP)이 서로 다른 프로토콜로 나뉘어 있고, 파일공유는 리눅스 간 NFS와 윈도우 호환 Samba로 나뉜다.