이 글에서 다룰 내용

SMTP가 Email 전송 과정에서 어떤 역할을 수행하는지 정리하고, 서버 간 메일 전달이 어떤 구조와 흐름으로 이루어지는지 프로토콜 관점에서 설명함

또한, SMTP가 단순 데이터 전송이 아닌, 명령과 응답을 기반으로 동작하는 구조임을 정리하고, 세션 단위 통신과 전송 모델 Store & Forward 이 어떻게 연결되는지 함께 다움

이후 실제 메일 전송 과정에서 사용되는 명령 흐름과 상태 코드 구조까지 이어서 설명함


학습 목표

  • SMTP: Simple Mail Transfer Protocol의 역할을 이해할 수 있음
  • 서버 간 메일 전달이 이루어지는 방식과 구조를 파악할 수 있음
  • 명령 기반 전송 흐름과 상태 코드 개념을 이해할 수 있음
  • 이후 확장 기능 및 보안 구조로 이어지는 기반을 확보할 수 있음






SMTP 개요

SMTP: Simple Mail Transfer Protocol
서버 간 Email 전달을 위한 표준 프로토콜

SMTP는 Email 전송 과정에서 서버 간 메시지를 전달하는 역할을 수행함
메일은 클라이언트에서 생성된 이후 여러 서버를 거쳐 이동하며, 이 전달 과정은 SMTP를 통해 이루어짐


Email 전송 흐름 기준

  • 구조 → MUA / MSA / MTA / MDA
  • 경로 결정 → DNS / MX
  • 실제 전달 → SMTP

즉, SMTP는 결정된 경로를 따라 메일을 실제로 전달하는 프로토콜

SMTP는 텍스트 기반 프로콜이며, 사람이 읽을 수 있는 명령을 사용함. 발신 서버는 명령을 전송하고, 수신 서버는 상태 코드를 포함한 응답을 반환한.
이 명령/응답 구조를 통해 전송이 단계적으로 진행됨

이 프토토콜은 RFC 5321에서 정의되어 있으며, Email 전송의 핵심 동작을 담당함



SMTP 정의

SMTP는 서버간 Email 전달을 위한 프로토콜이며, 명령과 응답을 기반으로 동작하는 통신 구조를 가짐.

통신은 요청-응답 방식으로 이루어지며, 발신 서버가 명령을 전송하면 수신 서버는 상태 코드로 처리 결과를 반환함.
각 단계는 이전 단계의 성공 여부를 기준으로 다음 단계로 진행됨

SMTP는 연결 기반 프로토콜로 동작함. 하나의 TCP 연결 안에서 여러 명령이 순차적으로 처리되며, 이 연결 단위를 세션이라고 함. 메일 전송은 이 세션 단위로 이루어짐

이 프로토콜은 데이터 전송 자체보다, 전달 절차와 통신 흐름을 정의하는 데 초럼이 맞춰져 있음



SMTP 역할

SMTP는 Email 전송 흐름에서 Relay 단계에 해당하는 동작을 수행함. 발신 서버는 수신 도메인을 기준으로 대상 서버를 선택한 뒤, SMTP를 통해 새항 서버로 메일을 전달함


Relay 및 전송 역할

메일은 여러 서버를 거치며 단계적으로 전달됨

전송 과정에서 SMTP는

  • 다음 서버로 메시지 전달
  • 수신 서버와 통신 상태 확인
  • 응답 코드 기반으로 전송 성공 여부 판단

을 수행함

메일 전달은 단일 서버에서 끝나지 않으며, Relay 구조를 따라 반복적으로 수행됨. 이 과정에서 SMTP는 각 서버 간 전달을 연결하는 역할을 가짐


한계

SMTP는 전달을 위한 프로토콜로, 메시지 생성이나 저장 기능은 포함하지 않음. 메시지는 상위 계층에서 생성되며, 최종 저장은 수신 서버에서 수행됨

또한 기본 SMTP는 암호화와 인증 기능을 포함하지 않음. 전송 구간은 기본적으로 평문으로 동작하며, 보안 기능은 STARTTLS, SMTP AUTH와 같은 확장 기능을 통해 별도로 적용됨



전송 모델 (Store & Forward)

SMTP 전송은 Store & Forward 모델을 기반으로 동작함

메일은 하나의 경로로 즉시 전달되지 않고, 중간 서버를 거치며 단계적으로 전달됨. 각 서버는 메일을 수신하면 내부 큐에 저장한 뒤, 다음 서버로 전송 가능한 시점에 전달을 수행함

이 구조는 네트워크 환경의 불안정성을 고려한 방식으로, 수신 서버가 일시적으로 응답하지 않는 경우에도 메일을 유지하고 재전송할 수 있도록 설계됨

메일 전달 구조

SenderMTAQueueMTAQueueReceiver

이 과정에서 각 서버는 전달 책임을 가지며, 다음 서버로의 전송이 완료될 때까지 메일을 보관함

이 모델을 통해 Email은 실시간 통신이 아닌 비동기 방식으로 동작하며, 안정적인 전달이 가능해짐






SMTP 동작 구조

SMTP는 세션 시간으로 동작하며, 명령과 응답의 흐름을 통해 메일 전송이 이루어짐
하나의 연결안에서 전송 과정이 단계적으로 진행되며, 각 단계는 상태 코드로 제어됨


SMTP 세션

SMTP 통신은 TCP 연결을 기반으로 이루어지며, 이 연결 단쉬는 세션이라고 함.
하나의 세션 안에서 명령과 응답이 순차적으로 교환되면 하나의 전송이 끝남


연결 수립

SMTP 세션은 발신 서버가 수신 서버에 TCP 연결을 생성하면서 시작됨

  • Default Port: 25 (Relay)
  • Submission: 587

연결이 수립되면 수신 서버는 초기 응답을 반환함. 이 응답은 서버가 요청을 수용할 준비가 되었음을 나타냄.
이후 발신 서버는 자신의 도메인을 식별하기 위한 명령을 전송하면서 세션이 진행됨


명령 / 응답 구조

SMTP 통신은 명령과 응답 구조 위에서 진행됨. 각 명령은 상태 코드 응답을 통해 다음 단계로 이어지게됨

기본적인 흐름 예시

C: EHLO mail.here.com
S: 250-mail.there.com

C: MAIL FROM:<bob@here.com>
S: 250 OK

C: RCPT TO:<alice@there.com>
S: 250 OK

이 구조에서

  • 모든 명령은 순차적으로 처리
  • 각 명령에 대해 반드시 응답 반환
  • 응답 코드로 다음 단계의 진행 여부 결정

세션 종료

메일 전송이 완료되면 발신 서버는 QUIT 명령을 전송하고, 수신서버는 이에 대한 응답을 반환한 뒤 연결이 종료됨

세션이 종료되면 해당 연결에서의 전송 과정이 완전히 끝나며, 이후 메일 전송은 새로운 세션에서 다시 수행됨



SMTP 전송 흐름

SMTP 전송은 정해진 명령 순서를 따라 진행됨.
각 단계는 독립적인 의미를 가지며, 특정 단계에서 실패가 발생하면 이후 단계는 진행되지 않음


기본 전송 과정

SMTP 전송은 다음 순서로 이루어짐

  1. 연결 수립
  2. 발신자 지정 (MAIL FROM)
  3. 수신자 지정 (RCPT TO)
  4. 메시지 전송 (DATA)
  5. 세션 종료 (QUIT)

이 흐름은 모든 SMTP 전송에 공통적으로 적용됨


주요 명령

SMTP 전송에서 사용되는 핵심 명령은 다음과 같음

  • EHLO / HELO: 서버 식별 및 기능 협상
  • MAIL FROM: 발신자 지정
  • RCPT TO: 수신자 지정
  • DATA: 메시지 전송

각 명령은 정송 흐름에서 특정 역할을 가지며, 순서가 유지되어야 정상적인 전송이 이루어짐


메시지 전달 구조

SMTP에서 실제 메시지는 DATA명령 이후에 전송됨.
메시지는 헤더와 본문을 포함한 전체 데이터 형태로 전달됨

전송 구조

EHLO
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
Subject: Example

Messagge Body
.
QUIT

구조 특징

  • 헤더 + 본문 형태
  • . : 메시지 종료 표시
  • 전체 메시지가 하나의 단위로 전달됨



상태 코드

SMTP는 상태 코드 기반으로 동작하며, 각 단계의 처리 결과는 응답 코드로 표현됨.
이 코드를 통해 전송 성공 여부와 실패 유형을 판단할 수 있음


코드 구조

상태 코드는 세 자리 숫자로 구성됨

  • 2xx: 성공
  • 4xx: 일시적 실패
  • 5xx: 영구적 실패

예시

250 OK
421 Service not available
550 User unknown

응탑 코드는 각 명령잏후 반환되며, 다음 단계로 진행할 수 있는지를 결정하는 기준이 됨/


실패 유형

SMTP에서는 실패를 두 가지 유형으로 구분하며, 메일 전송 시스템에서 재시도 여부와 처리 방식을 결정하는 기준으로 사용됨

일시적 실패 (Temporary Failure)
: 일정 시간 이후 재시도 가능

영구적 실패 (Permanent Failure)
: 설정 오류 또는 정책 문제로 재시도 불가






SMTP 확장 및 제어

SMTP는 기본 전송 기능 회에도 확장 기능을 통해 보안과 인증을 지원함.
이러한 확장은 ESMTP를 통해 제공되며, 서버 간 협상을 통해 사용 여부가 결정됨


확장 기능

SMTP는 기본 명령만으로 동작할 수 있지만, 실제 확경에서는 다양한 확장 기능이 함계 사용됨.
이러한 확장은 서버가 지원하는 기능을 기반으로 선택적으로 적용됨


ESTMP

ESMTP: Extended Simple Mail Transfer Protocol

ESMTP는 SMTP의 확장 기능을 지원하는 구조로, 기존 SMTP에서 사용되던 HELO 명령 대신 EHLO를 사용하여 서버가 지원하는 기능 목록을 교환함

EHLO 명령에 대한 응답에는 서버가 지원하는 확장 기능이 나열되며, 이후의 전송 과정에서 해당 기능을 선택적으로 사용할 수 있음


대표적인 확장 기능

  • STARTTLS: 암호화 지원
  • AUTH: 사용자 인증
  • SIZE: 메시지 크기 제한
  • 8BITMIME: 확장된 문자 인코딩 지원

ESMTP는 기능 협상 기반으로 동작하며, 서버 간 지원 여부에 따라 실제 사용 기능이 결정됨


STARTTLS

STARTTLS는 SMTP 통신을 암호화하기 위한 확장 기능
SMTP 연결은 기본적으로 평문으로 시작되며, STARTTLS 명령을 통해 TLS 기반 암호화로 전환됨


동작 흐름

EHLO
→ STARTTLS
→ TLS Handshake
→ 암호화된 SMTP 통신

암호화가 적용되면 이후 전송되는 명령과 데이터는 보호된 상태로 전달됨.

STARTTLS는 선택적(opportunistic) 방식으로 동작하며, 상대 서버가 지원하지 않을 경우 평문 통신이 유지될 수 있음


SMTP AUTH

AUTH는 발신 서버 또는 클라이언트의 인증을 수행하기 위한 확장 기능

주로 Submission 구간에서 사용되며, 인증된 사용자만 메일을 전송할 수 있도록 제한함


인증 방식

  • LOGIN
  • RLAIN
  • CRAM-MD5

SMTP AUTH는 무단 메일 발송을 방지하고, 발신자의 신원을 확인하는 역할을 수행함



보안 / 인증

SMTP는 기본적으로 암호화와 인증 기능을 포함하지 않기 때문에, 위와 같은 확장 기능을 통해 보안이 적용됨

주요 보안 요소

  • 전송 구간 암호화 STARTTLS
  • 사용자 인증 AUTH

Relay 구간에서는 별도의 인증이 없기 때문에, IP 기반 정책이나 메일 흐름 정책을 통해 접근을 제어함

SMTP 보안은 단일 기능이 아니라, 여러 요소가 결합되어 적용되는 구조를 가짐






운영 관점

SMTP는 전송 자체보다 문제 식별과 흐름 추적이 중요한 프로토콜
메일은 여러 서버를 거치며 전달되기 때문에, 개별 단계가 아닌 전체 흐름을 기준으로 상태를 확인해야 함


로그

메일 전송 과정에서 발생하는 로그는 SMTP 동작을 확인하는 가장 기본적인 정보
각 서버는 명령과 응답, 상태코드를 포함한 로그를 기록하며 이를 통해 전송 흐름을 추적할 수 있음

확인 기준

  • 발신 서버 : 전송 시도 여부
  • 중간 서버 (MTA) : Relay cjfl tkdxo
  • 수신 서버 : 수신 및 저장 여부

로그에서는 SMTP 명령과 상태 코드가 함께 포함되며, 특정 단계에서 전송이 중단되었는지 확인할 수 있음

메일 문제 분석은 단일 서버 로그만으로 부족하며, 전송 경로 전체를 기준으로 추척해야 정확한 원인을 파악할 수 있음



오류 분석

SMTP는 상태 코드 기반으로 동작하기 때문에, 오류 본석은 응답 코드 해석에서 시작됨

문제 발생 시 확인 순서
1. 상태 코드 확인
2. 실패 유형 판단 (4xx /5xx)
3. 발생 위치 확인 (어느 서버 단계인지)

예시

4xx → 일시적 문제 → 재시도 대상
5xx → 설정 또는 정책 문제 → 즉시 확인 필요

상태 코드를 기준으로 문제를 분류하면, 불필요한 재시도를 줄이고 원인 파악 속도를 높일 수 있음



보안

SMTP는 기본적으로 평문 통신을 사용하기 때문에, 보안 설정이 함께 적용되어야 함

  • STARTTLS 적용 → 전송 구간 암호화
  • SMTP AUTH → 발신자 인증
  • Open Relay 차단 → 무단 전송 방지

Open Relay는 인증 없이 메일을 전달할 수 있는 상태를 의미하며, 스팸 발송에 악용될 수 있음
Relay 정책과 인증 설정을 통해 이를 제한해야 함

또한 암호화가 적용되지 않은 경우 메일 내용과 정보가 노출될 수 있으므로, TLS 적용이 기본적으로 요구됨






정리

SMTP는 서버 간 Email 전달을 수행하는 프로토콜로, 명령과 응답을 기반으로 동작하는 세션 단위 통신 구조를 가짐.

메일 전송은 하나의 연결 안에서 순차적으로 진행되며, 각 단계는 상태 코드를 통해 제어됨. 이 구조를 통해 전송 과정이 단계적으로 처리됨.

전송 구조

  • SMTP 전송은 세션 단위로 수행됨
  • 하나의 세션 안에서 명령과 응답이 반복됨
  • 전송은 정해진 명령 순서를 따라 진행됨

전체 흐름

연결 → EHLO → MAIL FROM → RCPT TO → DATA → QUIT

각 단계는 이전 단계의 성공 여부에 따라 다음 단계로 진행됨


동작 모델

SMTP는 Store & Forward 모델을 기반으로 동작함

  • 메일은 즉시 전달되지 않고 큐에 저장됨
  • 다음 서버로 전달 가능한 시점에 전송 수행
  • 여러 서버를 거치며 단계적으로 전달됨

통신 구조

  • 텍스트 기반 명령 / 응답 구조
  • 서버 간 요청-응답 방식으로 통신
  • 상태 코드로 처리 결과 판단
    • 상태 코드 기준
      2xx → 성공
      4xx → 일시적 실패 (재시도)
      5xx → 영구적 실패

확장 및 보안

  • ESMTP → 확장 기능 협상 구조
  • STARTTLS → 전송 구간 암호화
  • SMTP AUTH → 발신자 인증

기본 SMTP는 평문 프로토콜이며, 보안 기능은 확장을 통해 적용됨


운영 관점

  • 로그 기반으로 전송 흐름 추적 필요
  • 상태 코드를 통해 문제 위치와 유형 판단
  • Open Relay 차단 및 인증 설정 필수
profile
지식을 쌓기 위한 기록 저장소

0개의 댓글