[네트워크] SMTP
SMTP란?
SMTP란 네트워크를 통해 전자우편(이메일)을 전송하는 프로토콜로, POP3 / IMAP과 비교되어 쓰인다.
Electronic main의 흐름은?
Email(loss-sensitive)에 사용되는 application layer의 프로토콜 3가지를 살펴보자.
1) SMTP는 이메일을 sending(pushing) / delivering 할 때 사용한다. -> push 프로토콜
2) POP3 / IMAP은 이메일을 receiving(accessing) 할 때 사용한다. -> pull 프로토콜
cf. push 프로토콜은 서버에 접속을 시작한 클라이언트가 서버로 데이터를 전송(업로드)하고자 하는 경우에, pull 프로토콜은 서버에 접속을 시작한 클라이언트가 서버에 데이터를 수신(다운로드)하고자 하는 경우에 사용한다.
cf. POP3는 "download and delete" 와 "download and keep" 이라는 두가지 모드를 제공한다.
cf. IMAP은 POP3보다 기능이 많고 복잡하다.
cf. POP3는 stateless하고 IMAP는 stateful하다.
cf. SMTP는 stateful하다.
HTTP와 SMTP의 차이점은?
HTTP는 pull 프로토콜로 persistent or non-persistent TCP connection을, SMTP는 push 프로토콜로 persistent TCP connection을 사용한다.
HTTP는 object들이 각각 다른 인코딩으로 나눠져서 오지만, SMTP는 object가 7-bit ASCII로 인코딩되어 하나로 온다.
HTTP와 SMTP의 공통점은?
둘 다 loss-sensitive하기 때문에 TCP 프로토콜을 사용한다.
Alice가 Bob에게 mail을 보내는 상황이다.
1) Alice는 MUA(UA)를 사용해 자신의 메일서버에 TCP 연결을 맺고, Bob한테 보내고 싶은 메일을 push한다. (SMTP)
2) Alice의 메일서버는 Bob의 메일서버와 TCP 연결을 맺고, Bob의 메일서버의 IP주소를 찾아 메일을 message queue에 push한 후 (SMTP), Bob의 mailbox에 push한다.
3) Bob의 user agent가 자신의 mailbox를 열어 메일을 pull한다. (POP3 / IMAP)
메일을 보낼 땐 메일서버의 message queue에 push하고, client 별로 할당된 mailbox에서 client가 pull하는 것이다.
cf. mail 프로토콜은 sender 메일서버와 receiver 메일서버 간의 1:1 TCP connection을 맺는다. (다른 서버는 없다)
cf. sender와 receiver가 직접 연결을 맺지 않고, 메일서버를 통해 전달하는 이유는 연결에 오류가 있을시 alice의 메일 서버가 bob의 메일서버 오작동을 대비할 수 있다는 점과, 매번 client에서 DNS resolution을 해야 하는 대신 두 메일 서버를 연결한다면 DNS를 재사용 할 수 있어 효율이 좋다. 즉, 이렇게 하면 메일 서버의 IP 주소를 찾는 DNS resolution 횟수를 줄일 수 있다는 장점이 있다. 또한 alice가 속한 ISP에서 Bob이 속한 ISP로 보내는 다른 메일들을 동시에 전송할 수 있어 효율성이 좋다.( + alice가 bob과 caki에게 메일을 보낸다면, tcp를 연김에 연달아 보낸다.)
.