2.3 인터넷 전자메일
- 전자 메일은
비동기적인 통신 매체
- 메일은
분배가 쉽고, 빠르고, 저렴하다.
- 현대의 전자메일: 첨부된 메시지, 하이퍼링크, HTML 포맷 텍스트, 내장된 사진 등 많은 강력한 특성 지님.
사용자 에이전트, 메일서버, SMTP
- (예) 송신자 앨리스가 수신자 밥에게 전자메일을 보내는 상황
- 앨리스가 메시지 작성을 끝내면, 사용자 에이전트는 메시지를 메일 서버로 보냄.
- 메시지는 메일 서버의 출력 메시지 큐에 들어감.
- 밥이 메시지를 읽고 싶을 때 그의 사용자 에이전트는
메일 서버
에 있는 메일박스에서 메시지를 가져온다.
- 밥의 메일박스는 그에게 온 메시지를 유지하고 관리함.
- 밥이 메시지를 보려면? ⇒ 메일 서버는 사용자 계정과 비밀번호를 이용해 밥을 인증함.
- 앨리스의 메일 서버는 밥의 메일 서버 고장에도 대처해야 함.
- 앨리스 서버가 메일을 밥의 서버로 전달할 수 없다면, 앨리스 서버는
그 메시지를 메시지 큐에 보관
하고 나중에 그 메시지를 전달하기 위해 다시 시도함. (재시도는 30분마다)
- 만약 성공하지 못한다면? ⇒ 서버는 그 메시지를 제거하고 송신자에게 전자메일로 통보함
사용자 에이전트
: 사용자가 메시지를 읽고, 응답하고, 저장하고, 구성하게 해준다.
- 마이크로소프트 아웃룩, 웹 기반 지메일, 스마트폰용 지메일 앱 등
메일 서버
: 전자메일 인프라스트럭처의 중심
- 각 수신자는 메일 서버 안에
메일 박스
를 갖고 있다.
- 일반 메시지: 송신자의 사용자 에이전트에서 전달이 시작되고, 송신자의 메일 서버를 거친 후에 수신자의 메일 서버로 전달됨. 거기서 수신자의 메일박스에 저장됨.
SMTP
: 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜
- 메일을 송신자의 메일 서버로부터 수신자의 메일 서버로 전송하는 데 TCP의 신뢰적인 데이터 전송 서비스를 이용한다.
- 송신자 메일 서버에서 수행하는 클라이언트와 수신자 메일 서버에서 수행되는 서버를 갖고 있음.
- SMTP의 클라이언트와 서버 모두가 모든 메일 서버에서 수행됨.
- 메일 서버가 상대 메일 서버로 메일을 보낼 때는 SMTP의 클라이언트로 동작하는 반면, 메일 서버가 메일 서버로부터 메일을 받을 때는 SMTP 서버로 동작함.
2.3.1. SMTP
송신자의 메일 서버로부터 수신자의 메일 서버로 메시지를 전송함.
- HTTP보다 훨씬 오래되었음.
- 여러가지 장점이 있지만, 낡은 특성을 가진 오래된 기술
- ex) 모든 메일 메시지의 몸체는 단순한 7비트 ASCII여야 한다는 단점. ⇒ 전송용량이 제한되고 커다란 첨부파일이나 커다란 이미지, 오디오 혹은 비디오 파일을 보내지 않았던 예전에는 의미가 있었음. 그러나 오늘날의 멀티미디어 시대에서는 문제를 일으킴.
- SMTP를 통해 이진 멀티미디어 데이터를 보내기 전에 ASCII로 변환할 필요가 생김. 그리고 SMTP 전송 후에는 ASCII를 다시 원래 메시지로 변환해야만 함.
HTTP는 전송 전에 멀티미디어 데이터를 ASCII로 변환하는 것을 요구하지 않는다!
- 밥과 앨리스의 시나리오
- 메일을 보낼 때
두 메일 서버가 먼 거리에 떨어져 있더라도 중간 메일 서버를 사용하지 않음.
- 밥의 메일 서버가 죽어있다면, 앨리스의 메일 서버에 남아 새로운 시도를 위해 기다린다.
- SMTP가 메시지를 송신 메일 서버에서 수신 메일 서버로 어떻게 전송하는가?
마주본 사람의 상호작용에 이용되는 프로토콜과 유사
- 첫째, 클라이언트 SMTP는 서버 SMTP의 25번 포트로 TCP 연결을 설정.
- 서버가 죽어있다면? ⇒ 나중에 다시 시도.
- 연결이 설정되면? ⇒ 서버와 클라이언트는 애플리케이션 계층 핸드셰이킹을 수행함.
- 핸드 셰이킹 과정 동안에 SMTP 클라이언트는
송신자의 전자메일 주소와 수신자의 전자메일 주소를 제공함.
- 둘째, 클라이언트는 메시지를 보냄.
- SMTP는 서버에 오류 없이 메시지를 전달하기 위해
TCP의 신뢰적인 데이터 전송 서비스에 의존함.
- 서버에 보낼 다른 메시지가 있으면, 클라이언트는 이 과정을 같은 TCP 연결상에서 반복함. 그렇지않으면 TCP에게 연결을 닫을 것을 명령함.
- (예제)
- 메일 서버 crepes.fr로부터 메일 서버 hamburger.edu에게 메시지를 보냄.
- 클라이언트는 하나의 점으로 된 라인을 송신하며, 그것은
서버에게 메시지의 끝
을 나타냄.
- 서버는 각 명령에 응답하며, 각 응답에는 응답 코드와 영문 설명이 있음.
- SMTP는
지속 연결
을 사용한다는 것을 언급.
- 송신 메일 서버가 같은 수신 메일 서버로 보내는 여러 메시지를 갖고 있다면, 같은 TCP 연결을 통해 모든 메시지를 전달할 수 있음.
- 모든 메시지를 전송한 후에 QUIT를 보낸다!