2. Application Layer (2)

728x90
반응형

3. Electronic mail (SMTP, POP3, IMAP)

전자 메일에는 3가지 요소(component)가 있다.

· user agents

· mail server

· 프로토콜 (그 중 대표적인 프로토콜인 SMTP, 메일 프로토콜의 standard임)

User Agent

쉽게 말해서 우리와 우리가 쓰는 어플리케이션이다.

우리가 작성한 메일이 SMTP를 통해서 서버들을 이동하고, 최종적으로 내가 보내는 사용자에게 메일이 도착하게 된다.

메일 서버는 크게 2가지로 구분된다.

· 메일 박스(mailbox) : 웹 서버 입장에서 여러 사용자들에게 오는 메일들을 보관하는 것

· 메시지 큐(message queue) : 이 때는 서버가 클라이언트가 되는데, 받은 메일을 큐에 넣은 뒤, 수신받아야 하는 사용자에게 보내주는 것

SMTP가 어떻게 동작하는지 예시로 봐보자.

앨리스가 밥에게 메시지를 보낸다고 해보자.

  1. 먼저 앨리스가 user agent를 사용해서 밥에게 보낼 메시지를 작성한다.
  2. 앨리스의 UA는 그녀의 메일 서버(ex. 앨리스가 네이버 메일을 쓰면 네이버 서버)로 메시지를 전송한다. 메시지는 메일 서버의 메시지 큐에 놓이게 된다.
  3. TCP를 이용해서 밥의 메일서버와 커넥션
  4. 앨리스의 메시지를 전송
  5. 밥의 메일 서버로 이동
  6. 밥의 메일 서버가 밥에게 메시지 전송

4. DNS

DNS란 영문/한글 주소를 IP 주소로 변환해주는 시스템이다.

인터넷 상에 연결되어있는 디바이스를 구분하기 위해서 IP 주소 체계가 성립됬다. 그런데 IP 주소는 기본적으로 2진수로 이루어져 있어서 사람들이 사용하기에 너무 불편하다는 문제가 있다. 그래서 4비트씩 짤라서 16진수로 표현을 하는데 그것조차 외우기 힘들다.

그래서 우리가 쓰는 영문으로 된 주소를 사용해서 이 주소를 IP 주소와 mapping을 해준다.

DNS 서버라는 것을 hierarchical organization을 마쳐서 만들어 놓고, 요청이 있을 때마다 정확한 IP 주소를 주도록 하는 것이다.

이 DNS 서버는 one to one 맵핑을 통해서 IP 주소를 찾아줄 수도 있지만, 가장 좋은 서버의 IP 주소를 찾아주는 기능 또한 존재한다.

예를들어, 미국의 CNN같은 경우에는 되게 많은 서버를 보유한다. 뉴욕에만 해도 많은 서버를 보유하고 있어서 수많은 IP 주소에 맵핑이 될 수 있다. 다 같은 www.cnn.com이지만 뉴욕에 있는 서버 중 가장 좋은 서버와 맵핑을 해줄 수 있다.

DNS 서버는 중앙집중화(centralize)를 해주면 안된다.

왜냐하면 그 서버가 고장 날 수도 있고, 트래픽이 집중될 수 있기 때문이다.

그래서 DNS 서버는 위 사진과 같이 hierarchical 하게 구성되어있다.

맨 위에 Root 서버가 있고 그 다음에 TLD가 있고, 그 밑에 티어가 있는 형태이다.

클라이언트가 서버의 IP 주소를 모른다면 처음에는 Root DNS 서버에게 물어보고 적합한 서버를 찾아가는 형식으로 동작한다.

이를 구현하기 위해, 전 세계를 13개의 local area로 나누고, 이 area 마다 루트 서버를 두었다.

각각의 Root 서버 밑에는 TLD(top-lavel domain)서버가 있고, 그 밑에는 authoritative DNS 서버가 있다.

그런데 사실 이렇게 여러번 찾아가는 방식으로 동작 안한다. 바로 로컬 DNS 서버를 둔다.

우리가 인터넷을 설치하면 해당 인터넷 회사(KT, SKT, LU U+ 등)가 책임지고 자기의 로컬 DNS 서버를 가지고 있고, 거의 대부분은 이 로컬 서버에서 처리한다.

내가 어떤 호스트에 접속하고 싶은데 이 호스트의 도메인 네임은 알지만 IP 주소를 모를 때 찾는 방법은 2가지가 있다.

· Iterated query

· recursive query

먼저 Iterated query 방식에 대해서 알아보자.

  1. 먼저 로컬 DNS 서버에게 query를 보낸다(로컬 DNS 서버에게 물어본다).(사실 이 로컬 DNS 서버도 굉장히 powerful 하기 때문에 거진 얘가 바로 알려준다. 하지만 우리는 굉장히 extreme 한 경우 즉, 이 로컬 DNS 서버가 해당 주소를 모를 때 어떻게 동작하는지를 알아보자.)
  2. 로컬 서버가 루트 서버에게 query를 보낸다(루트 서버에게 물어본다).
  3. 해당 주소를 담당하는 TLD DNS 서버의 주소를 리턴해준다.
  4. 그 TLD 서버에게 query를 보낸다.
  5. 해당 주소를 담당하는 authoritative DNS 서버의 주소를 리턴해준다.
  6. 그 authoritative DNS 서버에게 query를 보낸다.
  7. 최종적으로 내가 알고싶은 호스트의 IP 주소를 local DNS 서버에게 알려준다.
  8. local DNS 서버가 나에게 해당 호스트 IP 주소를 리턴해준다.

즉, 로컬 DNS 서버가 특정 서버들에게 반복적으로 query를 보내서 해당 IP 주소를 찾는 방식이다.

다음은 recursive query 방식에 대해서 알아보자.

recursive query 방식은 모든 것을 Root 서버가 책임지는 방식이다.

문제는 Root에 너무 많은 부하가 걸리게 된다.

로컬 DNS 서버가 모든 것을 관리하는데, 수많은 요청이 오고 해당 IP 주소들을 저장을 해놓는다.(IP 주소를 모르면 위에서 설명한 방식대로 IP 주소를 찾음)

그런데 문제는, 이 IP 주소가 계속 바뀐다(DHCP 방식으로 동작하니깐).

그래서 이 DNS 서버가 캐싱을 해놓은 주소가 일정 시간이 지나면 그냥 없애버린다.

그러면 다시 위에서 설명한 절차대로 IP 주소를 찾는다.

728x90
반응형

'Study > 네트워크' 카테고리의 다른 글

3. Transport Layer (2)  (0) 2023.06.14
3. Transport Layer (1)  (0) 2023.06.14
2. Application Layer (3)  (0) 2023.06.14
2. Application Layer (1)  (0) 2023.06.14
1. Introduction  (0) 2023.06.14