E-mail (Electronic Mail)
E-mail에는 대표적으로 user agents, mail servers, SMTP 3가지 컴포넌트가 있다. 이 세 가지의 컴포넌트들이 E-mail 전송에서 필요로 한다.
User agents (mail reader)
메일 메세지를 작성, 수정, 읽기 등의 기능을 한다. End system(Host)에 존재하며 대표적으로 Outlook, elm, Mozilla Thunderbird 등이 있다. 이를 관장하는 메일 서버가 존재하여 전송 및 수신되는 메시지들은 서버에 저장된다. User agents는 메시지를 읽을 때에 서버에서 메일 메시지를 꺼내와 읽게 된다. 대표적인 메일 접근 프로토콜로 POP, IMAP, HTTP가 있다.
Mail Server
메일 서버에는 사용자에게 들어오는 메일이 저장되는 mailbox가 존재한다. 사용자로부터 전송되는 메일 메세지들은 메시지 큐를 거쳐 전송되게 된다. 수신 메일 서버에 이상이 생기면 메시지 큐에 보관하였다가 30분마다 재시도를 하게 된다. 서버에 존재하는 SMTP를 사용하여 매일 서버 간에 통신한다. 전송 시에는 SMTP client로 동작되며, 다른 메일 서버로부터 메일을 수신할 때는 SMTP server로 동작한다.
SMTP (Simple Mail Transfer Protocol)
메일 서버간에 메일을 주고받기 위한 프로토콜이다. 메일은 손실이 발생하면 안 되기 때문에 TCP 통신을 사용하여 클라이언트로부터 서버로 신뢰성 있는 전송을 한다. 포트 번호는 25번을 사용한다. RFC 2821에 저장된다.
메일 전송을 위해서는 세가지의 과정을 필요로 한다. TCP 연결을 맺은 이후 SMTP만의 동작으로 Handshaking, 메일 메시지 전송 그리고 closure이다. 모든 메시지들은 7-bit ASCII 형식으로 되어있어야 하며(이미지 등의 바이너리 파일을 포함하는 경우에도 7-bit ASCII로 인코딩해서 보내야 한다.), 응답은 status code와 phrase로 되어있다. SMTP는 persisten connections로 한 개의 TCP 연결을 연 상태에서 같은 도메인에 메시지 전송 과정을 반복할 수 있다(여러 메시지 전송 가능).
메일 메세지 전송 과정은 다음과 같다. MAIL FROM 커멘드로 보내는 메일 주소를 클라이언트에서 서버로 보낸 뒤 응답이 오면, RCPT TO 커멘드로 상대 메일 주소를 보내고 응답을 받는다. 이후 DATA 커멘드를 보내 실제 메시지의 시작을 서버로 알린다. 서버에서는 응답과 메시지 전송이 끝나며 "."을 마지막에 넣으라고 지시를 보낸다. 클라이언트는 서버로 메시지 내용을 보내고 마지막에 "."(CRLF.CRLF)을 전송한다. 서버는 메시지 수신에 대한 응답을 주게 된다.
여러 메세지 전송을 원하면 위의 과정을 반복하면 된다. 메시지 전송이 끝나 SMTP 연결 종료를 하고 싶으면 QUIT 커멘드를 전송한다. 서버는 QUIT 커멘드를 수신하면 연결을 종료하고 응답을 보낸다.
SMTP vs HTTP
push protocol | pull protocol |
전송 메일 서버가 수신 메일 서버에게 push하는 방식 | 유저가 서버에 있는 정보를 pull해 오는 방식 |
TCP 연결을 file을 보내려는 측이 시작 | TCP 연결을 file을 받으려는 측이 시작 |
메세지에 포함된 모든 Objects를 그 메세지에 포함하여 전송 | 한 개의 응답 메세지는 한 개의 Object만 포함 |
POP (Post Office Protocol)
서버에서 메일을 가져오는 User agent의 메일 접근(access) 프로토콜 종류 중의 하나로 가장 간단한 접근 프로토콜이다. TCP 연결을 맺은 상태에서 메일을 pull 해온다. Download and delete mode와 download and keep 두 가지의 모드가 있다.
Download and delete : 기본 모드. 다운로드 이후 메일 서버에서 삭제한다. 다시 읽기가 불가능하다.
Download and keep : 일부 프로그램에서는 미구현. 메시지를 카피해서 가져오는 방식이다.
POP 3는 세션간의 상태는 비저장(stateless) 특성을 가진다. 서버에 삭제한 것만 반영이 된다. 폴더를 만들고 정리해두어도 매일 서버에는 반영이 되지 않는다. 여러 단말을 사용하여 메일을 읽기에는 불편함이 있다.
POP 3의 동작 과정은 처음에 인증과정을 거쳐 처를(transaction)을 한다. 인증과정에서 클라이언트는 서버로 USER, PASS 정보를 보내 로그인을 한다. 처리 과정에는 list 커멘드로 메시지 번호 리스트를 받아 볼 수 있으며, retr 커멘드로 검색, dele 커멘드로 삭제, quit 커멘드로 종료할 수 있다.
IMAP (Internet Mail Access Protocol)
POP 3의 stateless한 속성의 단점으로 복수개의 단말에서 메일을 읽기에 불편함을 해소하였다. 서버에서 메일을 관리하고 단말로는 메일 메시지의 헤더 부분만 기본적으로 보내준다. 메일이 서버에서 관리됨에 따라 복수개의 단말에서 메일을 체크하는 환경에 편리하다. 단말에서 메일의 제목을 클릭하면 내용을 복사해온다.
서버와 단말간에 자동 싱크(서버에 메일이 들어오면 단말로 자동 push) 설정 가능하다. 여러 단말에서 메일을 체크 시에 편리하다. 안드로이드를 예시로 이메일 앱을 사용하여 다양한 메일들과 IMAP 싱크 설정을 하면 해당 메일 계정으로 새로운 매일이 수신되면 자동으로 알림을 보낸다.
Web-based E-mail
User agent의 역활을 일반 web browser가 한다. Hotmail을 시작으로 1990년부터 사용이 되기 시작했다. HTTP를 이용하여 mail 서버의 메일 box에 접근하고 메일 서버에 전송한다. 하지만 메일 서버 간의 전달은 SMTP를 사용해야 한다.
'IT 지식 > 네트워크(Network)' 카테고리의 다른 글
컴퓨터 네트워크 - P2P applications (0) | 2021.11.29 |
---|---|
컴퓨터 네트워크 - DNS: Domain Name System (0) | 2021.11.29 |
컴퓨터 네트워크 - FTP (0) | 2021.11.29 |
컴퓨터 네트워크 - Cookie & Cache (0) | 2021.11.29 |
컴퓨터 네트워크 - Web and HTTP (Application layer) (0) | 2021.11.27 |