본문 바로가기

CS Fundamental

[CS Fundamental] 단순 전자우편 전송 프로토콜(SMTP)이란?

https://www.cloudflare.com/ko-kr/learning/email-security/what-is-smtp/

 

 

1) 단순 전자우편 전송 프로토콜(SMTP)이란?

- 단순 전자우편 전송 프로토콜(SMTP)은 네트워크를 통해 전자우편(이메일)을 전송하는 기술 표준입니다. 

  다른 네트워킹 프로토콜과 마찬가지로 컴퓨터와 서버는 SMTP를 이용하여 기반 하드웨어나 소프트웨어와 

  관계없이 데이터를 교환할 수 있습니다. 

 

- 편지 봉투에 표준화된 주소 양식을 사용해서 우편 서비스가 이뤄지는 것처럼, 

   SMTP 덕분에 이메일이 발신자에게서 수신자에게로 이동하는 방식이 표준화되므로,

   광범위하게 이메일을 전송할 수 있습니다. 

 


2) SMTP의 작동 방식은?

- 모든 네트워킹 프로토콜은 미리 정의한 데이터 교환 프로세스를 따릅니다.

  SMTP는 이메일 클라이언트와 메일 서버 간의 데이터 교환 프로세스를 정의합니다.

  사용자는 이메일 클라이언트와 상호 작용합니다.

  이메일 클라이언트는 사용자가 액세스하여 이메일을 전송하는 컴퓨터나 웹 응용 프로그램을 말합니다. 

  

- 메일 서버는 이메일의 전송, 수신, 전달을 위한 특화된 컴퓨터입니다.

  사용자는 메일 서버와 직접 상호 작용하지 않습니다. 

 

 - 다음은 이메일 클라이언트와 전자 메일 서버 사이에서 이메일 전송이 시작되는 과정을 

   요약한 내용입니다. 

 

(1) SMTP 연결 알림

- SMTP는 전송 프로토콜로 전송 제어 프로토콜(TCP)을 이용하므로

  첫 번째 단계는 클라이언트와 서버 간 TCP 연결로 시작됩니다.

  그 다음 이메일 클라이언트가 특화된 'Hello" 명령으로 이메일 전송 프로세스를 시작합니다. 

 

(2) 이메일 데이터 전송

- 클라이언트가 이메일 헤더(대상 및 제목 줄 포함), 이메일 본문, 기타 추가 구성 요소로 일워진

  실제 이메일 컨텐츠와 함께 일련의 명령을 서버에 보냅니다.

 

(3) 메일 전송 에이전트(MTA)

- 서버가 메일 전송 에이전트(MTA)라는 프로그램을 실행합니다. 

  MTA는 수신자의 이메일 주소 도메인을 확인하고 발신자와 다를 경우 

  수신자의 IP 주소를 찾도록 도메인 네임 시스템(DNS)에 쿼리합니다.

  이는 우체국에서 우편물 수신자의 우편 번호를 조회하는 것과 비슷합니다. 

 

(4) 연결 닫힘

- 데이터 전송이 완료되면 클라이언트가 서버에 알림을 보내며 서버가 연결을 닫습니다.

  이 때, 클라이언트가 SMTP 연결을 새로 열지 않는 한 서버는 클라이언트로부터

  이메일 데이터를 추가로 받지 않습니다. 

 

- 일반적으로 이 첫 번째 이메일 서버는 이메일의 실제 최종 목적지가 아닙니다.

  클라이언트로부터 이메일을 수신한 서버는 다른 메일 서버와 이러한 SMTP 연결 프로세스를 반복합니다.

  최종적으로 이메일이 수신자의 이메일 공급자가 제어하는 메일 서버 내 수신자의 받은메일함에 도착할 때까지,  

  두 번째 서버도 같은 작업을 수행합니다. 

 

- 우편이 발신자에게서 쉰자에게로 이동하는 과정과 이 프로세스를 비교해봅시다.

  우편 집배원은 발신자에게서 수신자에게로 직접 편지를 전달하지 않습니다.

  우편 집배원은 그 대신 편지를 우체국으로 가져갑니다.

  우체국은 편지를 다른 도시의 다른 우체국으로 보내고, 또 다른 우체국으로 가며,

  이는 편지가 수신자에게 도착할때까지 계속됩니다.

  마찬가지로 이메일도 수신자의 받은메일함에 도착할 때까지 SMTP를 통해 서버에서 서버로 이동합니다. 

 


3) SMTP 봉투란?

- SMTP "봉투"는 이메일 클라이언트가 이메일의 출발지와 목적지에 관해 메일 서버에게 보내는 정보의 집합입니다.

  SMTP 봉투는 이메일 헤더 및 본문과 구별되며 이메일 수신자에게는 보이지 않습니다. 


4) SMTP 명령이란?

- SMTP 명령은 미리 정의된 텍스트 기반 지시사항이며, 클라이언트나 서버에서 수행해야 할 작업과 

  이에 수반된 데이터를 처리할 방법을 알려줍니다. 

  서버에서 데이터를 정확하게 받아들이도록 클라이언트가 누를 수 있는 버튼이라고 생각해보세요.

 

(1) HELO/EHLO

- 이 명령을 사용하면 "Hello:라고 말한 다음 클라이언트와 서버 사이에 SMTP 연결이 시작됩니다.

  "HELO"는 이 명령의 기본 버전이고, "EHLO"는 특수 유형 SMTP를 위한 버전입니다.

 

(2) MAIL FROM

- 이는 이메일을 전송하는 서버를 알려줍니다.

  Alice가 친구 Bob에게 이메일을 보내려고 하는 경우 클라이언트가 "MAIL FROM:<alice@example.com>"을 전송할 수 있습니다.  

 

(3) RCPT TO

- 이 명령으로 이메일 수신자가 나열됩니다. 수신자가 여러 명일 경우 클라이언트는 이 명령을 여러 번 전송할 수 있습니다.

  상기 예시에서 Alice의 이메일 클라이언트는 "RCPT TO:<bob@example.com"을 전송하게 됩니다. 

 

(4) DATA

- 이는 다음과 같이 이메일 컨텐츠 앞에 위치합니다. 

 


DATA
날짜: 2022년 4월 4일 월요일
보낸 사람: Alice alice@example.com
제목: 에그 베네딕트 캐서롤
받는 사람: Bob bob@example.com

안녕 Bob, 금요일에 에그 베네딕트 캐서롤 레시피 가져갈게.
-Alice

 

(5) RSET

- 이 명령을 사용하면 연결이 초기화되어 SMTP 연결이 닫히지 않고 미리 전송한 모든 정보가 제거됩니다. 

  RSET은 클라이언트가 잘못된 정보를 전송할 때 사용합니다. 

 

(6) QUIT

- 이 명령으로 연결이 종료됩니다. 

 

 

5) SMTP 서버란?

SMTP 서버는 SMTP 프로토콜을 사용해 이메일을 전송하고 수신할 수 있는 메일 서버입니다.

  이메일 클라이언트는 이메일 전송을 시작할 수 있게 이메일 공급자의 SMTP 서버와 직접 연결합니다.

  SMTP 서버에서 실행되는 각기 다른 소프트웨어 프로그램은 다음과 같습니다. 

 

(1) 메일 제출 에이전트(MSA)

- MSA는 이메일 클라이언트로부터 이메일을 수신합니다.

 

(2) 메일 전송 에이전트(MTA)

- MTA는 전달망의 다음 서버로 이메일을 전송합니다.

  앞에서 설명한 대로 필요할 경우 수신자 도메인의 메일 교환(MX) DNS 레코드를 찾기 위해 DNS 쿼리할 수 있습니다. 

 

(3) 메일 전달 에이전트(MDA)

- MDA는 MTA에서 이메일을 수신해서 수신자의 받은메일함에 보관합니다.