전자메일
-
비 동기적인 통신 매체
-
분배가 쉽고, 빠르고, 저렴
-
첨부메시지, 하이퍼링크, HTML 포멧 텍스트, 내장된 사진등 강력한 특성을 지님
-
사용자 에이전트
- 사용자가 메시지를 읽고, 전달하고, 저장하고, 구성하게 해줌 (gmail, outlook등 메일 앱)
- 메시지를 메일 서버로 보내고 메일 서버의 메일박스에서 메시지를 가져오는 역할
-
메일 서버
- 메일 서버 안 메일박스는 메시지를 유지하고 관리
- 사용자 계정과 비밀번호를 이용해 사용자 인증
- 만약 송신자의 서버가 수신자의 서버로 메일을 전달할 수 없다면 송신자의 서버에 메시지를 메시지 큐에 보관하고 나중에 그 메시지를 전달하기 위해 다시 시도
- 전송에 실패하면 송신자에게 알림
-
SMTP
- 인터넷 전자메일을 위한 주요 애플리케이션 계층 프로토콜
- 메일을 전송할 때 TCP의 신뢰적인 데이터 전송 서비스 이용
- 송신자 메일 서버에서 수행하는 클라이언트와 수신자 메일 서버에서 수행되는 서버를 가짐
- 송신 : SMTP 클라이언트로 동작
- 수신 : SMTP 서버로 동작
2.3.1 SMTP
송신자의 메일 서버로부터 수신자의 메일 서버로 메시지 전송한다
단점 : 송수신할때 7비트 ASCII ←> 원래 메시지로 변환해야 함 (HTTP는 변환 요구 X)
- 송신자 : 사용자 에이전트 수행, 전자메일 주소 제공, 메시지 작성, 사용자 에이전트에게 전송 명령
- 사용자 에이전트 : 메시지를 송신자 메일 서버에 전송, 메시지 큐에 저장
- 송신자 메일서버 SMTP 클라이언트 : 메시지 큐에 있는 메시지 확인, 수신자 메일서버 SMTP 서버에게 TCP 연결 설정
- SMTP 클라이언트 : SMTP 핸드셰이킹 후 송신자의 메시지를 TCP 연결로 전송
- 수신자의 메일서버 SMTP 서버 : 메시지 수신, 메일 박스에 저장
- 수신자 : 메시지를 읽기 위해 사용자 에이전트 시동
-
SMTP는 메일을 보낼 때 두 메일 서버가 먼 거리에 떨어져 있어도 중간 메일 서버를 사용하지 않음(직접연결)
-
수신자의 메일 서버가 죽어있으면 중간 메일 서버에 저장되는것이 아닌 송신자의 메일 서버에 남아 새로운 시도를 위해 대기
-
SMTP가 메시지를 송신 메일 서버에서 수신 메일 서버로 전송하는 과정
- 클라이언트 SMTP(송신 메일 서버)는 서버 SMTP(수신 메일 서버)의 25번 포트로 TCP 연결 설정 (서버가 죽어있으면 나중에 다시 시도)
- 연결이 설정되면 서버와 클라이언트는 애플리케이션 계층 핸드셰이킹 수행, 이 과정에서 SMTP 클라이언트는 송신자의 전자메일 주소와 수신자의 전자메일 주소 제공
- 클라이언트가 메시지 전송 (오류없는 전달을 위해 TCP 데이터 전송 서비스에 의존)
- 전송 완료 후 연결 종료
c : SMTP 클라이언트 (crepes.fr) s : SMTP 서버 (hamburger.edu)
SMTP는 지속 연결을 사용하여 같은 수신 메일 서버로 보내는 여러개의 메시지를 갖고 있다면 같은 TCP 연결을 통해 모든 메시지를 전달
2.3.2 메일 메시지 포맷
전자메일을 보낼 때 주변 정보가 포함된 헤더가 메시지 몸체 앞으로 오게 됨 (주변정보 : 헤더라인에 포함, RFC 5322에 정의)
- RFC 5322 : 메일 헤더 라인에 대한 정확한 포맷과 의미에 대한 해석 기술
- 각 헤더 라인은 키워드, 콜론, 값의 순서로 구성되고 읽을수 있는 텍스트 포함
- 모든 헤더는 From: 헤더라인과 To: 헤더라인을 반드시 포함
2.3.3 메일 접속 프로토콜
- SMTP가 송신자의 메일 서버로 부터 수신자의 메일 서버로 메시지를 전달하면 메시지는 송신자의 메일 박스에 저장됨
- 수신자가 자신의 호스트에서 사용자 에이전트를 수행한다면 메일 서버도 자신의 로컬 PC에 놓는것이 자연스럽지만 전자메일 수신을 위해 항상 켜져있어야 하며 인터넷에 연결되어있어야함
- 사용자는 로컬 호스트에서 사용자 에이전트를 수행하고 늘 켜져있는 공유 메일 서버에 저장된 메일박스에 접근
메일 서버가 메일박스를 관리하고 SMTP의 클라이언트와 서버 측 모두를 수행
- 수신자의 사용자 에이전트는 수신자의 메일 서버로 전자메일 메시지를 SMTP or HTTP를 이용하여 전송
- 수신자의 메일 서버는 SMTP(client SMTP)를 사용하여 송신자의 메일 서버로 전자메일 메시지 중계
송신자의 메일 서버를 통해 중계하지 않으면 송신자의 사용자 에이전트는 목적지 메일 서버에 도달할 수 없음
수신자가 메일 서버로부터 자신의 전자메일을 확인하는 방법
- 사용자 에이전트가 수신자의 전자메일을 확인하기 위해 HTTP 사용 이 경우 수신자의 메일 서버는 송신자의 메일 서버와 통신하기 위해 SMTP 인터페이스와 HTTP 인터페이스를 갖고 있어야 함
- 메일 클라이언트 사용 인터넷 메일 접근 프로토콜(IMAP) 사용
두 방법 모두 수신자의 메일 서버에 의해 유지되는 폴더 관리