[지식창고]/네트워크

[컴퓨터 네트워크] 2.4 electronic mail (SMTP, POP3, IMAP)

개발새발주발 2023. 3. 28. 21:46
728x90

메일을 보낼 때 쓰이는 3가지 프로토콜이 있다. 이들은 바로 SMTP, POP3, IMAP !

 

 전자 메일은 발신자의 메일 클라이언트를 통해 SMTP프로토콜을 이용하여 발신자의 메일 서버에서 수신자의 메일 서버로 전송되고, 수신자의 메일 서버에서 수신자의 메일 박스로 도착하는 과정을 거친다. 

이 때, SMTP는 전자 메일을 보내는 데 사용되는 프로토콜이며, POP3IMAP는 전자 메일을 받아오는 데 사용되는 프로토콜이다.

POP3는 메일을 클라이언트에 저장하며 서버에서 삭제하는 반면, IMAP는 서버에 메일을 보관하여 여러 기기에서 메일을 확인할 수 있다! 

 

이렇게 간단히 알아보고 전자 메일에 대해 더 자세히 알아보자 ~ ! 

 


1. Electronic mail (전자 메일) 

전자메일에는 3가지 주요 컴포넌트(구성요소)가 있다

사실 똑같은 그림이다 

① user agents 

: 전자 메일 클라이언트로, 사용자가 전자 메일을 작성하고 읽는 데 사용된다. 전자 메일 클라이언트는 데스크톱 애플리케이션 또는 웹 기반 인터페이스를 통해 제공된다. 사용자 에이전트는 전자 메일을 작성할 때 제목, 수신자 및 본문 등과 같은 필드를 작성할 수 있으며 수신된 메일함, 발신된 메일함, 스팸 메일함 등과 같은 여러 메일함을 관리하는 데 사용된다. 

  • a.k.a. mail reader 
  • composing,editing, reading mail message
  • Outlook, Thunderbird, iPhone mail client 

② mail servers

: 메일 서버는 전자 메일을 중개하는 컴퓨터 시스템이다. 메일 서버는 인터넷을 통해 전자 메일을 다른 서버 또는 클라이언트에게 전달한다. 메일 서버는 SMTP,POP3,IMAP등과 같은 프로토콜을 사용하여 전자 메일을 보내고 받는다 ! 메일 서버는 일반적으로 메일의 내용과 메타 데이터를 저장하고 관리한다. 

  • mailbox : 사용자가 받은 메일을 저장하는 수신함
  • message queue : 발신 메일 메세지의 대기열
  • SMTP 프로토콜 : 메일 서버 간 통신 시 사용 
    ** client : 메일 메세지를 보냄 
    ** server : 메일 메세지를 받음 

③ simple mail transfer protocol : SMTP 

  • TCP 프로토콜을 사용하여 클라이언트에서 서버로 이메일 메세지를 안정적으로 전송한다 ! 이 때 25번 포트를 사용한다.
  • 직접 전송 : 보내는 서버에서 받는 서버로 이메일 메세지를 직접 전송한다.
  • 3가지 전송 단계 
    1. handshaking(greeting) : 서버간 연결을 맺고 클라이언트와 서버간 정보를 교환
    2. transfer of messages : 이메일 메세지를 서버간 전송
    3. closure : 서버간 연결을 종료 
  • 명령/응답 상호작용 방식을 사용 (HTTP,FTP와 마찬가지로)
    - commands(명령) : ASCII text
    - response(응답) : 상태 코드와 구체적인 응답 메세지
  • SMTP는 7-bit ASCII 메세지로 구성되어야함 (이전에 이메일이 ASCII 문자 집합으로만 이루어졌기 떄문) 

2. SMTP

Senario : Alice sends message to Bob 

오늘도 어김없이 등장하는 앨리스와 밥 ~

이쯤되면 앨리스는 학생이고 밥은 교수님이 아닐까 싶다 

앨리스가 밥에게 메일을 보내는 시나리오인데 .. 앨리스와 밥의 네트워크를 1~6번까지 천천히 따라가보자 ! 

 

① Alice는 UserAgent를 사용하여 메세지를 작성한다. 수신자는 바로 그녀의 밥 교수님 bob@someschool.edu 

② Aliced의 UA(UserAgent)는 작성한 메세지를 Alice의 메일 서버로 전송한다; 메세지는 메세지 큐에 저장된다.

③ SMTP 클라이언트는 Bob의 메일 서버와 TCP 연결을 맺는다. 이 때, 클라이언트 측에서는 Bob의 메일 서버의 IP주소나 도메인 이름과 포트 번호(보통 25번)를 알아야한다. 

④ SMTP클라이언트는 Alice의 메세지를 Bob의 메일 서버로 전송한다. 

⑤ Bob의 메일 서버는 받은 메세지를 bob의 메일 박스에 저장한다. 

⑥ Bob은 자신의 UserAgent를 실행하여 메일을 읽을 수 있다. 

 

[ 요약 ]

전자메일을 보내는 과정에서 수신자의 메일 서버와 TCP연결을 맺고, 메세지를 전송하는 SMTP 프로토콜이 사용된다. 메세지는 수신자의 메일 박스에 저장되며 수신자는 자신의 UserAgent를 사용하여 메세지를 읽을 수 있다 ! 

 

 

Sample SMTP interaction 

햄버거 대학의 Bob과 크레페 대학의 elice가 나눈 SMTP interaction이다 . 

 

SMTP : final word (마무리) 

  • SMTP는 지속적인(persistent connections)연결을 사용한다. 
  • SMTP는 메세지(header & body)가 7비트 ASCII로 작성되어야한다. 
  • SMT서버는 CRLF.CRLF 를 이용하여 메세지의 끝을 판단한다. 
  • HTTP와의 비교: 
    • HTTP: pull → 웹서버에서 data 가져옴 
    • SMTP : push → 보내는 server가 client 
    • 두 프로토콜 모두 ASCII 기반의 명령-응답(command/response)상호작용과 상태 코드를 사용한다.
    • HTTP는 객체(obj)마다 각각의 응답(response)메세지를 사용하며, 
      SMTP는 여러 객체를 하나의 다중 파트 (multipart) 메세지로 보낼 수 있다. 

∴ SMTP는 메일 서버 간의 효율적인 이메일 전송을 위해 지속적인 연결을 사용하며, ASCII기반의 명령-응답 상호작용을 통해 메세지를 전한다. HTT와 비교하면, HTTP는 객체별 응답 메세지를 사용하는 반면에, SMTP는 다중 파트 메세지로 여러 객체를 하나의 메세지로 보낼 수있다! 

 


3. Mail message format 

** RFC (Request for Comments) : 인터넷 표준을 정의하는 공식 문서 

- SMTP : 이메일 메세지를 교환하는 프로토콜 

- RFC 822 : 텍스트 메세지 형식의 표준 

- header lines(To:, From:,Subject: 등)을 정의
  *SMTP의 Mail from, rcpt to: 명령과는 다름 

- 이메일 메세지의 본문은 메세지 자체를 말하며 ASCII 문자로만 작성되어야함 

- MIME를 사용하여 이메일에 다양한 형식의 콘텐츠를 추가할 수 있음 ! 

 

** MIME 


4. Mail access protocols 

SMTP : 이메일을 수신자의 서버로 전달하고 전송하는데 사용

 

mail access protocol : retrieval from server

이메일을 서버에서 검색(retrieval)할 때 , 메일을 받아올 때 

POP : Post Office Protocol[RFC 1939] : authorization, download 

→ 이메일을 다운로드하기 위한 프로토콜로 이메일 서버에 저장된 메세지를 클라이언트로 다운로드하여 사용자가 메일을 읽을 수 있도록! 

 

IMAP : Internet Mail Access Protocol[RFC 1730] : POP에 기능 추가

(more features, including manipulation of stored msgs on server)

→ 이메일을 서버에서 읽고, 관리하고, 검색하고, 정렬할 수 있고 이메일 서버와 클라이언트 간에 동기화되어 여러 클라이언트에서 메일을 읽고, 삭제하고, 이동할 수 있다. 

 

HTTP : gmail, Hotmail, Yahoo! Mail, etc

→ 웹 메일 서비스는 HTTP를 사용하여 이메일에 엑세스할 수 있다

 

 

POP3 프로토콜 

example ) 

 

** POP3는 TCP포트 110을 사용

인증 단계 

  • client commands : 사용자 인증 
    • user : declare username
    • pass : password
  • server response
    • + OK
    • - ERR 

트랜잭션 단계 , client : 

  • list : list messate numbers
  • retr: retrieve message by number 
  • dele : delete
  • quit 

 

 

  • POP3는 기본적으로 '다운로드 및 삭제' 모드를 사용하며 example에서 이 모드가 사용되었다
    - Bob은 다른 클라이언트에서 메일을 읽을 수 없음 
  • POP3는 또한 '다운로드 및 보존' 모드도 지원함 
    - 서버에서 이메일을 삭제하지 않고 복사본을 유지함 
  • POP3는 세션 간에 state(상태정보)를 유지하지 않음 → stateless 

 

IMAP 프로토콜 

  : 인터넷 메세지 액세스 프로토콜 

이메일 클라이언트와 이메일 서버 간에 통신하는 데 사용되는 프로토콜 중 하나 

  • 이메일 서버에서 모든 메세지를 보관함 
  • 사용자가 메세지를 폴더별로 정리할 수 있게 해줌 
  • 사용자 상태를 세션 간에 유지함 
    즉, 폴더의 이름과 메세지 ID와 폴더 이름 간의 매핑 정보를 유지함 

이러한 기능들은 이메일 클라이언트가 이메일 서버와 효율적으로 상호작용하여 사용자가 이메일을 보다 쉽게 관리할 수 있도록 한다. 예를 들어 IMAP를 사용하면 사용자가 이메일 클라이언트에서 이메일을 읽은 후 서버에 그대로 남아있게 되므로 다른 장치에서도 이 이메일을 볼 수 있다 ! 

또한 이메일을 폴더별로 정리하면 중요한 이메일이나 작업에 필요한 이메일 등을 더 쉽게 찾을 수 있다 ~ ! 

 


우리가 사용하는 이메일이 이렇게 복잡한 거였다니 ..~ 

하지만 이메일 웹 앱 덕분에 편리한 사용이 가능한 요즘세상이다 

 

다음 포스팅은 DNS에 관한 내용이다 !

그럼 다들 즐거운 네트워크 공부 되시길 ..~