본문 바로가기

Computer Network/Ch2) Application layer

Ch2-3) Email, SMTP, IMAP

 

E-mail system에는 3개의 주요한 Component가 존재한다.

 

 

 

  • User agents
    • a.k.a “mail reader”
    • User agents는 사용자가 메시지를 읽고, 응답하고, 전달하고, 저장하고, 구성하게 해준다.
    • 대표적으로 애플 메일, 마이크로소프트 Outlook이 있다.
  • Mail servers
    • E-mail infrastructure의 중심이다.
    • 각 수신자는 메일 서버에 Mailbox를 보유하고 있는다.
      • 이 mailbox는 수신자의 메시지를 유지 및 관리한다.
      • 일반 메시지는 송신자의 user agent에서 전달이 시작되고, 송신자의 메일 서버를 거친 후에 수신자의 메일 서버로 전송된다.
      • emailbox에 있는 메시지를 보려면 이용자임을 인증해야 한다.
  • 송신자는 메일 서버의 고장에도 대비를 해야한다. 만약 메일을 수신자의 메일 서버로 전달할 수 없다면, 그 메시지를 “message queue”에 넣어 보관한 후, 30분마다 송신 재시도를 한다. (계속 실패시 송신자에게 통보)
  • SMTP (Simple Mail Transfer Protocol)
    • email을 위한 Application layer의 protocol이다.
    • SMTP는, 송신자의 메일서버에서 수신자의 메일서버로 메일을 보낼때 TCP를 사용한다. (Data integrity로 안전함)
    • 대부분의 다른 application layer protocol처럼 client와 server을 갖고 있다.
      • 클라이언트와 서버가 모두 같은 메일 서버에서 동작하고, 송신하면 client 수신하면 server이다.
    •  

SMTP

  • 앞서 말했듯, Reliable transfer을 위해 TCP를 이용하고, 포트번호는 25이다.
  • 또한, sending server와 receiving server간의 direct transfer으로 데이터를 전송한다.
  • 이러한 direct transfer 과정은 크게 3가지로 나뉘게 된다.
    • Handshaking
    • transfer of messages
    • closure

이 과정을 한 번 자세히 살펴보자.

 

 

  1. Alice는 Alice의 UA를 통해 bob@school.edu에 메시지를 보내려고 한다
  2. Alice의 UA는 그녀의 mail server에 메시지를 전송하고, 이 메시지는 메시지 큐에 놓이게 된다.
  3. Client side의 SMTP가 bob’s mail server와의 TCP 연결을 시도한다.
  4. 초기 SMTP 핸드셰이킹 이후에 SMTP가 TCP를 통해 Bob의 mail server로 메시지를 전송한다.
  5. Bob의 mail server은 mailbox에 메시지를 놓고
  6. Bob은 mailbox에 있는 메시지를 읽기 위해 자신의 UA를 사용한다.

이 과정에서 알아두어야 할 점은, 아무리 송수신자 사이의 거리가 멀더라도 “직접적인” 송수신을 한다는 것이다.

만약 중간에 메시지를 전송하는 것에 실패해도, 중간 서버가 아닌 “송신자”의 메일 서버에 메시지가 남아있다.

이 과정에 대한 Detail을 살펴보자.

  1. 우선, Client SMTP는 Server SMTP의 25번 포트로 TCP 연결을 시도한다. (서버가 죽어있으면 나중에)
  2. 연결이 설정되면, Application layer handshaking을 수행한다.
    • 이때 SMTP Client는 송신자의 email 주소와 수신자의 email 주소를 입력한다.
      • RCPT TO: <receiver@example.com
      • MAIL FROM: <sender@example.com>
  3. 이후 Client는 메시지를 보낸다. (TCP 연결을 통해 신뢰적으로 전송)
  4. 보낼 다른 메시지가 있다면 같은 TCP 연결 하에서 반복하고, 그렇지 않다면 TCP를 닫는다.
    • Persistent connection을 수행한다.
  • 또한, SMTP는 HTTP와 유사하게, command/response interaction을 수행한다.
    • Command
      • 클라이언트가 서버로 특정 작업을 요구하는 것이다.
      • 아스키 코드로 이루어져 있고, HELO / MAIL FROM/. RCPT TO / DATA 등의 명령어가 있다.
    • Response
      • 서버는 클라이언트의 명령에 대해 status code와 msg로 응답한다
        • 250 Ok
        • 550 No Such User
  • 뿐만 아니라, 이메일을 전송할 때 이메일 message body는 반드시 7-bit ASCII로 구성되어야 한다.
    • 그럼 어떻게 이메일에서 사진, 영상 등을 전송하냐
    → 바로 Multipurpose Internet Mail Extension (MIME) 인코딩 방식 활용해 파이너리 파일을 아스키 형태로 인코딩한다.

그렇다면, 간단한 SMTP interaction 예시에 대해서 살펴보자.

 

  • 클라이언트는 5개의 HELO, MAIL FROM, RCPT TO, DATA, QUIT 명령을 내린다.
  • 클라이언트는 하나의 점(.)으로 된 라인을 송신하며, 그것은 서버에서 메시지의 끝을 나타낸다.
  • 서버는 각 명령에 응답하며, 각 응답에는 응답 코드와 영문 설명이 있다.

정리하자면,

  • HTTP는 Pull 방식 / SMTP는 Push 방식으로 동작한다.
  • HTTP와 SMTP 모두 ASCII 형태의 command/ response interaction을 사용한다.
  • HTTP는 각 object를 encapsulate해 object만의 response message에 담는 반면,
  • SMTP는 여러 object를 하나의 multipart message에 담을 수 있다.
  • SMTP는 persistent connection을 사용하고
  • 메시지는 7-bit ASCII이다.
  • 또한, SMTP 서버는 문장의 종료를 알리기 위해 CRLF 형식을 사용한다.

Email Message format

Email을 보낼 때에는, 주변 정보가 포함된 헤더가 메시지 body 앞쪽에 위치하게 된다.

  • 모든 헤더는 FROM: 헤더라인과 TO: 헤더라인을 반드시 가져야 한다. (나머지는 선택사항)
    • 여기서 주의할 점은, SMTP command의 “MAIL FROM:”과 “RCPT TO”와는 전혀 다른거다.
    • FROM: / TO: 얘네는 클라이언트가 보라고 만들어놓은거다. 

 

  • blank line은 헤더와 body를 구분하기 위해서 존재
  • Body에는 7-bit ASCII만 가능

⇒ Email message Header에는 MAIL FROM: RCPT TO:가 포함되어있다? ( 맞춰보세요 ~)

 

 

Mail access protocols

  • 메일 서버가 로컬 호스트에 존재한다면, 클라이언트는 언제 도착할지도 모르는 메일을 받기 위해서 컴퓨터 전원을 항상 켜놔야 할 것이다.

→ 말이 되니~~~?

  • 그렇기 때문에, 일반 사용자는 로컬 호스트에서 “User Agent”를 사용하고, 늘 켜져 있는 “공유 메일 서버”에 접근하여 저장된 메일박스에 접근한다.
  • 하지만, 여기서 문제는 SMTP 프로토콜은 이용할 수 없다는 점이다.
    • SMTP 프로토콜은 Push 방식으로, 메일박스에서 메시지를 fetch하려면 pull protocol을 사용해야한다.

→ 이럴때 쓰는 프로토콜이 바로 Mail access protocol이다.

위의 그림처럼, 클라이언트의 UA → 송신자 email server / 송신자 email server → 수신자 email server 으로 데이터를 전송할 때는 ,Push 방식의 SMTP를 사용할 수 있다.

그럼, Email access protocol에는 어떤 종류가 있을까?

  • IMAP (Internet Mail Access Protocol)
    • RFC 3501에서 정의된 프로토콜로, 서버에 저장된 이메일을 조회,삭제, 정리할 수 있다.
    • 동기화가 가능해 여러 기기에서 동시에 이메일을 조회할 수 있다.
  • HTTP
    • 전통적인(직접적인) email access protocol은 아니지만, web-based interface를 적용해 이메일을 읽는다.
    • 하지만 내부적으로는 여전히 SMTP , IMAP, POP3와 같은 프로토콜이 사용됨.
      • 사용자 편의 제공을 위해서 웹 브라우저에 인터페이스를 만들어 놓은 것임.
    • ex) Gmail, Yahoo, Hotmail

'Computer Network > Ch2) Application layer' 카테고리의 다른 글

Ch2-5) P2P application  (0) 2024.10.27
Ch2-4) Domane Name System : DNS  (0) 2024.10.27
Ch2-2-2) Cookie and web cache  (0) 2024.10.27
Ch2-2-1) Web and HTTP  (0) 2024.10.27
Ch2-1) Principles of internet network  (1) 2024.10.27