티스토리 뷰

2.3 인터넷 전자메일

아래 그림은 인터넷 메일 시스템의 상위 레벨 개념을 보여 준다.

사용자 에이전트, 메일 서버, SMTP(Simple Mail Transfer Protocol)라는 3개 주요 요소가 있음을 알 수 있다.

이제 이들 각 요소들은 송신자 앨리스가 수신자 밥에게 전자메일을 보내는 상황에서 기술한다.

 

사용자 에이전트

  • 사용자가 메시지를 읽고, 응답하고, 전달하고, 저장하고, 구성하게 해준다.
  • MS 아웃룩과 애플 메일은 전자메일을 위한 사용자 에이전트의 예이다.

 

  1. 앨리스가 메시지 작성을 끝내면
  2. 사용자 에이전트는 메시지를 메일 서버로 보내고
  3. 거기서 메시지는 메일 서버의 출력 메시지 큐에 들어간다.
  4. 밥이 메시지를 읽고 싶을 때, 그의 사용자 에이전트는 메일 서버에 있는 메일박스에서 메시지를 가져온다.

인터넷 전자메일 시스템의 구조

 

메일 서버

  • 전자메일 기반구조의 중심이다.

 

메일 박스

  • 밥 같은 각 수신자는 메일 서버 안에 메일박스(mailbox)를 갖고 있다.
  • 밥의 메일박스는 그에게 온 메시지를 유지하고 관리한다.
일반 메시지는 송신자의 사용자 에이전트에서 전달이 시작되고, 송신자의 메일 서버를 거친 후에 수신자의 메일 서버로 전달된다. 거기서 수신자의 메일박스에 저장된다. 밥이 전자메일 박스에 있는 메시지를 보려면, 메일 서버는 사용자 계정과 비밀번호를 이용하여 밥을 인증한다.

 

메시지 큐(message queue)

  • 앨리스 서버가 메일을 밥을 서버로 전달할 수 없다면, 앨리스 서버는 그 메시지를 메시지 큐(message queue)에 보관하고 나중에 그 메시지를 전달하기 위해 다시 시도한다.
  • 재시도는 약 30분마다 일어난다.
  • 여러 날 시도해도 성공하지 못하면, 서버는 그 메시지를 제거하고 송신자(앨리스)에게 전자메일로 이를 통보한다.

 


2.3.1 SMTP

전자메일에서 가장 중요한 프로토콜인 SMTP에 대해 알아보자.

  • 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜이다.
  • SMTP는 메일을 송신자의 메일 서버로부터 수신자의 메일 서버로 전송하는 데 TCP의 신뢰적인 데이터 전송 서비스를 이용한다.
  • 대부분의 애플리케이션 계층 프로토콜처럼, SMTP는 송신자 메일 서버에서 수행하는 클라이언트와 수신자 메일 서버에서 수행되는 서버를 갖고 있다.
  • SMTP의 클라이언트와 서버가 모든 메일 서버에서 수행된다.
    • 메일 서버가 상대 메일 서버로 메일을 보낼 때는 SMTP의 클라이언트로 동작하는 반면, 메일 서버가 상대 메일 서버로부터 메일을 받을 때는 SMTP 서버로 동작한다.

 

SMTP의 기본 동작

  1. 앨리스는 전자메일 사용자 에이전트를 수행하고 밥의 전자메일 주소(예: bob@someschool.edu)를 제공하고, 메시지를 작성하고 사용자 에이전트에게 메시지를 보내라고 명령한다.
  2. 앨리스의 사용자 에이전트는 메시지를 그녀의 메일 서버에 보내고 그곳에서 메시지는 메시지 큐에 높인다.
  3. 앨리스의 메일 서버에서 동작하는 SMTP의 클라이언트 측은 메시지 큐에 있는 메시지를 본다. 밥의 메일 서버에서 수행되고 있는 SMTP 서버에게 TCP 연결을 설정한다.
  4. 초기 SMTP 핸드셰이킹 이후에 SMTP 클라이언트는 앨리스의 메시지를 TCP 연결로 보낸다.
  5. 밥의 메일 서버 호스트에서 SMTP의 서버 측은 메시지를 수신한다. 밥의 메일 서버는 그 메시지를 밥의 메일박스에 놓는다.
  6. 밥은 편한 시간에 그 메시지를 읽기 위해 사용자 에이전트를 시동한다.

앨리스가 밥에게 메시지를 전달

 

 

SMTP 클라이언트와 SMTP 서버(S) 사이의 메시지 전달 과정에서

클라이언트는 5개의 명령, HELO, MAIL FROM, RCPT TO, DATA, QUIT을 내릴 수 있다.

추가로 클라이언트는 메시지의 끝은 하나의 점(.)으로 된 라인을 송신하여 알린다.

 

SMTP는 지속 연결을 사용한다.

 


2.3.2 HTTP와의 비교

    SMTP HTTP
  한 메일 서버로부터 다른 메일 서버로 파일(전자메일 메시지)을 전송한다. 웹 서버로부터 웹 사용자 에이전트(브라우저)로 파일(혹은 객체)을 전송한다.
공통점

한 호스트에서 다른 호스트로 파일을 전송하는데 이용된다.
지속 연결을 사용한다.
차이점 프로토콜 푸시(push) 프로토콜
송신 메일 서버가 파일을 수신 메일 서버로 보낸다.
풀(pull) 프로토콜
누군가 서버에 정보를 올리고 사용자가 편의에 의해서 서버로부터 정보를 가져오기 위해 사용한다.
TCP 연결 TCP 연결은 파일을 수신할 컴퓨터가 먼저 초기화한다. TCP 연결은 파일을 보내는 컴퓨터에서 먼저 초기화한다.
각 메시지가
7비트 ASCII 포맷일 것을 요구
이런 제한이 없다. 각 메시지의 몸체를 포함하여 각 메시지가 7비트 ASCII 포맷일 것을 요구한다.
텍스트와 이미지로 구성된 문서를
다루는 방법
자신의 HTTP 응답 메시지에 각 객체를 캡슐화한다. 인터넷 메일은 모든 메시지의 객체를 한 메시지로 만든다.

 


2.3.3 메일 메시지 포맷

HTTP에서처럼 각 헤더 라인은 키워드, 콜론, 값의 순서로 구성되고 읽을 수 있는 텍스트를 포함한다.

키워드 중 반드시 필요한 것도 있고 선택사항도 있다.

  • 모든 헤더는 From: 헤더라인과 To: 헤더 라인을 반드시 가져야 한다.

 


3.2.4 메일 접속 프로토콜

그렇다면 로컬 PC에서 사용자 에이전트를 수행하는 밥과 같은 수신자는 자신의 ISP 내부의 메일 서버에 있는 자신의 메시지를 어떻게 얻을 수 있는가?

 

밥의 사용자 에이전트는 메시지를 얻기 위해 SMTP를 사용할 수 없다.

  • SMTP가 푸시(push) 프로토콜인 반면에 메시지를 얻는 것은 풀(pull) 동작이기 때문이다.

이 문제 해결을 위해 몇가지 유명한 메일 엑세스 프로토콜을 사용할 수 있다.

  • POP3, IMAP, HTTP

 

SMTP

  • 송신자의 사용자 에이전트로부터 송신자의 메일 서버로 메일을 전송하는 데 사용된다.
  • 송신자의 메일 서버로부터 수신자의 메일 서버로 메일을 전송하는 데 사용된다.

POP3와 같은 메일 접속 프로토콜

  • 수신자의 메일 서버로부터 수신자의 사용자 에이전트에게 메일을 전송하는 데 사용된다.

 

전자메일 프로토콜과 통신 개체

 

1. POP3

매우 간단한 메일 접속 프로토콜으로 아주 짧고 읽기 쉽다.
프로토콜이 아주 간단하므로 매우 한정된 기능을 가진다.

 

사용자 에이전트(클라이언트)가 메일 서버의 포트 110번으로 TCP 연결을 열 때 시작한다.

  • TCP 연결이 설정되면, POP3은 3단계 과정으로 진행한다. 즉 인증, 트랜잭션, 갱신이다.
    • 인증
      • 사용자 에이전트는 메일을 다운로드하는 사용자를 인즈하기 위해 사용자 이름과 비밀번호를 보낸다.
    • 트랜잭션
      • 사용자 에이전트는 메시지를 가져오고, 삭제를 위해 메시지에 표시하거나 그 삭제 표시를 지울 수도 있으며, 메일 통계를 얻을 수도 있다.
    • 갱신
      • 클라이언트가 POP3 세션을 끝내는 quit 명령이 내려진 후에 일어난다. 이때, 메일 서버는 삭제 표시된 메시지를 삭제한다.
  • POP3 프로토콜은 사용자에게 원격 폴더를 생성하거나 폴더에 메시지를 할당하는 수단을 제공하지 않는다.

 

2. IMAP

사용자가 폴더를 생성하고 하나의 폴더에서 다른 폴더로 메시지를 옮기는 명령을 제공하는 메일 접속 프로토콜이다.

 

특성

  • 사용자 에이전트가 메시지의 구성요소를 얻을 수 있게 허용하는 명령을 갖는다.
    • 낮은 대역폭 연결을 통해서 메일박스에 있는 모든 메시지를 다운로드하고 싶지 않은 경우 유용하다.

 

3. 웹 기반 전자메일

최근에는 더 많은 사람이 웹 브라우저를 통해 전자메일을 받는다. 이때 HTTP 프로토콜을 사용한다.

 

  • 사용자 에이전트는 일반 웹 브라우저
  • 사용자는 HTTP를 통해 메일 서버에 있는 원격 메일박스와 통신하게 된다.
    • 밥과 같은 수신자가 자신의 메일박스에 있는 메시지를 보고자 할 때 밥의 메일 서버로부터 POP3나 IMAP을 이용하는 대신에 HTTP 프로토콜을 이용하여 밥의 브라우저로 전달된다.
    • 앨리스와 같은 송신자가 전자메일 메시지를 보내고자 하는 경우에도 SMTP 대신에 HTTP을 이용하여 브라우저에서 메일 서버로 전달된다.

그러나 메일 서버는 여전히 SMTP를 이용하여 메시지를 다른 메일 서버로 전달하거나 다른 메일 서버로부터 수신한다.