Book/COMPUTER NETWORKING A TOP-DOWN-APPROACH

CH2_Application Layer(2.3~2.4)

S0LL 2024. 10. 14. 00:26

2.3 Electronic Mail in the Internet

-사용자는 user agent 를 통해 이메일을 작성, 전송, 읽기 등의 작업을 한다.

  ex) Outlook, Gmail, Apple mail 등등

 

- 사용자가 메일을 작성하면 이는 송신자의 Mail Server로 전달된다.

 

Mail Server

outgoing message queue를 통해 발신되는 이메일을 관리한다.

종류

1. SMTP client 

2. SMTP server

 

SMTP Protocol

TCP기반의 프로토콜로 송신메일서버와 수신메일서버 간 메일을 전송하는 데 사용된다.

 

이메일 전송 과정

1. 이메일 전송버튼을 누르면 클라이언트의 user agent가 클라이언트의 메일서버로 보낸다.

2. 메일서버는 이 메세지를 outgoing message queue에 저장하고 SMTP클라이언트를 통해 새로운 메일서버로 전송시도.

3. 메세지가 수신자의 메일서버로 도착하면 수신자의 메일박스에 메세지 저장.

4. 수신자가 메세지를 확인할 때, 수신자의 user agent가 메일서버에 접속해 메세지 받아옴.

 

 

2.3.1 SMTP

SMTP동작과정

1. **발신자(클라이언트)**가 이메일을 작성한 후, 이메일을 자신의 메일 서버로 보낸다

2. 발신자의 메일 서버는 메시지를 큐에 저장하고, 이를 수신자(서버) 메일 서버로 보낼 준비

3. 발신자의 메일 서버는 수신자의 메일 서버로 TCP 연결을 설정하여 SMTP 세션을 시작

4. 수신자의 메일 서버가 연결을 승인하면, 발신자의 서버는 메일을 전송하고 수신자의 서버는 이를 받아 저장

5. 수신자는 자신의 이메일 프로그램을 통해 메일 서버에 접속하여 메일을 확인하고 읽는다.

앨리스와 밥의 통신 예시.

1. Alice가 이메일을 작성하여 Bob에게 전송

	•Alice는 이메일을 작성한 후, bob@someschool.edu로 이메일을 보낼 준비
	•이메일 클라이언트(예: Microsoft Outlook, Gmail)는 Alice의 메일을 자신의 메일 서버에 전송

2. Alice의 메일 서버가 메시지를 큐에 저장

	•Alice의 이메일은 Alice의 메일 서버에 도착하여 메시지 큐에 저장
	•이 시점에서 Alice의 메일 서버는 SMTP 클라이언트 역할을 하며, Bob의 메일 서버와 통신을 시작할 준비

3. Alice의 메일 서버가 Bob의 메일 서버와 TCP 연결을 설정

	•Alice의 메일 서버는 SMTP 프로토콜을 사용하여 Bob의 메일 서버와 **TCP 연결(포트 25)**을 설정
	•만약 Bob의 메일 서버가 응답하지 않으면, Alice의 메일 서버는 주기적으로 재시도

4. SMTP 핸드셰이킹 및 이메일 전송

	•SMTP 핸드셰이킹이 이루어진 후, Alice의 메일 서버가 Bob의 메일 서버에 이메일을 전송
	•Alice의 메일 서버는 Bob의 메일 서버에게 보낼 이메일의 발신자 주소(alice@someschool.edu)와 수신자 주소(bob@someschool.edu)를 전달
	•Bob의 메일 서버는 이를 받아들인 후, Bob의 메일박스에 메시지를 저장

5. Bob이 이메일을 확인

	•Bob은 자신의 메일 클라이언트(예: Outlook 또는 Gmail)로 Bob의 메일 서버에 접속하여 Alice가 보낸 이메일을 다운로드해 읽을 수 있다

 

SMTP통신예시

1.서버 응답 (Bob의 메일 서버에서 오는 응답)
S: 220 hamburger.edu

2.클라이언트가 HELO 명령어로 인사 (Alice의 메일 서버가 서버에 인사)
C: HELO crepes.fr

3.서버 응답 (서버가 인사에 대한 응답)
S: 250 Hello crepes.fr, pleased to meet you

4.클라이언트가 발신자 정보 전송 (Alice의 메일 서버가 Alice의 이메일 주소를 서버에 알림)
C: MAIL FROM:<alice@crepes.fr>

5.서버 응답 (서버가 발신자 정보를 확인)
S: 250 alice@crepes.fr ... Sender ok

6.클라이언트가 수신자 정보 전송 (Alice의 메일 서버가 Bob의 이메일 주소를 서버에 알림)
C: RCPT TO:<bob@hamburger.edu>

7.서버 응답 (서버가 수신자 정보를 확인)
S: 250 bob@hamburger.edu ... Recipient ok

8.클라이언트가 메시지 전송 시작 (Alice의 메일 서버가 본문 전송 시작)
C: DATA
S: 354 Enter mail, end with "." on a line by itself

9.메시지 전송 (Alice의 메일 서버가 메시지 본문을 전송)
C: Do you like ketchup?
C: How about pickles?
C: .

10.서버 응답 (메시지 수신 및 저장 완료)
S: 250 Message accepted for delivery

11.클라이언트 연결 종료 (SMTP 세션 종료)
C: QUIT
S: 221 hamburger.edu closing connection

 

 

2.3.2 Mail Message Formats, 2.3.3 Mail Access Protocols

 

이메일 통신 과정 예시.

1. SMTP

•Alice의 사용자 에이전트가 SMTP 또는 HTTP 프로토콜을 사용하여 이메일을 Alice의 메일 서버에 보낸다.
•Alice의 메일 서버는 SMTP 클라이언트로 작동하여 Bob의 메일 서버로 메시지를 전달한다.
•SMTP 클라이언트는 Bob의 메일 서버와 연결을 설정하고, 메시지를 Bob의 서버에 저장한다.

2. HTTP or IMAP

Bob의 사용자 에이전트는 HTTP 또는 IMAP을 사용하여 자신의 메일 서버에 접속하여 메시지를 다운로드하거나 관리한다.
IMAP(Internet Mail Access Protocol)은 이메일을 읽고 삭제하는 등의 기능을 제공

 

Header

헤더 뒤에 빈 줄이 있고 그 뒤에 본문이 들어간다.

 

 

 

2.5 DNS-The Internet's Directory Service

DNS에서 중요한 두가지 개념은 hostname, IP address 이다.

DNS는 호스트이름을 네트워크에서 통신할 수 있는 숫자형태의 IP주소로 변환해준다.

 

DNS의 주요 기능

1. 호스트 이름 해석 
사용자가 호스트 이름을 입력하면, DNS 서버는 이를 해당하는 IP 주소로 변환하여 반환

2. 별칭(Aliasing)
호스트 별칭: 긴 호스트 이름을 짧게 만들기 위해 별칭을 사용한다.
          예를 들어 www.example.com이라는 긴 호스트 이름 대신 example.com 같은 별칭을 사용할 수 있다.
메일 서버 별칭: 메일 서버의 복잡한 호스트 이름도 별칭을 통해 간단하게 표현할 수 있다.
             예를 들어, relay1.mail.example.com 대신 mail.example.com 같은 별칭을 사용할 수 있다.

3. 부하 분산
DNS는 트래픽이 많은 사이트의 부하를 여러 서버로 분산시킨다.
예를 들어 CNN과 같은 대형 웹사이트는 여러 서버를 운영하면서 같은 이름에 대해 여러 IP 주소를 할당받아 처리한다.

 

DNS 동작방식

일반적으로 UDP프로토콜을 사용하며 53번 포트를 통해 전송됨.

1.클라이언트 측 DNS: 사용자가 웹사이트 주소를 입력하면, 클라이언트 측 DNS 애플리케이션이 호스트 이름을 추출
2.DNS 서버 쿼리: 클라이언트는 추출한 호스트 이름을 DNS 서버로 전송하여 IP 주소를 요청
3.응답: DNS 서버는 해당 호스트 이름에 매칭되는 IP 주소를 클라이언트로 반환
4.웹 서버 접속: 클라이언트는 반환된 IP 주소를 사용하여 웹 서버에 접속
1.애플리케이션의 호출
웹 브라우저와 같은 애플리케이션이 호스트 이름을 IP 주소로 변환해야 할 때, 
애플리케이션은 DNS를 호출하여 변환을 요청 (예: gethostbyname() 함수를 호출하는 방식)

2.쿼리 전송
DNS 클라이언트는 네트워크를 통해 DNS 서버로 쿼리 메시지를 보낸다.
이 메시지는 UDP 데이터그램으로 포트 53을 통해 전송되며, 응답은 같은 방식으로 돌아옴

3.응답 수신
DNS 서버는 요청된 호스트 이름의 IP 주소를 찾아서 DNS 클라이언트로 전송.
클라이언트는 해당 IP 주소를 애플리케이션에 전달하고, 이후 TCP 연결 등을 설정하여 통신을 진행

DNS서버 계층구조

루트 DNS 서버: 전 세계적으로 분산된 최상위 레벨의 DNS 서버로, 다른 DNS 서버의 주소를 가리킴
톱 레벨 도메인(TLD) 서버: .com, .org, .net 등의 도메인에 대한 정보를 가지고 있는 서버
권한 있는 네임서버(Authoritative Name Server): 실제로 특정 도메인에 대한 IP 주소 정보를 가지고 있는 서버

 

DNS중앙집중형 설계 문제점.

단일 장애점(SPOF)
DNS 서버가 다운되면 모든 요청이 중단됨.

트래픽 볼륨
전 세계의 DNS 쿼리를 한 서버가 모두 처리해야 하므로 매우 많은 트래픽이 발생

지리적 거리
모든 요청이 먼 거리를 이동해야 하므로 지연이 생긴다.

유지 보수
단일 서버에 모든 호스트에 대한 기록을 저장하려면 매우 큰 데이터베이스가 필요하고, 지속적으로 업데이트되어야 함.

 

분산형, 계층형 데이터베이스

DNS는 위의 문제점을 해결하기 위해 분산된 계층형 구조를 사용한다.

서버의 종류

1.루트 DNS 서버
전 세계에 1000개 이상의 루트 서버가 있으며, 최상위 도메인 서버로의 경로를 제공

2.최상위 도메인(TLD) 서버
.com, .org, .edu와 같은 도메인에 대한 정보를 제공하며,
해당 도메인에 속한 사이트들의 권한을 가진 DNS 서버로 연결해준다.

3.권한있는(authoritative) DNS 서버
각 조직이나 도메인에 대한 최종 IP 주소를 보유한 서버

 

 

DNS쿼리 과정

1.클라이언트가 www.amazon.com과 같은 주소의 IP를 얻기 위해 로컬 DNS 서버에 요청을 보낸다.

2.로컬 DNS 서버는 루트 서버에 질의하여 TLD 서버의 주소를 얻는다.

3.TLD 서버는 해당 도메인의 권한있는 DNS 서버 주소를 로컬 DNS 서버로 응답한다.

4.로컬 DNS 서버는 권한있는 DNS 서버에 IP 주소를 요청하여 응답받는다.

이 과정을 통해 클라이언트는 www.amazon.com의 IP 주소를 알게 되고, 그 IP로 연결을 시도

 

 

DNS caching

캐싱의 예
apricot.nyu.edu 호스트가 cnn.com에 대한 IP 주소를 질의했을 때,
DNS 서버가 이를 캐시에 저장.
몇 시간 후, kiwi.nyu.edu가 동일한 호스트 이름을 요청하면,
DNS 서버는 캐시된 정보를 사용하여 즉시 응답할 수 있다.

캐시 시간(TTL)
캐시는 영구적인 정보가 아니며 일정 시간이 지나면 정보가 만료. 보통 캐시된 정보는 2일 후 삭제.

효과
캐시는 DNS 트래픽을 줄이고, 성능을 개선하는 데 중요한 역할을 한다.

 

 

DNS Records

리소스 레코드(RR)
DNS 서버는 여러 종류의 리소스 레코드를 저장하며, 이 정보들은 (Name, Value, Type, TTL) 형태로 저장.

Type A
Name 필드에 호스트 이름이 있고, Value 필드에는 해당 호스트 이름에 대한 IP 주소가 저장된다.
일반적으로 가장 기본적인 DNS 레코드이다.

Type NS
Name 필드에 도메인 이름이 있고, Value 필드에는 해당 도메인의 권한 있는 네임서버가 저장.

Type CNAME
Name 필드에 별칭(host alias)이 있고, Value 필드에는 해당 별칭의 정식(host canonical) 이름이 저장.

Type MX
Name 필드에 도메인 이름이 있고, Value 필드에는 메일 서버의 정식 이름이 저장.
메일 서버가 어떤 IP 주소에서 동작하는지 알려준다.

 

DNS Messages

Header Section
메시지의 처음 12바이트. 
여기에는 메시지 식별자(ID), 플래그(쿼리인지 응답인지 여부, 권위 있는 응답 여부 등), 각 섹션의 항목 수가 포함됨.

Question Section
질의하는 호스트 이름과 질의 유형(A, MX, NS 등)에 대한 정보가 포함됩니다.

Answer Section
응답이 들어오면 이 섹션에 질의한 호스트 이름의 IP 주소나 메일 서버 정보가 담겨 있다.

Authority Section
권위 있는 네임서버에 대한 정보가 포함되어 있습니다.

Additional Section
추가적인 정보가 포함. 예를 들어, 메일 서버를 위해 추가적인 A 레코드를 제공할 수 있다.

 

 

Inserting Records into the DNS Database

DNS에 레코드 추가하기
예를 들어 새로운 도메인 이름을 등록할 때, 등록 기관(registrar)이 도메인 이름을 DNS 시스템에 추가한다.

예시로 networkutopia.com이라는 도메인을 등록하면, 해당 도메인의 네임서버와 IP 주소가 DNS 시스템에 추가됨

등록 시 필요한 정보
networkutopia.com의 경우 NS(Type NS) 레코드와 A(Type A) 레코드가 추가된다.
예시로 네임서버는 dns1.networkutopia.com, 해당 네임서버의 IP 주소는 212.212.212.1이다.

 

 

DNS Vulnerabilities

DNS 공격
DNS는 인터넷에서 중요한 역할을 하기 때문에 공격 대상이 될 수 있다.
특히 DDoS(분산 서비스 거부) 공격이 대표적이다.

DDoS 공격
대규모 트래픽을 유발하여 DNS 서버를 무력화시키는 방식.
예를 들어 2002년과 2016년에는 DNS 서버를 대상으로 한 대규모 DDoS 공격이 발생했으며,
특히 2016년 Dyn 서버 공격은 Amazon, Twitter, Netflix 등 주요 서비스에 영향을 미쳤다.

DNS 스푸핑 및 포이즈닝
DNS 쿼리를 가로채거나, 가짜 DNS 응답을 통해 잘못된 정보를 클라이언트에 전달하는 방식의 공격도 있다.

DNSSEC
이러한 공격에 대비하여 DNSSEC(DNS Security Extensions)이 개발되었다.
DNSSEC은 DNS 정보의 무결성을 검증할 수 있게 하여, 잘못된 정보가 전달되는 것을 방지한다.

 

 

DNS Verification Example

DNS 확인 예시
networkutopia.com의 웹사이트를 확인하려는 시나리오를 통해 DNS 시스템이 어떻게 동작하는지 설명한다.

과정
Alice가 웹사이트 www.networkutopia.com에 접속하려고 할 때, 
로컬 DNS 서버가 TLD 서버와 권위 있는 DNS 서버를 통해 해당 웹사이트의 IP 주소를 얻는다.

DNS 쿼리와 응답 과정
Alice의 로컬 DNS 서버는 212.212.212.1과 같은 IP 주소를 얻고,
Alice의 브라우저는 해당 IP 주소로 TCP 연결을 설정한 후 HTTP 요청을 보낸다.