mail 전송의 원리

OS/리눅스 & 유닉스 2014. 9. 18. 17:27

 ● 용어
MUA(Mail User Agent) : 메일을 작성하여 보내는 프로그램
MTA(Mail Transfer Agent) : 이용자로부터 메일을 받아서, 외부로 전달하는 프로그램
MDA(Mail Delivery Agent) : 전송받은 메일을 해당 사용자에게 전달
SMTP : Simple Mail Transfer Protocol) : 메일을 보낼 때 사용되는 프로토콜
POP3(Post Office Protocol) : 메일을 전송받을 때 사용되는 프로토콜
IMAP(Internet Mail Access Protocol) : 메일을 전송받을 때 사용되는 프로토콜



□ mail 전송의 원리


 

Internet service 중 가장 큰 비중을 차지하고 있는 것 중에 하나가 바로 mail service일 것이다. mail server를 운영하려는 우리는, 과연 internet에서 mail이 어떠한 원리로 전송되는지 반드시 알아야 할 것이다. 우선은 간단한 원리를 소개하겠고.. 앞으로 계속해서 mail server의 작동원리까지 설명해 나가겠다.

 

■ internet에서는 메시지를 송신하기 위해 SMTP 프로토콜을 사용한다.
SMTP란, Simple mail Transfer protocol의 약자로서 메시지를 교환하기 위한 프로토콜 규약이다.
다음의 그림을 보면서 자세히 설명하겠다.

 



 

 1. 사용자는 mail client (outlook 또는 eudora)와 같은 프로그램을 통해서 mail을 작성한 후, SMTP를 사용하여 mail deamon으로 메시지를 전송한다.

※ 유닉스용 전자우편 프로그램으로는 mail, mailx, elm, pine(외부에디터 사용)등이 있으며, 윈도우에서는 넷스케이프 mail 메신저, 익스플로러의 아웃룩 익스프레스, eudora 등이 있다.

2. 메일 데몬은 종단간 client의 주소를 분석하고 가장 가까운 mail server(송신자 소속의 메일서버)로 메시지와 정보를 보낸다.

※ mail deamon이란 일종의 프로세스로서, 송신자의 메일과 정보를 메일 서버가 해석 가능하도록 재가공한다.  반대의 경우 또한 같은 방법으로 수신자의 정확한 메시지 수신과 릴레이를 지원한다.
참고적으로, UNIX 기반의 대표적인 SMTP mail deamon으로는 [send mail]이 있으며, 앞으로 랩의 홈페이지에 unix/linux 카테고리가 생기게 된다면 sendmail의 사용에 대한 강좌도 준비하도록 하겠다.

3. 송신자가 보낸 편지가 일단 송신자 측의 전자우편을 관리하는 Mail Server에 전달되면,  Mail Server는 수신자의 전자우편 주소를 분석해서 최단 경로를 찾아 근접한 Mail Server에 편지를 전달하게 된다.

4. 최종 수신자측의 Mail Server에 도착하기까지 연속적으로 전달하는 중계작업이 계속된다.

서로 근접한 Mail Server들 간에 전자우편을 계속해서 중계해 나가는 방법을 통해 메일을 저장 후 전송 (Store-and-forward)하는 서비스를 하게 된다.

5. 이러한 일련의 작업이 계속적으로 이루어 진후, 송수신자는 정확하게 메일 교환을 할 수 있게 된다.

 

 전자 우편의 주소 체계와 전송

zenome@email.com

email은 '@'을 구분자로 왼쪽에는 소속된 서버에서 부여받은 ID와 오른쪽에는 소속 서버의 주소의 주소를 사용하게 된다.

전자우편의 구성은 주소와 날짜, 메일의 제목인 주제를 포함하고 있는 메일 헤더와 메일의 내용이 포함되어 있는 메일 본체로 구성되어 있다.

인터넷 전자우편은 7비트 아스키 문자를 전송하는 것을 표준으로 하고 있어 한글로 작성된 메일은 변환코드로 인해 "내용을 알아볼 수 없는 문제가 발생할 수 있다.

이진파일은 인코딩을 통해 텍스트로 변환한 후 발송해야 하지만 요즘은 MIME 방식을 이용해 전자우편에 첨부하여 발송하는 기법을 사용하고 있다.

※ "email.com"은 cnn이 운영하는 실제의 mail 서비스 업체의 주소이다. 여러분의 이해를 돕기 위해 사용했을 뿐이다. 하지만 위의 주소는 필자의 이메일 주소이므로.. 여러분의 문의사항을 보내도 좋겠다.
다만 한글의 경우 글씨가 깨지는 경우가 많으므로 주의하여야 한다.

 

 

■ SMTP와 POP3

Θ SMTP (Simple Mail Transfer Protocol)

일반적으로 메일을 송신할 때 사용되어진다고 볼 수 있다.
SMTP와 관련된 프로토콜에 대한 표준은 STD와 RFC에서 정해진 것이다. 서버에서 서버로의 프로토콜이며 이외의 다른 여러 프로토콜은 메시지를 접속하기 위해서 사용한다. STMP와 관련된 프로토콜을 살펴보면 다음과 같다.

① STD 10/RFC 821:두 컴퓨터 사이의 메일 교환 표준을 정의하며 SMTP 자체에 관한 표준으로 TCP/IP 호스트 사이에서 메일을 전달하는데 사용된다.

② STD 11/RFC 822, RFC1049:RFC 822와 RFC 1049에 포함된 메일 메시지의 형식에 관한 표준을 정의하며 공식적인 프로토콜명은 MAIL이다. RFC822는 메일 헤더 필드의 의미를 기술하고 헤더 필드 집합과 그에 대한 해석을 정의한다. RFC 1049는 평문 아스키 이외의 문서 형식들이 메일 본문에서 어떻게 사용될 수 있는지에 대해 기술하고 있다.

③ RFC 974:DNS(domain name system)을 이용한 메일 경로 배정에 관한 표준을 정의하고 있으며 공식 프로토콜명은 DNS-MX이다.

STD 10/RFC 821에서는 SMTP를 통해 전달되는 데이터는 상위 비트가 0으로 설정된 7비트 아스키 데이터라고 기술하고 있다. 이는 영문텍스트 메시지를 전송하는데는 적합하지만, 비영어권 데이터 또는 비 텍스트 데이터에 대해서는 부적합하다. 이러한 제약을 극복하기 위해 다음과 같은 접근 방식이 사용된다.

① MIME(multipurpose internet mail extension):RFC 2045부터 RFC 2049에서는 텍스트와 2진 데이터를 RFC 822에서 정의한 7비트 아스키로 코드화하는 메카니즘을 명시한다.

② SMTP Service Extensions:RFC 821에서 정의한 SMTP의 기능을 확장하는 메커니즘을 RFC 1869, RFC 1652, 1870에서 각각 정의하고 있다.

 

Θ POP (Post Office Protocol)

 인터넷 메일 클라이언트가 메일 서버로부터 메일을 꺼내기 위한 규약으로서 인터넷에서 사실상 표준이 되어 있다. 말그대로 메일의 수신을 위한 프로토콜이다. SMTP가 우체부라면 POP은 우체국이라고 생각하면 쉽다. 전자우편의 헤더와 본문 모두를 사용자의 컴퓨터로 다운로드한다. 이프로토콜은 TCP 세션의 109번 포트를 쓰는데 같은 포트를 쓰면서 조금 진보한 POP2가 있고 최근 많이 사용되는 POP3는 110번 포트를 사용한다.

 

※ 참고, protocol이 사용하는 일반적 port

HTTP  :    80 port
FTP    :    21 port
POP3 :  110 port
SMTP :    25 port
IMAP  :   43 port

 

■ 일반적 mail server 환경(UNIX-send mail)에서의 mail 송수신 과정

Sendmail이 설치된 메일서버는 SMTP(Simple Mail Transfer Protocol) 프로토콜을 사용하여 메일을 전송하고, 호스트로부터 받은 메일을 클라이언트로 전달할 때는 POP3 또는 IMAP등의 프로토콜을 사용합니다.

일반적으로 대부분의 사람들이 E-Mail을 보내기 위하여 PC상의 MUA(Mail User Agent : Outlook, Netscape Messanger등)를 사용하게 됩니다. 개인 PC에는 메일 송수신 기능(즉, MTA 기능)이 없기 때문에 인터넷에 연결되어있는 UNIX기반의 메일서버를 이용합니다. 혹은 NT의 Mail exchange서버를 사용하기도 합니다.

abc@abc.com를 메일주소로 가진 사람이 def@def.com을 메일주소로 가지고 있는 사람에게 E-mail을 보내는 과정을 예로 설명하겠습니다.

① 메일서버로 abc@abc.com을 사용하는 abc은  def@def.com에게 편지를 보내기 위해 MUA로 작성된 편지를 SMTP(port 25)를 이용하여 발송한다.

②메일서버의 25번포트에서는 sendmail이 Demon으로 실행되어져 있다가 outlook express가 보내고자 하는 메일을 받는다.

③메일을 받은 sendmail은 메일의 도착지가 자신인지를 확인한다. 만일 도착지가 자신이 아니라면 도착지로 메일을 다시 전송합니다. 자신이 메일의 도착지라면 메일을 MDA(Mail Delivery Agent)에게 넘겨줍니다. MDA(메일을 MTA로부터 받아서 메일박스등에 저장하거나 원하는 필터링을 할 수 있는 프로그램)는 필터링 과정을 거친 후 사용자의 메일박스에 저장한다.

④ def.com 자신이 도착지가 아니라면 MTA는 메일을 def.com의 25포트를 통하여 MTA에게 넘겨주며 def.com의 MTA에 접속할 수 없다면 email.com의 메일 스풀에 저장되어 주기적으로 def.com 시스템의 MTA와 접속을 시도하여 접속이 이루어지면 메일을 전송하고 자신의 스풀에 저장된 메일을 삭제하며 지정된 시간이 지나도 보낼 수 없다면 메일을 전송한 사람에게 메일을 보낼 수 없다고 되돌려 줍니다.

⑤ 편지를 넘겨받은 def.com의 MTA는 User의 존재유무를 확인하여 전달하며 유저가 존재하지 않을 경우 다시 편지를 처음 전송한 사람에게 되돌려 줍니다. 수신인의 hanmail.net 에 존재할 경우 MDA 프로그램에 메일을 넘겨주며 MDA는 적절한 필터링을 거쳐 각 사용자의 메일 박스에 저장됩니다.

 

⑥ 편지 수신자인 uhkim@hanmail.net의 사용자는 유닉스용 MUA인 mutt,pine,elm과 같은 프로그램으로 편지를 받아보며, pc 용 MUA인 microsoft outlook, Netscape messenger, Eudora를 이용하여 IMAP 혹은 POP3프로토콜을 이용하여 hanmai.net에 접근하여 편지를 가져와 읽을 수 있습니다.

이상에서 보듯이 sendmail은 MTA의 역활을 합니다. 사용자로부터 메일을 전달받아 다른 컴퓨터의 MTA에게 넘겨주고, 다른 MTA로 부터 받은 메일을 MDA에게 넘겨주는 인터넷 전자메일의 가장 중심부에 위치하고 있습니다. 현재 UNIX기반 메일서버의 거의 대부분이 MTA로 sendmail을 쓰고 있습니다.


 

■ MUA & MTA

사용자가 직접 접하게 되는 것은 우편 대행자(MUA:mail user agent)이다. 이 도구는 여러 가지가 있는데 우선 표준 유닉스 도구는 mail이다.

  이 mail은 크게 두 가지로 발전되었는데 그 하나가 BSD(Berkely Software Distribution)에서 개발된 mailx이고 또 하나는 시스템Ⅴ 유닉스(System Ⅴ Unix)에서 개발된 Mail이다. 이 두 도구는 대개의 표준 유닉스 시스템에 기본적으로 탑재되어 있다.  이 외로 Elm, MH, Rmail, Mush 등 여러 가지가 있는데 모두 나름대로의 특징을 가지고 있다.

지금까지 언급된 것은 주로 유닉스 하의 TCP/IP 중 일부인 SMTP로써 유닉스 기반하에서 동작하는 것들이다. 어떤 랜에 연결된 PC는 정해진 Host에 연결해 메일 작업을 할 수도 있지만 직접 PC에 도구를 설치해 운용할 수도 있게 된다. 이와 같이 PC에서 동작하는 메일 프로토콜 중 하나가 POP(Post Office Protocol)이며 이는 SMTP보다 사용하기에 편리한 점이 많다. 이 POP 기반하에 동작되는 것 중 많이 사용하는 도구가 유도라(Eudora)이다.

...by zenome


:::www.zenome.org:::


SMTP (Simple Mail Transfer Protocol) ; 단순 우편전송 규약

SMTP[에셈티피]는 전자우편을 보내고 받는데 사용되는 TCP/IP 프로토콜이다. 그러나, 수신 측에서의 큐 메시지능력의 제한으로 인해, 대개 수신을 위해서는 POP3나 IMAP 중의 하나의 프로토콜을 쓰는 것이 보통이며, 이러한 프로토콜은 서버에 각자의 우편함을 두고 사용자 메시지를 저장한 다음, 주기적으로 서버에 접속하여 편지를 다운로드 하는 식으로 운영된다. 다른 말로 설명하면, 사용자들은 SMTP를 메일을 보내는데 주로 사용하며, POP3나 IMAP 프로토콜은 자신의 서버에 수신되어 있는 메시지를 받아보는데 사용한다는 말이다. 유도라와 같은 대부분의 메일 프로그램은 SMTP 서버와 POP 서버를 모두 설정할 수 있도록 허용한다. 유닉스 기반의 시스템에서 sendmail은 전자우편용으로 가장 광범위하게 사용되는 SMTP 서버이다. 상용 패키지인 Sendmail에는POP3 서버가 포함되어 있으며, 윈도우NT 버전도 나온다.

SMTP는 대개 TCP 25번 포트에서 운영되도록 만들어진다. SMTP의 자세한 내용은 IETF의 RFC 821에 정의되어 있다. SMTP의 대안으로 유럽지역에서 광범위하게 사용되는 것으로 X.400이 있다.



POP3 (Post Office Protocol 3)

POP3[팝 쓰리]는 전자우편을 수신하기 위한 표준 프로토콜로서 가장 최신 버전이다. POP3는 인터넷 서버가 사용자를 위해 전자우편을 수신하고 그 내용을 보관하기 위해 사용되는 클라이언트/서버 프로토콜이다. 사용자(또는 전자우편 수신용 클라이언트 프로그램)는 주기적으로 서버에 있는 자신의 메일 수신함을 점검하고, 만약 수신된 메일이 있으면 클라이언트 쪽으로 다운로드 한다. POP3는 가장 유명한 전자우편 제품 중의 하나인 유도라에 적용되었으며, 넷스케이프와 마이크로소프트 익스플로러 브라우저에도 역시 적용되었다.

POP3의 대안으로 사용할 수 있는 프로토콜이 IMAP이다. IMAP으로는 사용자는 설령 자신의 클라이언트 컴퓨터에 메일이 있다고 해도, 서버에 있는 메일을 본다. 자신의 컴퓨터에서 지워진 메일도 서버에는 아직 남아있다. 메일은 서버에 보관될 수 있고 검색될 수 있다.

POP3는 '보관하고 전달하는' 서비스라고 생각할 수 있으며, IMAP은 원격지 파일서버라고 생각할 수 있다.

POP과 IMAP은 둘 모두 전자우편을 받는 일을 담당하므로, 인터넷을 통해 전자우편을 전달하는 프로토콜인 SMTP와 혼동해서는 안된다. 송신자가 SMTP를 이용해서 메일을 보내면, 상대방 메일서버에 있는 메일처리기가 수신자를 대신해서 그것을 수신한다. 그리고 난 뒤 그 메일을 POP이나 IMAP을 이용하여 수신자가 읽게 되는 것이다.




IMAP (Internet Message Access Protocol)

IMAP[아이맵]은 로컬서버에서 전자우편을 액세스하기 위한 표준 프로토콜이다. IMAP은 인터넷 서버를 이용하여 전자우편을 수신하고 보관하는 클라이언트/서버형 프로토콜이다. 사용자 (또는 사용자의 전자우편 클라이언트 프로그램)는 편지의 제목과 송신자를 보고, 메일을 실제로 다운로드할 것인지를 결정할 수 있다. 사용자는 서버에 폴더나 우편함을 만들거나 관리할 수 있으며, 메시지를 지우거나 메시지의 일부 또는 전체의 내용에 대해 검색을 수행할 수 있다. IMAP은 사용자의 메일을 송수신하기 위해 업무시간 중에 지속적으로 서버에 액세스해야한다.

좀더 덜 복잡한 프로토콜이 POP3이다. POP3를 이용하면 사용자 메일이 서버에 있는 우편함에 저장된다. 사용자가 메일을 읽을 때 즉시 사용자의 컴퓨터로 다운로드되며, 서버에는 더 이상 남아있지 않게 된다.

IMAP은 원격 파일서버라고 생각할 수 있으며, POP은 "저장 및 전달"서비스를 수행한다고 생각할 수 있다.

POP과 IMAP은 전자우편의 수신을 담당하므로, 인터넷상의 각 지점으로 전자우편을 전송하는 프로토콜인 SMTP와 혼동하지 말아야한다. 송신측에서 SMTP를 이용하여 메일을 보내면, 상대방의 메일관리자는 수신인을 대신해서 그 메일을 받아놓는다. 그후 수신인은 그 메일을 POP이나 IMAP을 이용하여 읽을 수 있게된다.


'OS > 리눅스 & 유닉스' 카테고리의 다른 글

SVN 서버 설정  (0) 2014.11.03
방화벽 오픈/해제  (0) 2014.11.03
큐메일  (0) 2014.09.18
리눅스 명령어 모음  (0) 2012.07.05
POSIX Semaphore & System V Semaphore  (0) 2012.06.01
: