티스토리 뷰

CS/Network

이메일과 SMTP

bool-flower 2022. 6. 4. 03:08

인터넷 이메일 시스템 구조


시스템 구성 요소

  • User Agent - 사용자 장치에서 메일 작성, 읽기 관리 기능 수행
  • Mail Server - 다수 사용자들의 메일박스 관리, 메일 송, 수신 제어
  • SMTP - Mail Server 간 통신을 지원하는 메일 전송 프로토콜

User AgentMail Server 정보는 메일주소에 나타난다. 메일 주소에는 Local PartDomain Name 영역이 나뉜다. 아래 예시를 보면 쉽게 이해할 수 있을 것이다.

  • Local Part - 사용자 메일 박스의 이름
  • Domain Name - 목적지 메일 서버의 도메인 이름

Local Part Domain Name
ex) inhan1009 @ naver.com

이메일 전송 과정

  1. 송신자 UA에서 메일 작성 후 메일 서버로 전달
  2. 메일 서버의 출력 메시지 큐에 저장
  3. 수신자 메일 서버로 전송
  4. 전송 불가시 재전송 시도(30분 단위), 정해진 기간 동안도 안될 시 송신자에게 통보
  5. 수신자 메일 서버의 수신자 메일 박스에 저장
  6. 수신자 UA에서 메일서버의 메일박스의 메일 읽기 및 관리

메일을 작성해서 내 메일 서버에 전달하면, 메일 서버 안의 outgoing message queue에 저장한다. 이후 SMTP를 통해 다른 메일 서버로 전송하고, 수신자의 메일박스에 메일을 넣어준다. 이후 수신자는 자신의 메일서버에 접속해서 메일을 읽어낸다. 

SMTP(Simple Mail Transfer Protocol)


앞서 Mail Server 간에 SMTP를 사용한다고 했지만, UA와 Mail Server 간에도 SMTP를 사용한다. 또한 웹 메일을 위해 HTTP를 사용할 수도 있다고 한다.

클라이언트-서버 프로토콜

  • 클라이언트 - 송신 메일 서버/UA
  • 서버 - 수신 서버 메일/송신 메일 서버

송신자 메일 서버와 수신자 메일 서버가 통신은 서버 간의 통신이지만 송신자와 수신자 간의 클라이언트-서버 통신이라고 이해하면 좋을 것 같다.

TCP 사용

  • 신뢰 전송
  • 서버 포트번호 25

ASCII 텍스트 프로토콜

  • 명령어 - ASCII 그래픽 문자 + 제어 문자
  • 메시지 - ASCII 그래픽 문자 + 제어 문자 

여기서 메시지가 메일이다. 또한 명령어와 메시지 모드 ASCII 코드로 되어 있기 때문에, ASCII로 표현된 영문이 아니면 정상적으로 보낼 수가 없다. 따라서, ASCII 문자가 아닌 메일을 보낼 때는 변환 과정이 필요하다.

프로토콜 동작 절차 : 연결 설정과 해제

\

위 그림을 참고하자. 서버가 220 응답을 보내고 난 뒤, 클라이언트에서 EHLO 명령을 전송할 때, 서버에 자신의 Domain Name을 알려준다.

프로토콜 동작 절차 : 메일 전송

처음부터 DATA 명령 이전까지 Envelope 영역, DATA 명령 이후 <빈 줄> 전까지 Header 영역, 그 뒤가 Body 영역이 된다.
아스키코드의 <CR>와 <LF>라는 명령어를 함께 씀으로써 빈 줄을 표현한다. 빈 줄을 기준으로 Header와 Body가 구분된다고 이해하면 된다. 
Body에는 <송신 메시지>, 즉 메일의 내용이 포함된다. 마지막 줄은 반드시 "." (온점) 이 있어야 한다.

ASCII

  • 제어 문자 (코드값이 정해진 문자) - 0 ~ 32, 127
  • 그래픽 문자 (폰트 이미지가 있는 문자) - 33 ~ 126

SMTP로 전송을 하게 되면 메일의 내용에도 CR, LF와 같은 ASCII 문자가 들어간다. 또한, 메일 내용 중에 0~32, 127 사이의 코드가 들어오면, 수신 서버가 메시지로 해석하지 않고, 제어 문자로 해석한다. 따라서 메일로는 ASCII 코드만이 사용 가능하다.

MIME(Multipurpose Internet Mail Extension) : base-64

ASCII 문자가 아닌 데이터는 어떻게 보내야 할까. 이 때는 Base64 코드로 인코딩했다가 다시 ASCII로 변환해서 보낸다.

두 번째 이미지처럼 코드를 변환하여 주고받는다.

HTTP와 SMTP

HTTP

  • Pull Protocol - 가져오기
  • Multimedia 객체 전송 - data가 어떤 내용이라도 상관없음, 길이가 표시됨
  • 1 응답 메시지 : 1 웹 객체

SMTP

  • Push Protocol - 보내기
  • Text-only 메시지 전송 - ASCII 문자로만 구성됨
  • 1 전송 메시지 : 멀티-파트 메시지 - 여러 개의 객체

MAP(Mail Access Protocol) 메일 접속 프로토콜 


UA와 메일 서버 분리

Mail Server는 Always-on, User agent는 Always-on 이 아니다. 따라서 수신자가 메일 서버 접속하여 에서 pull 받듯이 읽어내는 것이 Mail Access Protocol이다.

POP3 (Post Office Protocol V3)

  • 패스워드를 통한 사용자 인증
  • 트랜잭션 (List, Retr, Dele, Quit)

IMAP4 (Internet Mail Access Protocol V4)

  • 모든 메시지를 메일 서버에 유지
  • 메일 서버에서 폴더로 메시지 관리 가능

HTTP

  • 메일 서버를 웹 서버로 구현
  • 웹 브라우저에서 HTTP로 메일 서버 접속 - 메일 송신과 수신
  • 요즘엔 자주 사용하는 방식

 

참조


https://tk-one.github.io/2020/01/03/smtp/

https://post.naver.com/viewer/postView.nhn?volumeNo=26957131 

https://blog.naver.com/PostView.naver?blogId=eqelizer&logNo=20134840619&redirect=Dlog&widgetTypeCall=true&directAccess=false 

https://youtu.be/maNnhEw4bzk

'CS > Network' 카테고리의 다른 글

HTTP 상태코드  (0) 2022.07.15
HTTP 원리와 지속 비지속 연결  (6) 2022.07.07
인터넷과 프로토콜  (0) 2022.06.16
SOP와 CORS  (0) 2022.06.13
HTTP 메시지  (0) 2022.04.03
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday