기술 · 출처 기반 답변
SMTP는 TCP인가요, UDP인가요? 프로토콜 기술 분석
SMTP는 TCP 프로토콜입니다. 이메일 메시지가 안정적으로, 올바른 순서로, 데이터 손실 없이 전달되도록 Transmission Control Protocol에 의존합니다. 메시지의 모든 바이트가 온전히 도착해야 하는 통신 프로토콜에서는 이것이 매우 중요합니다.
SMTP에 TCP가 필요한 이유
이메일 전달은 패킷 손실을 허용할 수 없기 때문에 SMTP는 연결 지향 프로토콜이 필요합니다. TCP는 세션을 맺기 위한 3-way 핸드셰이크, 패킷 순서를 맞추는 시퀀스 번호, 수신을 확인하는 확인 응답(ACK)을 제공합니다. 전송 중 패킷이 손실되면 TCP가 자동으로 재전송을 요청합니다. UDP는 비연결형이며 전달을 보장하지 않으므로, 명령과 응답으로 구성된 SMTP 세션에는 적합하지 않습니다.
SMTP 핸드셰이크 과정
TCP 연결 덕분에 SMTP는 대화 형태의 교환을 수행할 수 있습니다. TCP 소켓이 열리면 서버가 220 인사 메시지를 보냅니다. 그러면 클라이언트가 EHLO 또는 HELO를 보내 세션을 시작합니다. 이러한 상태 기반 상호작용은 MAIL FROM과 RCPT TO 명령으로 이어집니다. TCP가 제공하는 안정적인 스트림이 없다면 서버와 클라이언트는 이러한 상태 전환을 동기화하거나 오류 코드를 효과적으로 처리할 수 없습니다.
표준 SMTP TCP 포트
SMTP는 용도에 따라 등록된 여러 TCP 포트에서 동작합니다. 포트 25는 서버 간 릴레이에 사용됩니다. 포트 587은 STARTTLS를 사용하는 클라이언트 제출의 표준입니다. 포트 465는 암시적 TLS에 사용됩니다. 이 할당은 모두 IANA가 관리하며, 메시지 헤더와 본문을 전송하는 동안 세션 무결성을 유지하기 위해 모두 TCP 전송 계층을 사용합니다.
보안과 전송 계층
최신 SMTP 구현은 TCP 스트림을 TLS로 감싸 암호화를 제공합니다. 이는 포트 587의 STARTTLS 명령이나 포트 465의 암시적 TLS로 이루어집니다. TLS 자체도 핸드셰이크와 키 교환을 위해 안정적인 전송 계층이 필요하므로 기반이 되는 TCP 연결은 필수입니다. 개발자는 SendHQ 무료 도구로 이러한 보안 연결을 위한 DNS 설정을 확인할 수 있습니다.
UDP 프로토콜과의 비교
SMTP는 TCP를 사용하지만, DNS 같은 다른 이메일 관련 서비스는 빠르고 오버헤드가 적은 쿼리를 위해 UDP를 사용합니다. 다만 DNS 쿼리가 UDP로 메일 서버 IP를 확인하고 나면 실제 메일 전송은 TCP로 전환됩니다. 이 하이브리드 방식 덕분에 빠른 조회와 안정적인 전달이 가능합니다. UDP는 속도와 효율을 위해, TCP는 정확성과 세션 관리를 위해 사용됩니다.
팀에서 자주 묻는 질문
SMTP를 UDP로 실행할 수 있나요?
아니요. SMTP 사양은 안정적이고 순서가 보장되는 데이터 스트림을 요구하며, 이는 TCP만 제공합니다. UDP는 필요한 세션 관리를 지원하지 않습니다.
이메일을 보낼 때 어떤 TCP 포트가 가장 좋나요?
이메일 제출에는 STARTTLS를 지원해 안전한 전송이 가능한 포트 587을 권장합니다.
TLS를 사용하면 전송 프로토콜이 바뀌나요?
아니요. TLS는 TCP 위에 놓이는 암호화 계층입니다. 데이터를 암호화하지만 패킷의 실제 전송은 여전히 TCP에 의존합니다.
SMTP는 TCP를 쓰는데 DNS는 왜 UDP를 쓰나요?
DNS는 지연을 줄이기 위해 작고 빠른 쿼리에 UDP를 사용합니다. SMTP는 패킷 하나만 손실되어도 이메일 메시지 전체가 손상될 수 있으므로 TCP를 사용합니다.
1차 출처
- RFC 5321: 단순 메일 전송 프로토콜(SMTP) — RFC Editor
- 서비스 이름 및 전송 프로토콜 포트 번호 레지스트리 — IANA
- RFC 3207: 전송 계층 보안(TLS) 기반 보안 SMTP를 위한 SMTP 서비스 확장 — RFC Editor