본문 바로가기
데이터 통신

[데이터 통신과 네트워킹] 응용층(FTP, E-mail)

by IT 정복가 2022. 11. 7.
728x90

FTP(File Transfer Protocol)

하나의 호스트에서 다른 호스트로 파일을 복사하기 위해 TCP/IP에 의해 제공되는 표준 프로토콜

HTTP를 사용하여 파일을 전송할 수 있지만, FTP는 큰 파일을 전송하거나 다른 형식을 사용한 파일을 전송할 경우에 장점이 있음

FTP 기본 모델

- 클라이언트사용자 인터페이스클라이언트 제어 프로세스, 그리고 클라이언트 데이터 전송 프로세스라는 세 가지 구성요소를 보유

-
반면 서버서버 제어 프로세스서버 데이터 전송 프로세스라는 두 가지 구성요소를 보유

-
제어 연결은 제어 프로세스 간에 만들어지고, 데이터 연결은 데이터 전송 프로세스 간에 설정

-
명령(command)과 데이터 전송의 분리는 FTP를 좀 더 효율적으로 사용할 수 있도록 만들어 줌

-
제어 연결은 매우 간단한 통신 규칙을 사용하는데, 한 번에 한 줄의 명령이나 응답을 전송하는 것이 필요할 뿐임

-
반면에 데이터 전송은 전송된 데이터의 유형이 여러 가지이기 때문에 좀 더 복잡한 규칙이 필요

제어 연결

제어 통신을 위해 FTP는 TELNET에서 사용되는 것과 같이 NVT ASCII 문자 집합을 사용

- 통신은 명령과 응답을 통해 완료됨

- 이 간단한 방법은 한 번에 하나의 명령(또는 응답)을 전송하기 때문에 제어 연결에 적합하고, 각 줄은 두 문자 [CR(Carriage Retum)과 LF(Line Feed)]로 된 EOL (end-of-line) 토큰으로 끝남

- 이 제어 연결이 연결된 동안, 명령은 클라이언트에서 서버로 보내지고 응답은 서버에서 클라이언트로 보내짐

- FTP 클라이언트 제어 처리에서 보내는 명령은 ASCII 대문자의 형태이고, 인수가 뒤따를 수도 있고 그렇지 않을 수도 있음

데이터 연결(Data Connection)

데이터 연결의 생성은 제어 연결과 다름

서버 쪽에서 데이터 연결은 잘 알려진 20번 포트를 사용
1.서버가 아니라 클라이언트는 임시 포트를 사용하여 수동 개방을 함
2. 클라이언트는 PORT 명령을 사용하여 서버에 이 포트 번호를 보냄
3. 서버는 포트 번호를 받고 잘 알려진 20번 포트와 수신된 임시 포트 번호를 사용하여 능동 개방을 수행
- 사용자는 데이터 연결을 통해 파일들을 전송하는 것임
- 클라이언트는 반드시 전송되는 파일의 종류와 데이터의 구조, 전송 모드를 정의해야 함
- 데이터 연결을 통해 파일을 전송하기 전에, 제어 연결을 통해 전송을 위한 준비를 진행
- 이질성 문제는 통신의 세 가지 특성인 파일 종류, 데이터 구조, 전송 모드를 정의하여 해결될 수 있음

파일 종류

FTP는 ASCII 파일 또는 이미지 파일이라는 파일 유형 중에 하나를 사용하여 데이터 연결을 통해 파일을 전송할 수 있음

데이터 구조

FTP는 파일 구조(file structure), 레코드 구조(record structure), 페이지 구조(page structure)라는 데이터 구조 해석 중의 하나를 사용하여 데이터 연결을 통해 파일을 전송할 수 있음

1) 파일 구조 형식(기본값으로 사용됨)의 경우는 구조가 없으며, 파일 구조 형식에서 파일은 연속적인 바이트의 흐름임

2) 레코드 구조에서 파일은 레코드들로 분할되며, 텍스트 파일에만 사용 가능

3) 페이지 구조에서 파일은 페이지들로 분할되며, 각 페이지는 페이지 번호와 페이지 헤더를 갖음

전송 모드

FTP는 스트림 모드(stream mode), 블록 모드(block mode), 압축 모드(compressed mode) 라는 전송 모드(transmission mode) 중에 하나를 사용하여 데이터 연결을 통해 파일을 전송할 수 있음

1) 스트림 모드는 기본 모드로써, 데이터는 연속된 바이트 스트림으로 FTP에서 TCP로 전달

2) 블록 모드에서, 데이터는 블록 단위로 FTP에서 TCP로 전달

FTP 사용하여 파일 가져오기 예


FTP를 위한 보안

- FTP 프로토콜은 보안이 큰 문제가 되지 않았을 때 설계되었음
- FTP가 비밀번호를 요구하더라도 비밀번호는(암호화되지 않은) 평문으로 보내지기 때문에, 이것은 공격자가 가로채서 사용할 수 있다는 것을 의미
- 데이터 연결도 안전하지 않은 평문으로 데이터를 전송
- 보안을 위한 하나의 방법으로 FTP 응용층과 TCP 계층 사이에 보안 소켓 계층(Secure socket layer)을 추가할 수 있는데, 이 경우 FTP는 SSL-FTP라고 함

전자우편(E-mail)

구조

- 앨리스와 밥은 3개의 에이전트, 즉 사용자 에이전트(UA, user agent), 메시지 전송 에이전트(MTA. message transfer agent), 메시지 접속 에이전트(MAA, massage access agent)를 이용

- 앨리스가 밥에게 메시지를 보낼 때, 그녀는 메시지를 준비하고 전자우편 서버에 전송하기 위해 UA 프로그램을 실행

- 그녀 측의 전자우편 서버는 전송 대기 중인 메시지를 저장하기 위해서 큐(스풀)를 이용하지만, 메시지는 MTA를 사용하여 앨리스 측에서 밥 측으로 인터넷을 통해 전송될 필요가 있음

- 여기에서 2개의 메시지 전송 에이전트(하나의 클라이언트와 하나의 서버)가 필요
 
- 밥 측의 사용자 에이전트는 밥이 수신된 메시지를 읽는 것을 제공

- 수신측(Bob) 입장에서 고려할 사항
1) 밥은 전자우편 서버를 우회하거나 직접적으로 MTA 서버를 이용할 수 없는데, 직접적으로 MTA 서버를 사용하기 위해서, 밥은 메시지가 언제 도착할지 모르기 때문에 항상 MTA 실행해야 되기 때문
 
2) 밥은 클라이언트-서버 프로그램의 또 다른 쌍(메시지 접속 프로그램)이 필요
 
- 전자우편 시스템은 2개의 UA, 두 쌍의 MTA(클라이언트와 서버)와 한 쌍의 MAA(클라이언트와 서버)가 필요

전자우편 전송

사용자는 전자우편을 전송하기 위해서 UA를 통해 일반 편지와 유사하게 보이는 전자우편을 생성

 

봉투메시지 형태

- 봉투는 보통 수신자의 주소, 수신자 주소와 기타 정보를 포함

 

메시지는 헤더본문을 포함

- 메시지의 헤더는 송신자, 수신자, 메시지의 제목과 기타 정보를 정의

- 메시지의 본문은 수령인이 읽는 실제 정보를 포함

전자 우편의 형식


주소

전자우편을 배달하기 위해 전자우편 처리 시스템은 유일한 주소를 갖는 주소 체계를 사용해야 함

인터넷에서 주소 체계는 @ 기호에 의해 구분되는 로컬 부분(local part)도메인 이름(domain name)으로 구성

전자우편 주소

- 로컬 부분은 사용자 편지함으로 불리는 특별한 파일의 이름을 정의

- 메시지 액세스 에이전트 (MAA)의 검색을 위해 사용자가 받은 모든 전자우편을 사용자 편지함에 저장

- 주소의 두 번째 부분은 도메인 이름

- 기관은 전자우편을 송수신하기 위해서 보통 하나 이상의 호스트를 선택하는데 이들은 때때로 전자우편 서버(mail server) 혹은 교환기(exchanger)로 불림

- 각 전자우편 교환기에 할당된 도메인 이름은 DNS 데이터베이스에서 가져온 것이거나 논리 이름(예를 들어, 기관의 이름)임

단순 메시지 전송 프로토콜(SMTP)

인터넷에서 MTA 클라이언트와 서버를 규정하는 공식적인 프로토콜은 단순 우편 전달 프로토콜 (SMTP, Simple Mail Transfer Protocol)
SMTP는 송신자와 송신자 전자우편 서버 사이, 그리고 두 전자우편 서버들 사이에서 총 두 번 사용
전자우편 서버와 수신자 사이에 또 다른 프로토콜이 필요
SMTP는 단지 명령과 응답들이 어떻게 송신되고 수신되어야 하는 지를 규정

전자우편에 사용된 프로토콜

SMTP는 명령과 응답을 사용하여 MTA 클라이언트와 MTA 서버 사이에 메시지를 전송
명령은 MTA 클라이언트에서 MTA 서버로 전송되고, 응답은 MTA 서버에서 MTA 클라이언트로 전송

각 명령 또는 응답은 두 문자[CR(Carriage Return)과 LF(Line Feed)]로 된 EOL(end-of-line) 토큰으로 끝남

 

명령

명령은 클라이언트에서 서버로 전송

명령은 키워드와 뒤에 따라오는 0 또는 그 이상의 인수로 구성

SMTP는 14개의 명령을 정의

SMTP 명령어

응답

응답은 서버로부터 클라이언트로 전송

응답은 세 자리 숫자의 코드로서 뒤에 추가적인 문자 정보가 따라올 수 있음

전자우편 전송 단계(Mail Transfer Phases)

메시지를 전송하는 과정은 연결 설정, 전자우편 전송, 연결 종료로 구성

 

연결 설정

클라이언트가 잘 알려진 포트 25로 TCP 연결을 생성한 후에, SMTP 서버는 연결 절차를 시작

1.서버는 전자우편을 받을 준비가 되었음을 클라이언트에게 말하기 위해 코드 220(service ready)을 전송하고, 서버가 준비되지 않았을 경우, 코드 421(service no available)을 전송

2.클라이언트는 자신을 식별하기 위해서 도메인 이름 주소를 이용하여, HELO 메시지를 전송하며, 이 단계는 클라이언트 도메인 이름을 서버에 알리기 위해서 필요

3.서버는 코드 250(request command completed)이나 상황에 따라 몇 가지 다른 코드를 응답

메시지 전송

SMTP 클라이언트와 서버 사이에 연결이 설정된 후에, 송신자와 하나 이상의 수신자들 사이에 하나의 메시지가 교환될 수 있음.

이 절차는 8단계를 포함
1.클라이언트는 메시지의 송신자를 알리기 위해서 MAIL FROM 메시지를 보냄
 
2.서버는 코드 250 (Request command completed)이나, 다른 적절한 코드로 응답

3.클라이언트는 수신자의 전자우편 주소를 포함하는 RCPT TO(Intended recipient) 메시지를 전송

4.서버는 코드 250이나 다른 적절한 코드로 응답

5.클라이언트는 메시지 전송을 초기화하기 위해서 DATA 메시지를 전송

6.서버는 코드 354(start mail input)이나 다른 적절한 메시지로 응답

7.클라이언트는 연속된 줄의 메시지 내용을 전송

8.서버는 코드 250(OK)이나 다른 적절한 코드로 응답

연결 종료

메시지가 성공적으로 전송된 후에 클라이언트는 연결을 종료

절차는 두 가지 단계를 포함
1.클라이언트는 QUIT 명령을 전송

2.서버는 코드 221 (Service closing transmission channel) 혹은 일부 다른 적절한 코드로 응답


메시지 엑세스 에이전트

현재 두 가지의 메시지 액세스 프로토콜을 사용할 수 있으며, 두 가지 프로토콜은 POP3(Post Office Protocol, version 3)와 IMAP4(Internet Mail Access Protocol, version 4)임

 

POP3

간단하지만, 기능상으로 제약이 있음

POP3는 삭제(delete) 모드와 유지(keep) 모드라는 두 가지 모드를 갖음

1) 삭제 모드에서는 전자우편을 읽고 난 후, 전자우편이 편지함에서 삭제
- 사용자가 고정된 컴퓨터에서 작업하면서, 수신된 전자우편을 읽거나 응답한 후에 저장할 수 있을 때는 보통 삭제 모드가 사용

2) 유지 모드에서는 전자우편을 읽고 난 후에도 유지
- 반면에 사용자가 주로 사용하는 컴퓨터에서 벗어나 있으면서(예를 들어, 노트북) 전자우편을 접근할 때는 보통 유지 모드가 사용
- 이때는 전자우편을 읽고 난 후에도 나중에 다시 읽고 저장하기 위해 시스템에 유지

IMAP4

IMAP4는 POP3와 비슷하나 더 많은 기능을 가지고 있고 더 복잡함

사용자는 전자우편을 내려 받기 전에 헤더를 검사할 수 있으며, 전자 우편을 내려 받기 전에 특정 문자열로 내용을 검색할 수 있음

사용자는 전자우편을 부분적으로 내려 받을 수 있어서, 전자우편이 큰 대역폭을 필요로 하는 멀티미디어를 포함하는 경우에 특히 유용

사용자는 전자우편 서버에서 편지함을 생성 또는 삭제하거나 이름을 변경할 수 있음

사용자는 전자우편 저장을 위해 폴더 내에 편지함들을 체계적으로 생성할 수 있음

MIME
MIME(Multipurpose Internet Mail Extension)은 전자우편을 통해서 ASCII가 아닌 데이터를 전송하기 위한 추가적인 프로토콜

MIME

MIME은 송신자 사이트에서 non-ASCII 데이터를 NVT ASCII로 변환하여 인터넷을 통해서 전송하기 위해서 클라이언트 MTA로 전달(SMTP로 전송)
수신부에서 메시지는 원본 메시지로 변환
그림처럼 non-ASCII 데이터를 ASCII 데이터로 변환하고, 그 역변환을 수행

 

MIME 헤더

변환 파라미터를 정의하기 위해서 원본 전자우편 헤더 부분에 추가될 수 있는 5개의 헤더를 정의

MIME 헤더

MIME-Version : 이 헤더를 사용한 MIME의 버전을 정의하고 현재 버전은 1.1

Content-ID : 이 헤더는 다중 메시지 환경에서 전체 메시지를 유일하게 식별

Content-Description : 이 헤더는 본문이 이미지, 오디오 혹은 비디오인지를 정의

Content-Type : 이 헤더는 메시지의 본문에서 사용된 데이터의 유형을 정의
- 콘텐츠 유형과 콘텐츠 하위 유형(subtype)은 슬래시로 구분
- 하위 유형에 따라 헤더는 다른 파라미터를 포함할 수 있음

Content-Transfer-Encoding : 이 헤더는 전송하기 위해 메시지를 0과 1로 부호화하는 방법을 정의
Base64 부호화
- 비트 스트링의 데이터는 그림에서 보이는 것처럼 먼저 6비트 덩어리로 나눠어지고, 각각의 6비트 덩어리는 ASCII 문자로 변환
- Base64는 중복 부호화(redundant encoding) 방법으로, 6비트는 ASCII 문자가 되고 8비트로 전송하며(26=64), 이것은 25%의 오버헤드를 발생시키는 방법임

작은 일부가 non-ASCII 문자이고, 대부분이 ASCII 문자로 구성된 데이터의 경우 QP 부호화(Quoted Printable encoding)를 사용
- QP 부호화에서 문자가 ASCII 코드이면, 그대로 전송하고, 문자가 ASCII가 아니면, 3개의 문자처럼 전송
- 처음 문자는 등호(=)이고, 다음 2개의 문자는 바이트의 16진수 표현
- 그림의 세 번째 문자는 첫 비트가 1로 시작하기 때문에 non-ASCII이고, 2개의 16진수(9D16)로 해석되고, 3개의 ASCII 문자(=, 9, D)로 대체됨
Base64 변환

 

QP 부호화

 

728x90