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
이 과정을 한 번 자세히 살펴보자.
- Alice는 Alice의 UA를 통해 bob@school.edu에 메시지를 보내려고 한다
- Alice의 UA는 그녀의 mail server에 메시지를 전송하고, 이 메시지는 메시지 큐에 놓이게 된다.
- Client side의 SMTP가 bob’s mail server와의 TCP 연결을 시도한다.
- 초기 SMTP 핸드셰이킹 이후에 SMTP가 TCP를 통해 Bob의 mail server로 메시지를 전송한다.
- Bob의 mail server은 mailbox에 메시지를 놓고
- Bob은 mailbox에 있는 메시지를 읽기 위해 자신의 UA를 사용한다.
이 과정에서 알아두어야 할 점은, 아무리 송수신자 사이의 거리가 멀더라도 “직접적인” 송수신을 한다는 것이다.
만약 중간에 메시지를 전송하는 것에 실패해도, 중간 서버가 아닌 “송신자”의 메일 서버에 메시지가 남아있다.
이 과정에 대한 Detail을 살펴보자.
- 우선, Client SMTP는 Server SMTP의 25번 포트로 TCP 연결을 시도한다. (서버가 죽어있으면 나중에)
- 연결이 설정되면, Application layer handshaking을 수행한다.
- 이때 SMTP Client는 송신자의 email 주소와 수신자의 email 주소를 입력한다.
- RCPT TO: <receiver@example.com
- MAIL FROM: <sender@example.com>
- 이때 SMTP Client는 송신자의 email 주소와 수신자의 email 주소를 입력한다.
- 이후 Client는 메시지를 보낸다. (TCP 연결을 통해 신뢰적으로 전송)
- 보낼 다른 메시지가 있다면 같은 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
- 서버는 클라이언트의 명령에 대해 status code와 msg로 응답한다
- Command
- 뿐만 아니라, 이메일을 전송할 때 이메일 message body는 반드시 7-bit ASCII로 구성되어야 한다.
- 그럼 어떻게 이메일에서 사진, 영상 등을 전송하냐
그렇다면, 간단한 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 |