2.3 인터넷 전자메일

smtp, imap, 이메일

2.3 인터넷 전자메일

  • 인터넷 메일 시스템의 상위 요소에는 다음 3가지가 있다.
    1. 사용자 에이전트(user agent)
    • 사용자의 메시지 읽기, 전달, 저장, 구성을 담당
    • ex) 지메일, 마이크로소프트 아웃룩, 스파트몬용 지메일 앱
      1. 메일 서버(mail server)
    • 각 수신자는 메일 서버 안에 메일박스(mailbox)를 갖고 있다.
    • 메일박스는 수신한 메시지를 유지하고 관리한다.
    • 송신자의 사용자 에이전트 → 송신자의 메일 서버 → 송신자의 메일 서버의 메시지 큐 → 수신자의 메일서버 → 수신자의 메일 서버 내 메일박스
    • 수신자의 서버 고장으로 전달할 수 없으면 메시지를 메시지 큐(message queue)에 보관하고 나중에 전달을 재시도한다.
      1. SMTP(Simple Mail Transfer Protocol)
    • 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜
    • TCP의 신뢰적인 데이터 전송 서비스를 이용
    • 송신자의 메일 서버에서 수행하는 클라이언트와 수신자 메일 서버에서 수행되는 서버를 갖고 있음.
    • 메일 서버가 송신할 때 : SMTP의 클라이언트로 동작
    • 메일 서버가 수신할 때 : SMTP의 서버로 동작

2.3.1 SMTP

  • A가 B에게 메일을 보내는 과정
    1. A는 네이버의 전자메일 사용자 에이전트에게 B의 전자메일 주소(B@gmail.com)를 제공하고 메시지를 작성하여 메시지를 보내라고 명령한다.
    2. A의 사용자 에이전트(네이버)는 메시지를 A의 메일 서버에게 보내고 그 메시지는 서버에서 메시지 큐에 들어간다.
    3. A의 메일 서버에서 동작하는 SMTP의 클라이언트 측은 메시지 큐에서 메시지를 확인한다. 이후 B의 메일 서버에서 수행되는 SMTP 서버에게 TCP 연결을 설정한다. 이때 포트는 25.
    4. 초기 SMTP 핸드셰이킹 이후에 SMTP 클라이언트는 A의 메시지를 TCP 연결로 보낸다.
    5. B의 메일 서버 호스트에서 SMTP의 서버 측은 메시지를 수신한다. 이 메시지는 B의 메일 서버의 메일박스에 저장된다.
    6. B은 사용자 에이전트를 이용해 그 메시지를 읽는다.
  • A와 B의 메일 서버가 물리적으로 거리가 멀더라도, 중간 메일 서버는 사용하지 않는다.
  • 따라서 B의 서버가 죽어 있으면 전달하지 못한다. 이 떄, A 서버의 메시지 큐에 두고 지속적으로 재발송한다. 일정시간이 지나면, 폐기하고 A에게 발송이 실패했음을 알린다.
  • 두 서버의 TCP 연결이 설정되면, SMTP의 서버와 클라이언트는 애플리케이션 계층 핸드셰이킹을 수행한다.
  • 핸드셰이킹에서 서로에 대한 정보를 알게 되는 것처럼, 이때 클라이언트는 서버에게 두 사람(송신자와 수신자)의 전자메일 주소를 제공한다.

2.3.2 메일 메시지 포맷

  • 우편을 보낼때, 편지 봉투에는 여러 정보가 담기게 된다(발신자, 수신자 등)
  • 전자 메일에서는 메시지 몸체 앞에 있는 헤더에 담긴다.

2.3.3 메일 접속 프로토콜

  • 메일 서버가 개인의 로컬호스트에 있다면, 항상 메일을 받기 위해 서버가 켜져있어야 한다.
  • 따라서, 일반 사용자는 로컬 호스트에서 사용자 에이전트를 수행하고 늘 켜져 있는 공유 메일 서버에 저장된 메일박스에 접근한다.
  • 즉, 메일 서버는 보통 사용자들과 공유한다.
  • 송신자의 사용자 에이전트는 메일 서버를 통해 수신자의 메일 서버로 메시지를 전송한다.
  • 왜 송신자의 사용자 에이전트가 직접 수신자의 메일 서버로 메시지를 전송하지 않을까?
    • 송신자의 사용자 에이전트는 수신자의 메일 서버에 도달할 수 없기 때문
    • 이유는 보안 문제, SMTP의 규약, 스팸 방지, 신뢰성 보장 등 다양하다.
  • 수신자의 사용자 에이전트는 받은 메시지를 보기 위해 SMTP를 사용할 수 없다.
    • SMTP는 push지만 메시지는 pull 해야 하기 때문
  • 메시지를 받는 방법
    • HTTP를 통해 요청
    • 인터넷 메일 접근 프로토콜(Internet Mail Access Protocol, IMAP) 사용
    • 이 둘 모두 메일 서버에 의해 유지되는 폴더를 관리하게 된다.