일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 네이버클라우드
- 3D프린터입문
- 코틀린개발환경
- C언어
- Token인증방식
- git
- nas
- IoTNetwork
- octoprint
- Notification
- github
- docker
- OnlineIDE
- NAS HDD교체
- Jenkins
- docker container
- gitlab
- 3D모델링
- 3D프린터
- 3D프린터 입문
- 3d프린터 초보
- Kotlin
- ci/cd
- linux job
- kubernetes
- 3D
- 3D 프린터 용어
- 리눅스 파일동기화
- data serialization formats
- 데이터 직렬화 포맷
- Today
- Total
0과 1을 공부하다.
[E-Mail] 이메일 시스템 구조 및 용어 정리 본문
본 게시물에서는 이메일 시스템의 송/수신 구조 및 용어 정리에 대해 작성한다.
참고 사이트
이메일 시스템 구조
가. 구조
- User Agent: 사용자 장치에서 메일 작성, 읽기, 관리 기능 수행. (or A.K.A Client).
- Mail Server: 다수 사용자들의 메일박스 관리, 메일 송/수신 제어.
- SMTP(Simple Mail Transfer Protocol): 메일 전송 프로토콜.
- MUA(Mail User Agent): 메일을 작성하여 보내는 프로그램(데몬).
- MTA(Mail Transfer Agent): 이용자로부터 메일을 받아서, 외부로 전달하는 프로그램(데몬).
- MDA(Mail Delivery Agent): MTA로부터 분리된 메일을 사용자에게 전달하는 프로그램
나. 이메일 전송 과정
순 번 | 내 용 |
① | 송신자 User Agent에서 메일 작성 후 메일 서버로 전달. |
② | 송신자 메일 서버의 출력 메시지 큐(Outgoing Message Queue)에 저장 |
③ | 수신자 메일 서버로 전송 |
④ | 전송 불가시 30분 단위로 재전송 시도, 정해진 기간 동안 전송 불가시 중단 및 송신자에게 통보 |
⑤ | 수신자 메일 서버의 수신자 메일박스(Mailbox)에 저장 |
⑥ | 수신자 User Agent에서 메일 서버의 메일박스의 메일 읽기 및 관리 |
이메일 송/수신 프로토콜
가. SMTP(Simple Mail Transfer Protocol)
: 이메일을 송신할 때 사용하는 프로토콜.
(1) 전송 대상
- 클라이언트가 작성한 메일을 서버로 전송할 때 (클라이언트 to 서버)
- 인터넷을 통해 서버 간 메일을 전송할 때 (서버 to 서버)
(2) TCP(port 25)를 사용하는 프로토콜.
(3) ASCII 텍스트를 전송하는 프로토콜
- 명령어 : ASCII 그래픽 문자 + 제어문자
- 메시지: ASCII 그래픽 문자 + 제어문자
(4) 8bit 이상의 데이터 전송방법
: 한글, 비디오, 이미지 등 ASCII가 아닌 것을 전송 할 때 MIME를 이용하여 ASCII로 변환 후 SMTP 프로토콜을 이용하여 전송함.
(5) MIME(Multipurpose Internet Mail Extension)
: 전자우편을 위한 인터넷 표준 포맷.
전자우편은 7Bit ASCII 문자를 이용해서 전송되기 때문에 8Bit 이상의 코드를 사용하는 문자, 이진파일은 MIME 포맷으로 변환하여 SMTP로 전송되어야 함.
- BASE 64 Encoding 방식을 이용함.
- BASE 64는 0 ~ 9, a ~ z, A ~ Z, +, / 64가지로 이뤄짐.
아래는 ASCII 문자를 MIME(BASE64) 포맷으로 변경하는 절차이다.
① 아스키 문자를 10진수를 패리티 비트가 포함된 2진수 형태(8bit)로 변환
Text content | M | A | N |
ASCII | 77(10) | 97(10) | 110(10) |
bit pattern | 01001101(2) | 01100001(2) | 01101110(2) |
② 변환된 2진수를 6bit 단위로 끊어서 10진수(Base64 Index)로 표현 후 Base64 색인표에 따른 문자로 치환
bit pattern | 010011(2) | 010110(2) | 000101(2) | 101110(2) |
Base64 Index | 19 | 22 | 5 | 46 |
Base64 Encoded | T | W | F | u |
③ 만약 비트가 남으면 남은 비트를 0으로 추가하고 ‘=’기호로 추가됨. (# 0에 해당하는 ‘A’와는 다른 기호임.)
나. POP3(Post Office Protocol Ver.3)
: 이메일을 수신할 때 사용하는 프로토콜.
(1) 서버에 도착한 메일을 클라이언트로 가져올 때 사용.
(2) 서버에서 메일을 로딩 할 때 헤더와 본문을 모두 다운로드
- 헤더: 발신자 정보, 수신 서버 호스트 주소, 메일의 고유한 식별자와 메일 수신된 날짜 시간 등의 정보)
- 본문: 메일 본문 및 첨부파일을 포함한 실제 메일 내용
(3) 메일 로딩과 동시에 사서함에 있는 이메일이 삭제. (별도로 보존하는 것은 설정이 가능함.)
(4) 결과적으로 수신 받은 로컬PC에서만 열람이 가능하다는 특징이 있음.
다. IMAP(Internet Message Access Protocol)
: 이메일을 수신할 때 사용하는 프로토콜.
(1) 이메일 서버와 동기화 되는 방식으로 다른 기기에서 동일한 메일을 볼 수 있음.
(2) 수신자가 메일을 확인할 때 헤더부분만 보여주고 클릭했을 때 서버로부터 다운로드 하기 때문에 더 빠른 방법으로 메일 확인 가능.
(3) 단점으로 통신 트래픽증가 , 오프라인에서 확인 불가, 주기적인 용량관리 필요.
이메일 에이전트(qmail)
: 유닉스에서 실행되는 메일 전송 에이전트(MTA)
가. Sendmail을 대체하는 더 안전한 소프트웨어으로 C언어 기반으로 작성됨.
나. 프리 소프트웨어 라이센스이며, 소스코드는 이후 퍼블리 도메인으로 이동.
다. 프로세스 흐름
(1) 수신
- qmail-inject : 내부에서 메일이 메일서버로 온 경우
- qmail-smtpd : smtp 를 통해 외부에서 메일서버로 온 경우
(2) 대기열
- qmail-queue : 메일이 순차적으로 처리하기 위해 대기중인 공간
(3) 전송
- qmail-send : qmail-queue 을 검색하여 내부로 메일서버로 저장할지 할지/ 외부로 보낼지를 결정
- qmail-lspawn : 메일을 내부 디렉토리 maildir 로 저장하는 메세지
- qmail-rspawn : 메일을 외부 호스트 SMTP 서버로 보내는 메세지
(4) 삭제
- qmail-clean : 메일 메일 또는 lifetime 지난 메일을 지운다.
(5) 저장
- qmail-local : 로컬메일 내부 디렉토리 maildir
- qmail-remote : 외부 호스트 SMTP 서버
참고사이트
[1] https://www.youtube.com/watch?v=maNnhEw4bzk
[2] https://www.youtube.com/watch?v=maNnhEw4bzk
[3] https://qmail.auctionpro.co.kr/?page_id=37
[4] https://frody.tistory.com/13
※ 본 게시글의 정보가 잘못 되었거나 부족한 부분에 대한 피드백을 환영합니다.
* CopyRight 2022. Jay Park All rights reserved.
'Study > ETC' 카테고리의 다른 글
[E-Mail] 시놀로지(Synology) NAS를 이용한 메일서버 구축 (5) | 2022.07.04 |
---|---|
[E-Mail] 메일 보안 필터링 이론 정리 (0) | 2022.04.06 |
[Server] 서버 시설관리 수칙 (Data Center) (0) | 2022.02.04 |
[E-Mail] Telnet과 OpenSSL을 이용한 SMTP 메일 발송 (0) | 2022.02.03 |
[Math] 진법변환 (2진수, 8진수, 10진수, 16진수) (0) | 2021.09.27 |