[네트워크] 인터넷 전자메일

참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross 지음

인터넷 메일 시스템의 구조

  • 인터넷 메일 시스템은 크게 세 가지 구성요소로 이루어져 있다.
  • 사용자 에이전트 : 사용자 에이전트는 사용자들이 사용하는 메일 어플리케이션을 말한다. 지메일, 야후메일 처럼 사용자 에이전트를 통해서 사용자들은 메일을 작성하고, 읽고, 보낼 수 있다.
  • 메일 서버 : 메일 서버는 각 사용자가 가지게 되는 메일을 실제로 주고받는 서버를 의미한다.

    • 메일 서버 안에는 메일박스(mailbox) 가 존재해서 사용자에게 전달된 메일들이 저장되고 관리할 수 있게한다.
    • 메일 서버에는 메세지 큐(message queue) 또한 존재한다. 한 사용자의 메일 서버가 다른 사용자의 메일 서버로 메세지를 보내는데 실패한다면, 해당 메세지는 메세지 큐에 저장되어 이후에 다시 전송을 시도하게 된다.
  • SMTP(Simple Mail Transport Protocol) : 인터넷 메일 전송을 위해 사용되는 어플리케이션 계층 프로토콜이다.

SMTP(Simple Mail Transport Protocol)

  • SMTP는 송신자의 메일서버로부터 수신자의 메일서버까지 메시지를 전송하는 역할을 한다.
  • SMTP는 다음과 같은 과정으로 메일을 송수신한다.

    1. 사용자 에이전트에서 작성된 메세지가 송신자의 메일서버로 보내지고, 메세지 큐에 들어간다.
    2. 송신자의 메일 서버에 있는 SMTP 클라리언트가 메세지 큐에 있는 메일을 확인하고 수신자의 메일 서버와 TCP 연결을 수행한다.
    3. 핸드셰이킹 이후에 송신자의 메세지가 수신자의 메일 서버로 전달된다.
    4. 수신자의 메일 서버는 수신한 메세지를 메일 박스에 저장한다.
    5. 수신자는 수신자 에이전트에서 언제든지 메일 박스 안에 있는 메세지를 확인 할 수 있게 된다.
  • SMTP의 가장 큰 단점은 7비트 ASCII 로 메일의 내용 표현해야한다는 것이다. 요즘은 사용자 에이전트에서 파일을 메일에 첨부하는 것을 허용하기 때문에, 이런 이진파일들을 ASCII로 바꿔서 전송하는 기술이 고안되었다.
  • SMTP는 25번 포트 로 TCP 연결을 설정한다. 이때 TCP는 지속연결을 사용하게 된다. 따라서 송신 메일 서버가 같은 수신 메일 서버로 여러 개의 메일을 보내게 되면 한 번의 연결 설정으로 모든 메일을 보낼 수 있다.
  • SMTP의 핸드셰이킹 과정에서 SMTP 클라이언트는 송신자의 메일 주소와 수신의 메일 주소를 전달한다.
  • HTTP 와 SMTP는 지속 연결을 사용한다는 점에서 비슷하지만, SMTP 는 정보를 송신자에게 수신자로 보낸다는 점에서 푸쉬(Push) 프로토콜 이라 할 수 있고, HTTP는 정보가 수신자 측에서 송신자에게 다시 응답으로 보내줘야 하는 구조이기 때문에 풀(pull) 프로토콜 이라고 할 수 있다.

메일 접속 프로토콜

  • 사용자 에이전트는 사용자의 로컬 PC에 존재하지만 사용자의 메일 서버는 그럴 수 없다. 일반적으로 메일 서버는 ISP에서 관리한다.
  • 그렇다면 어떤 메세지가 수신자에 메일 서버에 있을 때, 그것을 사용자 에이전트로 가져오는 방법이 필요하다. SMTP를 사용하면 될 것 같지만, SMTP는 정보를 보내는 푸쉬 프로토콜이기 때문에 메일 서버에서 메세지를 가져오는 용도로 사용할 수는 없다.
  • 따라서 사용자 에이전트에서 메일 서버에 있는 메세지를 가져오기 위한 메일 접속 프로토콜(Mail Access Protocol) 이 필요로 된다

POP3

  • POP3는 사용자 에이전트가 메일 서버의 포트 110번으로 TCP 연결을 설정할 떄 함꼐 시작된다.
  • POP3는 세 단계에 걸쳐서 작업을 수행한다.

    1. 인증 : 사용자 에이전트가 사용자를 인증하기 위해서 사용자의 이름와 비밀번호를 보낸다.
    2. 트랜잭션 : 사용자 에이전트가 메세지를 가져오거나 삭제표시를 메일에 지정할 수 있다.
    3. 갱신 : 사용자 에이전트가 POP3 연결을 종료한 뒤에 메일 서버는 트랜잭션 단계에서 표시되었던 삭제표시된 메세지를 삭제한다.

IMAP(Internet Mail Access Protocol)

  • IMAP 는 POP3 보다 조금 더 복잡한 일들을 처리할 수 있도록 한다.
  • 사용자는 원격 폴더를 생성하고 메일 서버에 있는 메세지들을 각 폴더들에 연결시킬 수 있는 기능을 제공한다.
  • 이를 위해서 IMAP는 세션을 통해 사용자 정보의 상태를 유지시킨다.
  • IMAP 는 사용자 에이전트가 메일의 특정한 요소만 골라서 정보를 얻을 수 있게 한다. 메세지의 일부만 얻거나, 파일을 제외하고 읽는 기능들을 제공한다.

웹 기반 전자메일

  • 웹기반 전자메일은 메일 서버에서 메세지에 접근 할 때, POP3 나 IMAP를 사용하는 것이 아니라 HTTP 프로토콜을 사용해서 메세지에 접근한다.
  • 메일의 송신은 여전히 SMTP를 사용하고 사용자 에이전트가 메일 서버에 접근할 때만 HTTP를 사용한다.

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.