반응형
SMALL
01 전자 메일 사용자 환경
- 메일 편집: 메시지를 새로 작성하거나, 수신 메일에 대해 회신하거나 수신 메일을 제3자에게 전달할 때 필요하다.
- 메일 내용 읽기: 수신한 메일의 내용이 일반 텍스트로 구성되었으면 메일 프로그램에서 제공하는 기본 기능을 이용해 읽을 수 있다.
- 수신 메일 관리: 수신한 메일을 별도의 메일 박스에 보관하고 관리할 수 있으며, 메일을 삭제하거나 파일 시스템에 보관할 수 있다.
- 전달 여부 통지: 전송한 메일이 수신자에게 제대로 수신되었는지에 대해 송신자에게 회신하는 용도이다.
- 메일 전달: 메일 송신자가 전송한 메일은 목적지 호스트까지 안전하게 전달되어야 한다.
1 메일 처리
<로그인 이름>@<메일 서버 이름>
🔼 전자 메일 주소 형식
- 로그인 이름: 호스트에 등록된 사용자 구분자
- 메일 서버 이름: 메일이 전송되는 최종 목적지 호스트의 DNS 이름
2 메일 형식
- 메일 내용은 메시지 헤더와 메시지 내용으로 구성되며, 공백 한 줄로 구분된다.
- 메시지 헤더: 메일 제목, 수신 날짜 등
- 메시지 내용: 메일 사용자가 전송한 데이터
헤더 | 의미 |
To | 수신자의 전자 메일 주소 |
CC | 참조 수신자의 전자 메일 주소 (메일 내용에 포함) |
BCC | 참조 수신자의 전자 메일 주소 (메일 내용에 미포함) |
From | 송신자의 이름 |
Sender | 송신자의 전자 메일 주소 |
Date | 송신자가 메시지를 전송한 시간 |
Subject | 간단하게 요약된 메시지 제목 |
🔼 사용자 헤더의 종류
- 일반 메일 사용자가 자주 접하고, 쉽게 이해할 수 있는 내용이다.
3 MIME (Multipurpose Internet Mail Extension)
MIME은 기존에 사용하던 ASCII 기반의 메시지 형식을 그대로 유지하면서, 메시지 내용에 멀티미디어 데이터 인코딩 방법을 추가로 정의한다.
- 인터넷으로 전송되는 모든 메일 데이터는 ASCII 형식으로 전송된다.
- MIME에 의한 멀티미디어 데이터의 지원은 송수신자의 양 끝단에서 이루어진다.
헤더 | 의미 |
MIME-Version | MIME 버전 |
Content-Description | 메시지 내용 설명 |
Content-Id | 구분자 |
Content-Transfer-Encoding | 전송 시 메시지 내용의 형식 (인코딩 방법 정의) |
Content-Type | 메시지 유형 |
🔼 MIME 헤더
- MIME은 다양한 종류의 메일 메시지를 표현하기 위해 5개의 헤더 필드를 정의한다.
타입 | 서브타입 | 설명 |
Text | Plain | 7비트의 ASCII 형식으로 정의 MIME 변환이 필요하지 않은 텍스트 데이터 |
Image | Gif | 정지 영상 정보를 전송하는 데 사용 |
Jpeg | ||
Audio | Basic | 음성 메시지 지원 |
Video | Mpeg | 동영상 정보 지원 |
Application | Octet-stream | MIME에서 직접 지원하지 않는 데이터 종류를 위해 정의 - Octet-stream: 단순히 바이트의 연속으로 해석됨 - PostScript: 어도비 사의 포스트스크립트 형식 지원 |
PostScript | ||
Message | Rfc822 | 메일 메시지에 다른 전자 메일을 포함시킬 때 사용 ex. 메일 포워딩 |
Partial | ||
External-body | ||
Multipart | Mixed | 메시지 내용에 독립적인 부분을 여러 개 포함하도록 지원 각 부분의 시작과 끝을 명확히 구분할 수 있어야 함 |
Parallel | ||
Digest | ||
Alternative |
🔼 MIME 데이터 종류
- 메시지의 데이터 종류를 구분하기 위한 Content-type 필드는 타입과 서브타입으로 나뉜다.
- <타입>/<서브타입;매개변수> 형식으로 표기한다.
02 전자 메일 시스템 구조
- 사용자 환경: 메일 내용을 읽고 편집하는 일을 담당하는 사용자 인터페이스
- 네트워크 환경: 네트워크 환경을 구성하는 메일 전송 에이전트는 인터넷에서 메일을 송수신하고 중개하는 기능 담당
1 사용자 에이전트(UA)
1.1 사용자 화면
- 현재는 그래픽 환경이 일반화되었다.
- 송신/수신 기능은 하나의 메일 프로그램으로 구현된다.
1.2 UA 사용자 프로그램 입력 정보
- 송신자의 메일 주소
- 수신자의 메일 주소
- 참조자의 메일 주소
- 메일의 메시지 헤더 : 메일 제목
- 메일의 메시지 바디 : 전송할 메일의 내용
2 메일 전송 에이전트(MTA)
2.1 MTA 정보 설정
- PC의 전자 메일 프로그램은 설치 과정에서 MTA 클라이언트와 MTA 서버에 관한 초기화 설정을 한다.
- 받는 메일 서버: POP 서비스를 통해 메일을 다운로드한다.
- 보내는 메일 서버: SMTP를 통해 전송 요청을 의뢰한다.
2.2 SMTP와 POP 서비스의 관계
- UA와 MTA의 연동을 위해 사용하는 SMTP와 POP 서비스 간의 관계이다.
- (b)처럼 메일 프로그램의 서버 정보에 설정된 POP 서버로부터 메일을 읽는다.
- 메일을 송신하려면 (a)처럼 SMTP 클라이언트 기능이 필요하다.
- 일반 환경을 기준으로 PC에서 실행되는 메일 프로그램은 송신용 UA 기능과 수신용 UA 기능이 함께 구현된다.
- 특정인 한 사람이 사용하는 메일 프로그램이라 가정하면 설정된 서버 정보의 MTA 클라이언트와 MTA 서버도 대부분 같은 호스트이다.
03 SMTP
1 SMTP의 구조
- SMTP는 메일을 전송하는 SMTP 클라이언트와 메일을 수신하는 SMTP 서버 사이의 데이터 전송에 대한 규칙을 다룬다.
- 명령과 응답의 교환 과정을 통해 메일을 전달한다.
- SMTP 서버에 대한 접근 가능성 확인, 서버와 연결 설정, 메일 전송이라는 단계를 순차적으로 진행한다.
2 SMTP의 명령과 응답
명령 | 의미 |
HELO + <송신자의 호스트 이름> | SMTP 세션을 시작하며, 송신자의 호스트 이름을 전송하여 서버에 자신의 신분을 알려준다. |
MAIL + <송신자의 메일 주소> | 송신자의 메일 주소를 통지한다. |
RCPT + <수신자의 메일 주소> | 수신자의 메일 주소를 통지한다. |
DATA + <메시지의 내용> | 메일 메시지를 송신한다. |
QUIT | 더 이상의 전송 메시지가 없음을 통지하여 SMTP 세션을 종료한다. |
RSET | 현재의 연결 상태가 종료되었음을 통지하고, 연결 재설정이 이루어진다. |
VRFY + <수신자의 메일 주소> | 수신자의 주소를 조회하려고 사용한다. |
NOOP | 수신자의 상태를 검사하려고 사용한다. |
🔼 SMTP 명령
응답 코드 | 의미 |
2yz | 긍정적 완료 응답 |
3yz | 긍정적 중간 응답 (추가 과정 필요) |
4yz | 임시 부정적 완료 응답 (향후 처리될 가능성 있음) |
5yz | 영구 부정적 완료 응답 |
🔼 SMTP 응답
3 연결 설정
3.1 명령과 응답
- TCP 연결 설정이 정상화되면, SMTP 세션의 연결 설정 절차가 진행된다.
- 25번 포트에서 대기 중인 SMTP 서버는 TCP 연결 요청이 들어오면 응답 코드 220을 회신하여 메일을 수신할 준비가 되었음을 통지한다. (준비되지 않았으면 421 응답)
- 응답 코드 220을 수신한 클라이언트는 HELO 명령과 함께 송신자의 호스트 이름을 전송한다.
- 수신자는 그에 대한 완료 코드 250을 전송함으로써 SMTP 세션 연결 절차가 완료된다.
3.2 시뮬레이션
- 클라이언트 호스트에서 'telnet information.uu.ac.kr 25' 명령을 입력하여 information.uu.ac.kr의 25번 포트인 SMTP 서버에게 연결을 시도한다.
- 연결이 성공하면 telnet 명령과 관련된 결과를 출력한다.
- SMTP 서버로부터 '200 information.uu.ac.kr ESMTP Sendmail 8.9.3....'의 응답 메시지를 수신하는데, 응답 코드 220을 수신하였으므로 정상적인 연결 설정 절차를 이어갈 수 있다.
- 사용자가 키보드로 'HELO kihyun.uu.ac.kr'을 입력함으로써, SMTP 서버에 HELO 명령과 송신자의 호스트 이름을 전송한다.
- 서버는 '250 information.uu.ac.kr Hello kihyun.uu.ac.kr .....'의 응답 메시지를 회신하여 SMTP 세션이 성공적으로 이루어졌음을 알린다.
- 왼쪽의 텔넷 프로그램이 SMTP 클라이언트를 대신한다.
- 텔넷 프로그램은 키보드의 입력을 SMTP 서버에 전달하고, SMTP 서버의 결과를 화면으로 출력하는 중개 기능만 수행한다.
4 데이터 전송
4.1 명령과 응답
- 메일 주소 확인: SMTP 클라이언트가 SMTP 서버에 송신자와 수신자의 메일 주소를 전달한다.
- 오류 상황: 해당 주소로 오류 내용을 회신 받는다.
- 성공: RCPT 명령을 이용해 수신자 메일 주소를 전송한다. (등록된 사용자면 긍정 응답)
- 메일 헤더 정보 전송: 사용자의 메일 헤더를 서버에 전송하기 위한 것이며, DATA 명령에 의해 시작된다.
- 메일 메시지 전송: 송신자의 메일 내용을 전송하는 단계이며, 메시지를 원하는 만큼 순차적으로 전송한다.
4.2 시뮬레이션
- 'MAIL FROM: park@kihyun.uu.ac.kr' 명령을 입력하여 송신자의 메일 주소를 서버에 통지한다.
- 이어서 RCPT 명령으로 수신자 메일 주소를 통지한다.
- 호스트 information.uu.ac.kr에는 park이라는 사용자가 등록되어 있지 않으므로 '550 park@information.uu.ac.kr... User unknown'이라는 오류 응답이 회신되었다.
- 2번째로 'RCPT TO: kihyun@information.uu.ac.kr` 명령을 전송한다.
- kihyun이라는 사용자는 서버에 등록되어 있기 때문에 정상적으로 처리된다.
- 이어서 DATA 명령을 전송해 메일의 헤더와 메시지를 전송할 수 있다.
- 마지막으로 점(.)을 전송해 메일 내용이 더 이상 없음을 통지하였다.
- 맨 마지막의 QUIT 명령은 SMTP 세션을 종료시킨다.
5 연결 해제
5.1 명령과 응답
- SMTP 클라이언트가 QUIT 명령을 전송하고, 그에 따른 SMTP 서버의 응답 코드 221을 회신하는 과정이다.
04 POP 서비스
1 POP와 SMTP
1.1 POP 서비스의 필요성
- 수신자에게 전송된 메일은 우측 하단의 POP 서버에 도착한다.
- 메일을 다운로드한 POP 클라이언트는 대부분 그래픽 환경이 제공되는 PC이므로, 사용자는 PC로 메일을 관리한다.
1.2 POP와 SMTP와의 비교
- 클라이언트와 서버 사이의 동작은 SMTP처럼 명령과 응답으로 이루어진다.
- POP 서버는 자신에게 할당된 Well-known 포트에서 POP 클라이언트와의 TCP 연결을 기다린다.
- SMTP는 25번 포트이고, POP 서비스는 110번 포트이다.
- SMTP 클라이언트가 서버와 연결하는 과정에서는 인증 절차가 필요없지만, POP 클라이언트가 POP 서버와 연결할 때는 로그인 이름과 암호를 입력하는 인증 절차를 거친다.
2 POP 명령과 응답
명령 | 의미 |
USER + <POP3 서버의 로그인 이름> | 사용자 인증 절차에 필요한 정보를 전송한다. (메일 주소의 로그인 이름) |
PASS + <POP3 서버의 로그인 암호> | 사용자 인증 절차에 필요한 정보를 전송한다. (로그인 이름의 암호) |
STAT | 로그인 사용자에게 POP3 서버에 보관된 메일 개수를 회신한다. |
LIST + <일련번호> | 일련번호를 생략하면 도착한 메일 정보를 일련번호와 함께 출력하고, 일련번호가 주어지면 해당 메일의 정보만 출력한다. |
RETR + <일련번호> | 일련번호에 해당하는 메일을 POP 서버로부터 읽어 들인다. |
DELE + <일련번호> | RETR 명령으로 읽어 들여 POP 서버에 그대로 보관된 메일을 삭제한다. |
QUIT | POP 세션을 종료한다. |
🔼 POP3 명령
응답 코드 | 의미 |
+OK | 요구한 명령을 성공적으로 처리했음을 의미한다. |
-ERR | 요구한 명령의 처리가 실패하였음을 의미한다. |
🔼 POP3 응답
3 POP 동작 시나리오
3.1 TCP 연결의 설정과 인증
- POP 서버로부터 +OK 긍정 응답이 회신되면 사용자 인증 절차에 들어간다.
- 인증 절차는 USER 명령으로 시작한다. 매개변수로 POP 서버에 등록된 로그인 이름을 전달하고, 서버에서는 정식으로 등록된 사용자인지 확인하여 결과를 회신한다.
- USER 명령을 성공적으로 처리하면 PASS 명령을 이용해 사용자의 로그인 암호를 전달한다.
- POP 서버는 암호가 올바른지 확인하여 성공, 실패 여부를 클라이언트에 회신한다.
- 인증 작업을 성공적으로 완료하면, STAT, LIST, RETR, DELE 등의 명령을 사용해 메일을 다운로드할 수 있다.
- POP 세션을 종료할 때는 QUIT 명령을 사용한다.
3.2 시뮬레이션
- 110번 포트에서 대기하던 POP 서버는 '+OK Qpopper (version 4.0.5) .....'의 응답을 회신하여 POP 세션이 정상적으로 진행됨을 통지한다.
- 이후 USER 명령으로 로그인 이름 'kihyun'을 전송한다. (인증절차)
- PASS 명령으로 로그인 암호 'kihyun0'을 전송한다. (인증절차)
- 성공적으로 인증되어 '+OK' 응답을 받았다.
- STAT 명령으로 총 35개의 메일이 있음을 알 수 있다.
Reference
쉽게 배우는 데이터 통신과 컴퓨터 네트워크
반응형
LIST
'독서 > 쉽게 배우는 데이터 통신과 네트워크' 카테고리의 다른 글
[쉽게 배우는 데이터 통신과 네트워크] CH17. 암호화와 네트워크 보안 (최종) (0) | 2024.06.23 |
---|---|
[쉽게 배우는 데이터 통신과 네트워크] CH16. 파일 전송 (0) | 2024.06.21 |
[쉽게 배우는 데이터 통신과 네트워크] CH14. DNS (0) | 2024.06.15 |
[쉽게 배우는 데이터 통신과 네트워크] CH13. 웹(WWW) (0) | 2024.06.14 |
[쉽게 배우는 데이터 통신과 네트워크] CH12. 소켓을 이용한 네트워크 프로그래밍 (0) | 2024.06.12 |