이 글은 이화여자대학교 이미정 교수님의 2014년 2학기 컴퓨터 네트워크 강의를 기반으로 재구성한 것입니다. 삽화는 링크를 출처로, 저작권은 J.F Kurose and K.W. Ross에게 있다는 것을 밝힙니다.
Application Layer에서는 크게 3가지를 살펴본다.
- application principle
- client-server 구조
- peer-to-peer (P2P) 구조
- transport layer service model
- internet protocol - HTTP, electronic mail(SMTP, POP3, IMAP), DNS, P2P
- network application의 작성을 위한 interface - socket, UDP, TCP
이 글에서는 electronic mail을 위한 SMTP, POP3, IMAP을 살펴본다.
Electronic Mail
mail system은 3가지 구성요소로 이루어져 있다.
- user agent : user가 compose, edit, read할 수 있게 지원하는 program
- mail server : user로부터 들어오고, 나가는 모든 message를 저장한다.
- mailbox : 들어온 message를 받는다. 사용자별로 따로 있다.
- message queue : 발송한 message를 담아 둔다. 하나의 mail server에 1개 있다.
- SMTP, simple mail transfer protocol : mail 전송을 위한 protocol
mail을 보내는 과정
어떤 과정으로 mail이 보내지는지 보자.
- sender가 sender user agent에 message를 작성하면, sender user agent가 SMTP를 사용해 sender mail server로 message를 전송한다.
- sender mail server는 이 message를 받고, sender mail server message queue에 message를 넣는다.
- sender mail server는 message queue에서 message를 빼내고, SMTP를 사용해 receiver message server로 보낸다.
- user agent가 receiver message server에 접속해 mail을 받는다. 이 때는 IMAP, POP, HTTP 등의 protocol을 사용한다
위 글에서 알 수 있듯, receiver user agent가 mail을 읽을 때는 IMAP, POP, HTTP를 사용하지만, mail message를 주고받는 나머지 모든 과정에서는 SMTP를 사용한다.
이전 포스팅에서 communication을 시작하는 process가 client process라고 했다. 1번 과정에서는 user agent가 mail server에게 request를 보내므로 이 때 mail server는 server process이다. 반면 3번 과정에서 sender mail server가 request를 보내므로 client process이고, receiver mail server가 server process가 된다.
즉, mail server는 server process와 client process 둘의 역할을 수행하고 있기 때문에 둘 모두 실행되어야 한다.
SMTP
SMTP는 Simple Mail Transfer Protocol의 약자로, mail 전송을 위한 protocol이다. data integrity가 중요하므로 TCP를 사용해 동작하며, port는 25번을 사용한다. PULL protocol이다.
HTTP와 유사하게 client는 command를 사용해 request를 보내고, server는 status code와 phrase가 들어있는 response를 보내 응답한다.
초기의 SMTP는 7bit ASCII 문자만 보낼 수 있었지만 지금은 image, file 등 여러 정보를 보낼 수 있다.
단계는 크게 아래 3단계로 나뉜다.
- greeting (handshake)
- message 전송
- close
이 때, SMTP는 persistent이기 때문에 handshake 이후 여러 개의 message를 보낼 수 있다.
SMTP vs HTTP
STMP | HTTP | |
persistent? | persistent | non-persistent (on HTTP 1.0) persistent (on HTTP 1.1) |
protocol type | PUSH | PULL |
each object in one response message | multiple objects in multipart message |
- HTTP 1.0의 경우 non-persistent이므로 1번의 handshake에 하나의 object만 보낼 수 있다. 그러나 SMTP의 경우 handshake 이후에는 close하기 전까지 여러 개의 message를 보낼 수 있다.
- HTTP 1.1의 경우 persistent하다.
- HTTP는 PULL protocol이고, SMTP는 PUSH protocol이다. HTTP는 server에 요청하면 가져오는 PULL protocol이지만 SMTP는 server에게 data를 보내는, PUSH protocol이다.
- HTTP는 1번의 message에 object 1개를 보낼 수 있지만 SMTP는 greeting(handshake) 이후 여러 message를 한 번에 다 실어 보낼 수 있다.
- 만약 용량이 큰 file이나 object가 여러 개인 경우, 여러 개의 message에 이를 쪼개어서 보낸다.
Mail Access Protocol
위에서 설명한 SMTP는 PUSH protocol이다. 그러나 [메일을 보내는 과정]을 보자. 마지막 단계의 경우 user agent가 receiver mail server에 접속하고, 정보를 PULL해온다. 때문에 마지막 단계에서는 PUSH protocol인 SMTP를 사용할 수 없다. 이 때 POP3, IMAP, HTTP 등의 PULL protocol을 사용하는데, 이 protocol들을 mail access protocol이라고 한다.
POP3
POP3 protocol은 SMTP와 유사하게 client는 command를 보내고 server는 response를 보내는 식으로 통신한다. POP3는 stateless이다!
POP3는 2가지 단계로 이루어진다.
- authorization phase
- transaction phase
authorization phase에서는 user와 pass command를 이용해 인증하며, transaction phase에서는 list, retr, dele, quit 4개의 command를 사용해 mail을 읽는다. 구체적으로는, list로 mail server의 mailbox에 있는 mail list를 보고, retr로 각 mail를 확인하고, dele로 mail을 지운다. quit는 접속을 끊는다.
POP3는 아래 2가지 mode가 있다.
- download-and-delete : 읽은 mail을 삭제하기 때문에, 다른 client에서 확인할 수 없다.
- download-and-keep : 읽은 것을 copy하기 때문에 다른 client에서 확인할 수 없다. 그러나 stateless이기 때문에 읽은 메일도 읽지 않았다고 표기된다.
IMAP
POP3의 경우, mail server에 있는 것을 local로 다운로드받고, 다운로드 받은 mail들에서 command를 날린다. 즉, server에는 변화가 없다! 또한 stateless이기 때문에 누가 무슨 메일을 읽었는지 알 수 없다.
IMAP은 이러한 단점을 해결하기 위해 고안되었다. IAMP은 server에 직접 접속해 mail들을 조작한다. 때문에 모든 mail이 server에 저장되어야 하며, mail을 folder를 사용해서 관리할 수 없다. 따라서 state하지만 server에 부담이 크다.
잘못된 내용이나 오탈자에 대한 지적, 질문 등은 언제나 환영합니다.
'CS > Network' 카테고리의 다른 글
[Network] 하향식 접근 네트워크 - 2. Application Layer - (5) P2P (0) | 2023.07.27 |
---|---|
[Network] 하향식 접근 네트워크 - 2. Application Layer - (4) DNS (0) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (2) HTTP (0) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 2. Application Layer - (1) Application Principle (0) | 2023.07.27 |
[Network] 하향식 접근 네트워크 - 1. Introduction (0) | 2023.07.26 |