본문 바로가기

Computer Science/네트워크

[쉽게 배우는 데이터 통신과 네트워크] CH15. 전자 메일

반응형
SMALL

01 전자 메일 사용자 환경

  • 메일 편집: 메시지를 새로 작성하거나, 수신 메일에 대해 회신하거나 수신 메일을 제3자에게 전달할 때 필요하다.
  • 메일 내용 읽기: 수신한 메일의 내용이 일반 텍스트로 구성되었으면 메일 프로그램에서 제공하는 기본 기능을 이용해 읽을 수 있다.
  • 수신 메일 관리: 수신한 메일을 별도의 메일 박스에 보관하고 관리할 수 있으며, 메일을 삭제하거나 파일 시스템에 보관할 수 있다.
  • 전달 여부 통지: 전송한 메일이 수신자에게 제대로 수신되었는지에 대해 송신자에게 회신하는 용도이다.
  • 메일 전달: 메일 송신자가 전송한 메일은 목적지 호스트까지 안전하게 전달되어야 한다.

 

1 메일 처리

<로그인 이름>@<메일 서버 이름>

🔼 전자 메일 주소 형식

  • 로그인 이름: 호스트에 등록된 사용자 구분자
  • 메일 서버 이름: 메일이 전송되는 최종 목적지 호스트의 DNS 이름

 


2 메일 형식

  • 메일 내용은 메시지 헤더와 메시지 내용으로 구성되며, 공백 한 줄로 구분된다.
    • 메시지 헤더: 메일 제목, 수신 날짜 등
    • 메시지 내용: 메일 사용자가 전송한 데이터

 

헤더 의미
To 수신자의 전자 메일 주소
CC 참조 수신자의 전자 메일 주소 (메일 내용에 포함)
BCC 참조 수신자의 전자 메일 주소 (메일 내용에 미포함)
From 송신자의 이름
Sender 송신자의 전자 메일 주소
Date 송신자가 메시지를 전송한 시간
Subject 간단하게 요약된 메시지 제목

🔼 사용자 헤더의 종류

  • 일반 메일 사용자가 자주 접하고, 쉽게 이해할 수 있는 내용이다.

 


3 MIME (Multipurpose Internet Mail Extension)

MIME은 기존에 사용하던 ASCII 기반의 메시지 형식을 그대로 유지하면서, 메시지 내용에 멀티미디어 데이터 인코딩 방법을 추가로 정의한다.

 

MIME 구조

  • 인터넷으로 전송되는 모든 메일 데이터는 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 서비스의 관계

SMTP와 POP 서비스의 관계

  • UA와 MTA의 연동을 위해 사용하는 SMTP와 POP 서비스 간의 관계이다.
  • (b)처럼 메일 프로그램의 서버 정보에 설정된 POP 서버로부터 메일을 읽는다.
  • 메일을 송신하려면 (a)처럼 SMTP 클라이언트 기능이 필요하다.
  • 일반 환경을 기준으로 PC에서 실행되는 메일 프로그램은 송신용 UA 기능과 수신용 UA 기능이 함께 구현된다.
  • 특정인 한 사람이 사용하는 메일 프로그램이라 가정하면 설정된 서버 정보의 MTA 클라이언트와 MTA 서버도 대부분 같은 호스트이다.

 


03 SMTP

1 SMTP의 구조

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 명령과 응답

SMTP의 연결 설정

  • TCP 연결 설정이 정상화되면, SMTP 세션의 연결 설정 절차가 진행된다.
  • 25번 포트에서 대기 중인 SMTP 서버는 TCP 연결 요청이 들어오면 응답 코드 220을 회신하여 메일을 수신할 준비가 되었음을 통지한다. (준비되지 않았으면 421 응답)
  • 응답 코드 220을 수신한 클라이언트는 HELO 명령과 함께 송신자의 호스트 이름을 전송한다.
  • 수신자는 그에 대한 완료 코드 250을 전송함으로써 SMTP 세션 연결 절차가 완료된다.

 

3.2 시뮬레이션

SMTP 연결 설정의 시뮬레이션

  1. 클라이언트 호스트에서 'telnet information.uu.ac.kr 25' 명령을 입력하여 information.uu.ac.kr의 25번 포트인 SMTP 서버에게 연결을 시도한다.
  2. 연결이 성공하면 telnet 명령과 관련된 결과를 출력한다.
  3. SMTP 서버로부터 '200 information.uu.ac.kr ESMTP Sendmail 8.9.3....'의 응답 메시지를 수신하는데, 응답 코드 220을 수신하였으므로 정상적인 연결 설정 절차를 이어갈 수 있다.
  4. 사용자가 키보드로 'HELO kihyun.uu.ac.kr'을 입력함으로써, SMTP 서버에 HELO 명령과 송신자의 호스트 이름을 전송한다.
  5. 서버는 '250 information.uu.ac.kr Hello kihyun.uu.ac.kr .....'의 응답 메시지를 회신하여 SMTP 세션이 성공적으로 이루어졌음을 알린다.

 

텔넷 프로그램과 SMTP 서버의 연결 관계

  • 왼쪽의 텔넷 프로그램이 SMTP 클라이언트를 대신한다.
  • 텔넷 프로그램은 키보드의 입력을 SMTP 서버에 전달하고, SMTP 서버의 결과를 화면으로 출력하는 중개 기능만 수행한다.

 


4 데이터 전송

4.1 명령과 응답

SMTP의 데이터 전송

  • 메일 주소 확인: SMTP 클라이언트가 SMTP 서버에 송신자와 수신자의 메일 주소를 전달한다.
    • 오류 상황: 해당 주소로 오류 내용을 회신 받는다.
    • 성공: RCPT 명령을 이용해 수신자 메일 주소를 전송한다. (등록된 사용자면 긍정 응답)
  • 메일 헤더 정보 전송: 사용자의 메일 헤더를 서버에 전송하기 위한 것이며, DATA 명령에 의해 시작된다.
  • 메일 메시지 전송: 송신자의 메일 내용을 전송하는 단계이며, 메시지를 원하는 만큼 순차적으로 전송한다.

 

4.2 시뮬레이션

SMTP 데이터 전송의 시뮬레이션

  1. 'MAIL FROM: park@kihyun.uu.ac.kr' 명령을 입력하여 송신자의 메일 주소를 서버에 통지한다.
  2. 이어서 RCPT 명령으로 수신자 메일 주소를 통지한다.
  3. 호스트 information.uu.ac.kr에는 park이라는 사용자가 등록되어 있지 않으므로 '550 park@information.uu.ac.kr... User unknown'이라는 오류 응답이 회신되었다.
  4. 2번째로 'RCPT TO: kihyun@information.uu.ac.kr` 명령을 전송한다.
  5. kihyun이라는 사용자는 서버에 등록되어 있기 때문에 정상적으로 처리된다.
  6. 이어서 DATA 명령을 전송해 메일의 헤더와 메시지를 전송할 수 있다.
  7. 마지막으로 점(.)을 전송해 메일 내용이 더 이상 없음을 통지하였다.
  8. 맨 마지막의 QUIT 명령은 SMTP 세션을 종료시킨다.

 


5 연결 해제

5.1 명령과 응답

SMTP의 연결 해제

  • SMTP 클라이언트가 QUIT 명령을 전송하고, 그에 따른 SMTP 서버의 응답 코드 221을 회신하는 과정이다.

 


04 POP 서비스

1 POP와 SMTP

1.1 POP 서비스의 필요성

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의 동작

  • POP 서버로부터 +OK 긍정 응답이 회신되면 사용자 인증 절차에 들어간다.
  • 인증 절차는 USER 명령으로 시작한다. 매개변수로 POP 서버에 등록된 로그인 이름을 전달하고, 서버에서는 정식으로 등록된 사용자인지 확인하여 결과를 회신한다.
  • USER 명령을 성공적으로 처리하면 PASS 명령을 이용해 사용자의 로그인 암호를 전달한다.
  • POP 서버는 암호가 올바른지 확인하여 성공, 실패 여부를 클라이언트에 회신한다.
  • 인증 작업을 성공적으로 완료하면, STAT, LIST, RETR, DELE 등의 명령을 사용해 메일을 다운로드할 수 있다.
  • POP 세션을 종료할 때는 QUIT 명령을 사용한다.

 

3.2 시뮬레이션

텔넷 프로그램의 역할

 

POP 서비스 예의 시뮬레이션

  1. 110번 포트에서 대기하던 POP 서버는 '+OK Qpopper (version 4.0.5) .....'의 응답을 회신하여 POP 세션이 정상적으로 진행됨을 통지한다.
  2. 이후 USER 명령으로 로그인 이름 'kihyun'을 전송한다. (인증절차)
  3. PASS 명령으로 로그인 암호 'kihyun0'을 전송한다. (인증절차)
  4. 성공적으로 인증되어 '+OK' 응답을 받았다.
  5. STAT 명령으로 총 35개의 메일이 있음을 알 수 있다.

 


Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크

반응형
LIST