기타 애플리케이션 프로토콜

기타 애플리케이션 프로토콜

개요

HTTP 외에도 네트워크에서는 다양한 애플리케이션 계층 프로토콜이 사용됩니다. 이 장에서는 DHCP, FTP, 이메일 프로토콜(SMTP, POP3, IMAP), SSH, Telnet, WebSocket 등을 학습합니다.

난이도: ⭐⭐

학습 목표: - 각 프로토콜의 역할과 동작 원리 이해 - 프로토콜별 포트 번호 숙지 - 보안 고려사항 파악 - 실무에서의 활용 방법 학습


목차

  1. DHCP
  2. FTP
  3. 이메일 프로토콜
  4. SSH
  5. Telnet
  6. WebSocket
  7. 연습 문제
  8. 다음 단계
  9. 참고 자료

1. DHCP

DHCP 개요

DHCP(Dynamic Host Configuration Protocol)는 네트워크에 연결된 장치에 IP 주소와 네트워크 설정을 자동으로 할당하는 프로토콜입니다.

┌─────────────────────────────────────────────────────────────────┐
│                      DHCP 기본 개념                              │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: UDP 67 (서버), UDP 68 (클라이언트)                        │
│  RFC: 2131                                                      │
│                                                                 │
│  할당 정보:                                                     │
│  - IP 주소                                                      │
│  - 서브넷 마스크                                                │
│  - 기본 게이트웨이                                              │
│  - DNS 서버                                                     │
│  - 임대 시간 (Lease Time)                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

DHCP DORA 과정

┌─────────────────────────────────────────────────────────────────┐
│                    DHCP DORA 과정                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트]                            [DHCP 서버]             │
│   (IP 없음)                              (192.168.1.1)          │
│      │                                        │                 │
│      │──(1) DHCP Discover ─────────────────▶ │                 │
│      │     출발지: 0.0.0.0                   │                 │
│      │     목적지: 255.255.255.255 (브로드캐스트)                │
│      │     "IP 주소가 필요합니다"             │                 │
│      │                                        │                 │
│      │◀─(2) DHCP Offer ─────────────────────│                 │
│      │     "192.168.1.100을 제안합니다"       │                 │
│      │     서브넷: 255.255.255.0             │                 │
│      │     게이트웨이: 192.168.1.1           │                 │
│      │     DNS: 8.8.8.8                      │                 │
│      │     임대 시간: 24시간                  │                 │
│      │                                        │                 │
│      │──(3) DHCP Request ──────────────────▶ │                 │
│      │     "192.168.1.100을 요청합니다"       │                 │
│      │                                        │                 │
│      │◀─(4) DHCP Ack ───────────────────────│                 │
│      │     "192.168.1.100 사용을 승인합니다"  │                 │
│      │                                        │                 │
│  [IP 설정 완료]                               │                 │
│  (192.168.1.100)                              │                 │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

DORA: Discover → Offer → Request → Acknowledge

DHCP 메시지 유형

메시지 방향 설명
DISCOVER 클라이언트 → 서버 IP 주소 요청 (브로드캐스트)
OFFER 서버 → 클라이언트 IP 주소 제안
REQUEST 클라이언트 → 서버 제안 수락 또는 갱신 요청
ACK 서버 → 클라이언트 요청 승인
NAK 서버 → 클라이언트 요청 거부
RELEASE 클라이언트 → 서버 IP 반납
INFORM 클라이언트 → 서버 추가 설정 요청

DHCP 임대 과정

┌─────────────────────────────────────────────────────────────────┐
│                    DHCP 임대 시간                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  임대 시작                                                      │
│      │                                                          │
│      ├────────────────────────────────────── 임대 시간 (T)       │
│      │                                                          │
│      ├──────────────── T/2 (50%)                                │
│      │                 │                                        │
│      │                 └─ 갱신 시도 (Request to 서버)            │
│      │                    성공 시: 임대 시간 연장                 │
│      │                                                          │
│      ├──────────────────────────── T * 7/8 (87.5%)              │
│      │                             │                            │
│      │                             └─ 리바인딩 시도               │
│      │                                (브로드캐스트)             │
│      │                                                          │
│      └────────────────────────────────────── T (100%)           │
│                                              │                  │
│                                              └─ 임대 만료        │
│                                                 IP 해제         │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

DHCP 관련 명령어

# Linux - DHCP 클라이언트
# IP 해제
sudo dhclient -r eth0

# IP 갱신
sudo dhclient eth0

# 상세 정보 출력
sudo dhclient -v eth0

# Windows
ipconfig /release     # IP 해제
ipconfig /renew       # IP 갱신

# macOS
sudo ipconfig set en0 DHCP    # DHCP 재설정

2. FTP

FTP 개요

FTP(File Transfer Protocol)는 클라이언트와 서버 간에 파일을 전송하기 위한 프로토콜입니다.

┌─────────────────────────────────────────────────────────────────┐
│                      FTP 기본 정보                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트:                                                          │
│  - 제어 연결: TCP 21                                            │
│  - 데이터 연결: TCP 20 (Active) 또는 임의 포트 (Passive)         │
│                                                                 │
│  특징:                                                          │
│  - 두 개의 채널 사용 (제어 + 데이터)                             │
│  - 평문 전송 (보안 취약)                                         │
│  - ASCII/Binary 전송 모드                                       │
│  - Active/Passive 모드                                          │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

FTP Active vs Passive 모드

┌─────────────────────────────────────────────────────────────────┐
│                    Active 모드                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트]                              [FTP 서버]            │
│  (임의 포트 N)                              (포트 21, 20)        │
│      │                                        │                 │
│      │──(1) 제어 연결 (N → 21) ────────────▶ │                 │
│      │      "PORT N+1"                       │                 │
│      │                                        │                 │
│      │◀─(2) 데이터 연결 (20 → N+1) ──────────│                 │
│      │      서버가 클라이언트로 연결          │                 │
│      │                                        │                 │
│  ※ 클라이언트 방화벽이 외부 연결 차단 시 문제 발생                │
│                                                                 │
├─────────────────────────────────────────────────────────────────┤
│                    Passive 모드                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트]                              [FTP 서버]            │
│  (임의 포트)                               (포트 21, 임의 포트)  │
│      │                                        │                 │
│      │──(1) 제어 연결 (N → 21) ────────────▶ │                 │
│      │      "PASV"                           │                 │
│      │                                        │                 │
│      │◀──── 응답: 포트 P 사용 ───────────────│                 │
│      │                                        │                 │
│      │──(2) 데이터 연결 (N+1 → P) ──────────▶ │                 │
│      │      클라이언트가 서버로 연결          │                 │
│      │                                        │                 │
│  ※ 클라이언트가 항상 연결 시작 → 방화벽 문제 적음                 │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

FTP 주요 명령어

명령 설명 예시
USER 사용자명 전송 USER username
PASS 비밀번호 전송 PASS password
LIST 디렉토리 목록 LIST
CWD 디렉토리 변경 CWD /home/user
PWD 현재 디렉토리 PWD
RETR 파일 다운로드 RETR file.txt
STOR 파일 업로드 STOR file.txt
DELE 파일 삭제 DELE file.txt
MKD 디렉토리 생성 MKD newdir
RMD 디렉토리 삭제 RMD olddir
PASV Passive 모드 PASV
PORT Active 모드 PORT 192,168,1,100,4,1
QUIT 연결 종료 QUIT

FTP 응답 코드

코드 범위 의미 예시
1xx 긍정 예비 응답 150 파일 상태 OK
2xx 긍정 완료 응답 200 명령 OK, 226 전송 완료
3xx 긍정 중간 응답 331 사용자명 OK, 비밀번호 필요
4xx 부정 일시 응답 421 서비스 불가
5xx 부정 영구 응답 530 로그인 실패, 550 권한 없음

FTP 클라이언트 사용

# 기본 FTP 클라이언트
ftp ftp.example.com

# 연결 후 명령어
ftp> user username
ftp> pass password
ftp> ls              # 목록 확인
ftp> cd directory    # 디렉토리 이동
ftp> get file.txt    # 다운로드
ftp> put file.txt    # 업로드
ftp> binary          # 바이너리 모드
ftp> ascii           # ASCII 모드
ftp> passive         # Passive 모드 토글
ftp> bye             # 연결 종료

SFTP와 FTPS

┌─────────────────────────────────────────────────────────────────┐
                FTP vs SFTP vs FTPS                               
├─────────────────────────────────────────────────────────────────┤
                                                                 
  FTP            SFTP                FTPS                      
  (평문)         (SSH 기반)           (TLS/SSL 기반)            
                                                               
  ┌─────────┐    ┌─────────┐         ┌─────────┐               
     FTP         SFTP               FTP                  
  ├─────────┤    ├─────────┤         ├─────────┤               
     TCP          SSH             TLS/SSL                
  └─────────┘    ├─────────┤         ├─────────┤               
                    TCP               TCP                  
  포트: 21       └─────────┘         └─────────┘               
                                                               
  보안: 없음     포트: 22            포트: 990 (implicit)      
                 보안: SSH 암호화           21 (explicit)       
                                     보안: TLS 암호화          
                                                                 
└─────────────────────────────────────────────────────────────────┘

권장: SFTP 사용 (SSH 기반으로 단일 포트 사용)

3. 이메일 프로토콜

이메일 전송 구조

┌─────────────────────────────────────────────────────────────────┐
                    이메일 전송 과정                              
├─────────────────────────────────────────────────────────────────┤
                                                                 
  [발신자]     [발신 서버]        [수신 서버]     [수신자]         
  alice@a.com   mail.a.com        mail.b.com    bob@b.com        
                                                             
      │──(1) SMTP─▶│                                           
         (작성)                                              
                                                             
                  │──(2) SMTP───────▶│                         
                     (서버  전송)                           
                                                             
                                    │──(3) 저장─▶│             
                                       (메일박스)             
                                                             
                                    │◀─(4) POP3/IMAP──│        
                                       (메일 수신)            
                                                                 
  프로토콜:                                                      
  - SMTP: 메일 전송 (발송)                                        
  - POP3: 메일 수신 (다운로드  삭제)                             
  - IMAP: 메일 수신 (서버에 유지)                                  
                                                                 
└─────────────────────────────────────────────────────────────────┘

SMTP (Simple Mail Transfer Protocol)

┌─────────────────────────────────────────────────────────────────┐
                      SMTP 정보                                   
├─────────────────────────────────────────────────────────────────┤
                                                                 
  포트: TCP 25 (기본), 587 (submission), 465 (SSL)               
  RFC: 5321                                                      
  용도: 이메일 전송                                               
                                                                 
  SMTP 세션 예시:                                                
                                                                 
  C: 연결 (TCP 25)                                               
  S: 220 mail.example.com ESMTP ready                            
  C: EHLO client.example.com                                     
  S: 250-mail.example.com Hello                                  
  S: 250-AUTH LOGIN PLAIN                                        
  S: 250 STARTTLS                                                
  C: MAIL FROM:<alice@example.com>                               
  S: 250 OK                                                      
  C: RCPT TO:<bob@example.com>                                   
  S: 250 OK                                                      
  C: DATA                                                        
  S: 354 Start mail input                                        
  C: Subject: Test                                               
  C:                                                             
  C: Hello, this is a test.                                      
  C: .                                                           
  S: 250 OK Message queued                                       
  C: QUIT                                                        
  S: 221 Bye                                                     
                                                                 
└─────────────────────────────────────────────────────────────────┘

SMTP 주요 명령어

명령 설명
HELO/EHLO 클라이언트 식별 (EHLO는 확장 SMTP)
MAIL FROM 발신자 지정
RCPT TO 수신자 지정
DATA 메일 내용 시작
QUIT 연결 종료
AUTH 인증
STARTTLS TLS 암호화 시작
RSET 트랜잭션 초기화

POP3 (Post Office Protocol v3)

┌─────────────────────────────────────────────────────────────────┐
│                      POP3 정보                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: TCP 110 (기본), 995 (SSL/TLS)                            │
│  RFC: 1939                                                      │
│  용도: 이메일 수신 (다운로드)                                     │
│                                                                 │
│  특징:                                                          │
│  - 메일을 로컬로 다운로드                                        │
│  - 서버에서 삭제 (기본)                                          │
│  - 단일 기기에서 사용 적합                                       │
│  - 오프라인 읽기 가능                                            │
│                                                                 │
│  POP3 세션 예시:                                                │
│                                                                 │
│  S: +OK POP3 server ready                                       │
│  C: USER alice                                                  │
│  S: +OK                                                         │
│  C: PASS password123                                            │
│  S: +OK Logged in                                               │
│  C: STAT                                                        │
│  S: +OK 3 1024                                                  │
│  C: LIST                                                        │
│  S: +OK 3 messages                                              │
│  S: 1 512                                                       │
│  S: 2 256                                                       │
│  S: 3 256                                                       │
│  S: .                                                           │
│  C: RETR 1                                                      │
│  S: +OK 512 octets                                              │
│  S: (메일 내용)                                                 │
│  S: .                                                           │
│  C: DELE 1                                                      │
│  S: +OK Deleted                                                 │
│  C: QUIT                                                        │
│  S: +OK Bye                                                     │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

IMAP (Internet Message Access Protocol)

┌─────────────────────────────────────────────────────────────────┐
│                      IMAP 정보                                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: TCP 143 (기본), 993 (SSL/TLS)                            │
│  RFC: 3501 (IMAP4)                                              │
│  용도: 이메일 수신 (서버 동기화)                                  │
│                                                                 │
│  특징:                                                          │
│  - 메일을 서버에 보관                                            │
│  - 여러 기기에서 동기화                                          │
│  - 폴더 관리 가능                                                │
│  - 부분 다운로드 지원                                            │
│  - 온라인 상태 필요                                              │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

POP3 vs IMAP 비교

특성 POP3 IMAP
메일 저장 위치 로컬 (다운로드) 서버
다중 기기 동기화 어려움 지원
오프라인 읽기 용이 제한적
서버 저장 공간 적음 많음 필요
폴더 관리 제한적 지원
부분 다운로드 불가 가능
적합한 용도 단일 기기 다중 기기

이메일 포트 정리

프로토콜 포트 보안
SMTP 25 평문
SMTP Submission 587 STARTTLS
SMTPS 465 SSL/TLS
POP3 110 평문
POP3S 995 SSL/TLS
IMAP 143 평문
IMAPS 993 SSL/TLS

4. SSH

SSH 개요

SSH(Secure Shell)는 네트워크 상에서 암호화된 원격 접속을 제공하는 프로토콜입니다.

┌─────────────────────────────────────────────────────────────────┐
│                      SSH 정보                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: TCP 22                                                   │
│  RFC: 4251-4256                                                 │
│  버전: SSH-2 (권장), SSH-1 (폐기)                                │
│                                                                 │
│  기능:                                                          │
│  - 암호화된 원격 쉘 접속                                         │
│  - 파일 전송 (SCP, SFTP)                                        │
│  - 포트 포워딩/터널링                                            │
│  - X11 포워딩                                                   │
│                                                                 │
│  인증 방식:                                                     │
│  - 비밀번호 인증                                                │
│  - 공개키 인증 (권장)                                           │
│  - 호스트 기반 인증                                              │
│  - 키보드 인터랙티브                                             │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

SSH 연결 과정

┌─────────────────────────────────────────────────────────────────┐
│                    SSH 연결 과정                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트]                              [서버]                │
│      │                                        │                 │
│      │──(1) TCP 연결 (포트 22) ────────────▶ │                 │
│      │                                        │                 │
│      │◀─(2) 프로토콜 버전 교환 ──────────────│                 │
│      │     SSH-2.0-OpenSSH_8.9               │                 │
│      │                                        │                 │
│      │◀──(3) 키 교환 알고리즘 협상 ─────────▶│                 │
│      │     암호화, MAC, 압축 알고리즘        │                 │
│      │                                        │                 │
│      │◀──(4) 키 교환 (DH/ECDH) ────────────▶│                 │
│      │     세션 키 생성                       │                 │
│      │                                        │                 │
│      │◀════(5) 암호화된 통신 시작 ══════════▶│                 │
│      │                                        │                 │
│      │──(6) 사용자 인증 ─────────────────▶  │                 │
│      │     (비밀번호 또는 공개키)             │                 │
│      │                                        │                 │
│      │◀─(7) 인증 성공 ──────────────────────│                 │
│      │                                        │                 │
│      │◀════(8) 쉘 세션 시작 ════════════════▶│                 │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

SSH 공개키 인증

┌─────────────────────────────────────────────────────────────────┐
│                    SSH 공개키 인증 원리                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트]                              [서버]                │
│                                                                 │
│  개인키 (id_ed25519)                 공개키 (authorized_keys)   │
│  ┌──────────────────┐               ┌──────────────────┐        │
│  │ 절대 공개 금지    │               │ 클라이언트       │        │
│  │ 로컬에만 보관    │               │ 공개키 저장      │        │
│  └──────────────────┘               └──────────────────┘        │
│           │                                   │                 │
│           │                                   │                 │
│  인증 과정:                                                     │
│  1. 서버가 무작위 챌린지 전송                                    │
│  2. 클라이언트가 개인키로 챌린지 서명                             │
│  3. 서버가 공개키로 서명 검증                                     │
│  4. 검증 성공 시 인증 완료                                       │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

SSH 주요 명령어

# 기본 접속
ssh user@hostname
ssh -p 2222 user@hostname    # 포트 지정

# 키 생성
ssh-keygen -t ed25519 -C "email@example.com"
ssh-keygen -t rsa -b 4096

# 공개키 복사
ssh-copy-id user@hostname
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname

# 파일 전송 (SCP)
scp file.txt user@host:/path/
scp user@host:/path/file.txt ./
scp -r directory/ user@host:/path/

# SFTP
sftp user@hostname

SSH 터널링

# 로컬 포트 포워딩
# 로컬 8080 → 원격 서버 경유 → 대상 서버 80
ssh -L 8080:target.example.com:80 user@jump.example.com

# 원격 포트 포워딩
# 원격 서버 8080 → 로컬 머신 80
ssh -R 8080:localhost:80 user@remote.example.com

# 동적 포트 포워딩 (SOCKS 프록시)
ssh -D 1080 user@proxy.example.com
┌─────────────────────────────────────────────────────────────────┐
                    SSH 로컬 포트 포워딩                          
├─────────────────────────────────────────────────────────────────┤
                                                                 
  ssh -L 8080:db.internal:3306 user@jump.example.com             
                                                                 
  [로컬 PC]          [점프 서버]          [DB 서버]               
  localhost:8080      jump.example.com    db.internal:3306       
                                                              
      │════ SSH 터널 ════▶│                                    
                          │──────────────────▶│                 
                                                              
      │◀═══════════════════│◀──────────────────│                 
                                                                 
  사용: mysql -h 127.0.0.1 -P 8080 (로컬에서 DB 접속)             
                                                                 
└─────────────────────────────────────────────────────────────────┘

5. Telnet

Telnet 개요

Telnet은 원격 호스트에 터미널 접속을 제공하는 프로토콜입니다. 보안상 SSH 사용 권장.

┌─────────────────────────────────────────────────────────────────┐
│                      Telnet 정보                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: TCP 23                                                   │
│  RFC: 854                                                       │
│                                                                 │
│  특징:                                                          │
│  - 평문 전송 (암호화 없음)                                       │
│  - 비밀번호 노출 위험                                            │
│  - 스니핑에 취약                                                 │
│  - 레거시 시스템에서만 사용                                       │
│                                                                 │
│  ⚠️  보안 경고:                                                  │
│  - 인터넷에서 Telnet 사용 금지                                   │
│  - SSH로 대체 필요                                               │
│  - 내부망에서도 가급적 피할 것                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

Telnet 활용 (테스트용)

Telnet은 보안상 원격 접속에는 부적합하지만, 포트 연결 테스트에 유용합니다.

# 포트 연결 테스트
telnet example.com 80
telnet example.com 443

# HTTP 테스트
telnet example.com 80
GET / HTTP/1.1
Host: example.com
( )

# SMTP 테스트
telnet mail.example.com 25
EHLO test
QUIT

# 연결 확인만 (nc 권장)
nc -zv example.com 80
nc -zv example.com 22

Telnet vs SSH

특성 Telnet SSH
포트 23 22
암호화 없음 (평문) 있음
인증 평문 비밀번호 다양한 방식
보안 매우 취약 강함
파일 전송 없음 SCP, SFTP
터널링 없음 지원
사용 권장 테스트용만 항상 권장

6. WebSocket

WebSocket 개요

WebSocket은 클라이언트와 서버 간 양방향 실시간 통신을 제공하는 프로토콜입니다.

┌─────────────────────────────────────────────────────────────────┐
│                    WebSocket 정보                                │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  포트: TCP 80 (ws://), TCP 443 (wss://)                         │
│  RFC: 6455                                                      │
│                                                                 │
│  특징:                                                          │
│  - HTTP 업그레이드로 시작                                        │
│  - 양방향 (Full-Duplex) 통신                                    │
│  - 지속 연결 (Persistent Connection)                            │
│  - 낮은 오버헤드 (헤더 최소화)                                   │
│  - 실시간 데이터 전송                                            │
│                                                                 │
│  활용 사례:                                                     │
│  - 실시간 채팅                                                  │
│  - 온라인 게임                                                  │
│  - 주식/가상화폐 시세                                           │
│  - 라이브 스트리밍                                              │
│  - 협업 도구                                                    │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

HTTP vs WebSocket

┌─────────────────────────────────────────────────────────────────┐
│                  HTTP vs WebSocket                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  HTTP (요청-응답)                 WebSocket (양방향)             │
│                                                                 │
│  클라이언트      서버             클라이언트      서버            │
│      │            │                  │            │             │
│      │──요청1 ──▶│                  │══연결══════│             │
│      │◀──응답1 ──│                  │            │             │
│      │            │                  │◀─ 메시지 ──│             │
│      │──요청2 ──▶│                  │── 메시지 ─▶│             │
│      │◀──응답2 ──│                  │◀─ 메시지 ──│             │
│      │            │                  │── 메시지 ─▶│             │
│      │──요청3 ──▶│                  │            │             │
│      │◀──응답3 ──│                  │◀─ 메시지 ──│             │
│                                     │══연결 종료═│              │
│                                                                 │
│  매번 연결 생성                     한 번 연결, 지속 통신          │
│  클라이언트만 요청 가능             양쪽 모두 전송 가능            │
│  요청 헤더 오버헤드                 최소 프레임 헤더               │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

WebSocket 핸드셰이크

┌─────────────────────────────────────────────────────────────────┐
│                  WebSocket 핸드셰이크                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  [클라이언트 요청 - HTTP Upgrade]                               │
│  ─────────────────────────────────                              │
│  GET /chat HTTP/1.1                                             │
│  Host: server.example.com                                       │
│  Upgrade: websocket                                             │
│  Connection: Upgrade                                            │
│  Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==                   │
│  Sec-WebSocket-Version: 13                                      │
│                                                                 │
│  [서버 응답 - 101 Switching Protocols]                          │
│  ──────────────────────────────────────                         │
│  HTTP/1.1 101 Switching Protocols                               │
│  Upgrade: websocket                                             │
│  Connection: Upgrade                                            │
│  Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=             │
│                                                                 │
│  [이후 WebSocket 프레임으로 통신]                                │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

WebSocket 클라이언트 (JavaScript)

// WebSocket 연결
const socket = new WebSocket('wss://example.com/chat');

// 연결 성공
socket.onopen = function(event) {
    console.log('WebSocket 연결됨');
    socket.send('Hello Server!');
};

// 메시지 수신
socket.onmessage = function(event) {
    console.log('메시지 수신:', event.data);
};

// 연결 종료
socket.onclose = function(event) {
    console.log('연결 종료:', event.code, event.reason);
};

// 에러 처리
socket.onerror = function(error) {
    console.error('WebSocket 에러:', error);
};

// 메시지 전송
socket.send(JSON.stringify({ type: 'chat', message: 'Hello!' }));

// 연결 종료
socket.close();

WebSocket 서버 (Node.js)

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function(ws) {
    console.log('클라이언트 연결됨');

    // 메시지 수신
    ws.on('message', function(message) {
        console.log('받은 메시지:', message);

        // 에코 응답
        ws.send('서버 응답: ' + message);

        // 모든 클라이언트에게 브로드캐스트
        wss.clients.forEach(function(client) {
            if (client.readyState === WebSocket.OPEN) {
                client.send(message);
            }
        });
    });

    ws.on('close', function() {
        console.log('클라이언트 연결 종료');
    });
});

7. 연습 문제

기초 문제

  1. DHCP
  2. DORA의 각 단계를 설명하세요.
  3. DHCP 서버가 할당하는 정보를 모두 나열하세요.

  4. FTP

  5. Active 모드와 Passive 모드의 차이는?
  6. FTP의 보안 문제와 대안을 설명하세요.

  7. 이메일

  8. SMTP, POP3, IMAP의 역할을 각각 설명하세요.
  9. POP3와 IMAP의 차이점은?

중급 문제

  1. SSH
  2. SSH 공개키 인증의 장점은?
  3. SSH 로컬 포트 포워딩을 사용하는 상황 예시를 제시하세요.

  4. 포트 번호

  5. 다음 프로토콜의 포트 번호를 쓰세요:

    • DHCP (클라이언트/서버)
    • FTP (제어/데이터)
    • SMTP (기본/SSL)
    • SSH
    • POP3S
    • IMAPS
  6. 실습 문제

# 다음 명령의 결과를 예측하세요

# 1. SSH 터널을 통해 원격 DB에 접속
ssh -L 3306:db.internal:3306 user@bastion.example.com
mysql -h 127.0.0.1 -P 3306 -u dbuser -p

# 2. SFTP로 파일 업로드
sftp user@server.example.com
put localfile.txt /home/user/

# 3. Telnet으로 HTTP 테스트
telnet example.com 80
GET / HTTP/1.1
Host: example.com

고급 문제

  1. WebSocket
  2. HTTP Polling과 WebSocket의 차이는?
  3. WebSocket이 HTTP를 통해 핸드셰이크하는 이유는?

  4. 보안 비교

  5. Telnet, FTP, SMTP의 보안 문제점을 설명하세요.
  6. 각각의 보안 대안은 무엇인가요?

8. 다음 단계

15_Network_Security_Basics.md에서 방화벽, NAT, VPN 등 네트워크 보안 기초를 배워봅시다!


9. 참고 자료

RFC 문서

포트 번호 요약

프로토콜 평문 포트 보안 포트
FTP 21 (제어), 20 (데이터) 990 (FTPS)
SSH/SFTP 22 -
Telnet 23 -
SMTP 25, 587 465
DNS 53 853 (DoT)
DHCP 67/68 -
HTTP 80 443 (HTTPS)
POP3 110 995
IMAP 143 993
to navigate between lessons