[지식창고]/네트워크

[컴퓨터 네트워크] 2.5 DNS (1)

개발새발주발 2023. 3. 29. 11:33
728x90

이전까지는 다소 딱딱한 설명을 통해 여러분을 맞이하였다. 

하!지!만! 들어가기에 앞서 이전포스팅에서 조금 아쉬운 부분에 대해 조금 더 쉽고 이해가는 방향으로 작성해보려고 한다 ~ 

 

DNS개념에 들어가기 전 잠시 정리하고 간다고 생각해주시길 바란다. 🍓


우리가 다른 컴퓨터로 데이터를 전송하기 위해서는 가장 먼저 데이터를 전송하는 프로그램이 보낼 데이터를 만드는 것이다. 

택배를 보낼때에도 택배를 보낼 물건과 대상이 있어야만 택배를 부치고 주소를 적고 택배를 받는것처럼 ! 

이렇게 데이터를 만드는 일을 하는 계층을 애플리케이션 계층이라고 한다. 

 

그리고 데이터가 준비되었으니 이제 보낼 준비를 해야한다~ 

그런데 어디로??????

이때 필요한 것이 주소다 ! 

 

일반적으로 네트워크상에서 주소는 크게 IP주소, 포트번호이다. 

* IP 주소 : 수신특 호스트가 갖는 유일한 주소

* 포트번호 : 일종의 애플리케이션이 사용하는 주소 

그런데.. IP주소는 컴퓨터에게는 쉽지만 우리에겐 어렵다 .. 휴대폰 8자리 숫자도 외우지 않는 세상에서 숫자로만 구성된 IP주소라니 ..

2진수에 취약한 인간들은 .. 그래서 IP주소 대신 이름으로 주소를 받게 되었다 ! 

 

바로 이렇게 ! 

프로토콜://접두어.이름.접미어 를 사용해서 사람이 좋아하는 형태로 만들게 되었다. 

http://www.naver.com

사랑해요 네이버 ! 

 

그런데 컴퓨터는 사람들과 반대로 2진수에 강하지만 이름에는 취약하다. 

결국 네트워크와 사람은 DNS로 원만한 합의를 보게 되었다!! 

 

DNS(Domain Name system)이란 마치 전화번호부와 같은 호스트 이름에 해당하는 IP주소를 알려주는 시스템이다. 

박재경  010-XXXX-0000 와 같이 

~.co.kr 203.238.XX.XX 유사한 DNS 테이블을 갖고 있는 것이다. 

 

그럼 이제 DNS에서 IP 주소를 어케 얻누 ?라는 질문이 나올 것이다. 

우선 호스트는 자기가 이름에 대한 IP주소를 가지고 있는지 확인한다. 

 

호스트 : 아 .. 이게 여기 어디 있었는데 .. 찾았다 ! 

만약 있다면 DNS에게 묻지 않고 변환한다.

( 모든 시스템에는 DNS 테이블이 있고 님들이 특정 IP 주소에 대해 이름을 부여하고 싶다면 님들 컴퓨터에 있는 DNS테이블을 수정하면 됩니다 ) 

 

호스트 : 어 그건 나한테 없어.. ㄱㄷ DNS에 물어볼게

만약 DNS테이블에 해당 이름에 대한 IP주소가 없다면 DNS에게 물어보게 된다 !

DNS는 마치 과거 114의 역할을 하게 되는 것 ( 요즘 아이들은 114를 알까? 이런 말을 하면 늙은이 같지만 오늘도 할미 소리를 들었답니다 ~ ) 

요청을 받은 DNS는 자신의 DNS테이블을 살펴본 후 있으면 바로 응답하지만 DNS테이블에 요청받은 주소 이름이 없는 경우 다른 DNS서버에게 요청하게 된다. 이때 DNS가 물어보는 다른 DNS를 찾는 과정을 자세히 배워보자 ~ ! 


 

1. DNS : Domain Name System 

 

위에서 언급했다시피 사람들은 이름에 익숙하다. 그래서 사람들이 서로를 식별할 때에는 이름 , SSN(미국의 주민등록증),passport등을 사용한다. 하지만 인터넷에서는 ? 

 

Internet hosts, routers: 

  • IP address (32bit) : datgrams 주소 지정 시 사용 
  • name (ex. www.naver.com) - 사람들에 의해 사용됨. 

이렇게 IP주소가 있고 name이 있다. 그런데 . . .

How to map IP address and name, and vice versa? → IP주소와 name을 어떻게 연결시키냐구 ! 

(사실 우리는 위 개론에서 다 살펴보았다)

이럴 때 필요한 것이 바로 Domain Name System, DNS ! 

 

Domain Name System:

DNS는 인터넷에서 이름과 주소를 서로 매핑하여 사용자가 도메인 이름으로 웹 사이트에 접속할 수 있도록 한다
  • distributed database
    DNS는 계층 구조로 구성된 많은 name server에 구현된다. 
  • application-layer protocol 
    호스트와 이름서버가 통신하여 이름을 해결(주소/이름 변환)
    - 이는 애플리케이션 계층 프로토콜로 구현
    - 네트워크의 'edge'에서 복잡성이 존재 

 

DNS services 

  • 호스트네임을 IP주소로 변환 
  • 호스트 별명(aliasing)제공
    → 하나의 호스트 이름에 여러개의 별명을 부여할 수 있음 
  • 메일 서버 별명 제공 
  • load distribution (로드 분산)
    → 로드분산 : 여럭개의 웹 서버가 하나의 이름에 대응될 수 있도록 하는 것을 의미 → 사용자가 웹 사이트에 액세스할 때, 서버 부하를 균형있게 분산시켜 서버 응답 시간을 개선할 수 있음 

 

2. DNS structure 

 

why not centralize DNS ? 

탈 중앙화 ( not centralize )
  • single point of failure : 하나가 망가지면 서비스 마비 
  • traffic volume : 트레픽이 많아 한 곳으로 몰리면 어려움 
  • distant centralized database : 중앙 데이터베이스와의 거리 
  • maintenance : 유지보수의 어려움 

→ doesn't scale ! 

중앙화를 하면 DNS의 규모를 자유자제로 확대, 축소가 어려움 ! 

 

distributed, hierarchical database 

분산 데이터베이스 시스템으로 구성 , 계층 구조로 구성된 DNS

 

사진 출처 : https://ssudalim.tistory.com/4

 

 

클라이언트는 www.amazon.com 의 IP주소를 원한다 ! 

① 클라이언트는 최상위 레벨의 root DNS서버에 'com' DNS서버를 물어본다
② 클라이언트는 '.com' DNS 서버에서 amazon.com DNS서버를 받아온다
③ 클라이언트는 amazon.com DNS서버에 www.amazon.com 의 IP주소를 물어본다 

이렇게 DNS를 통해 도메인 이름에 대한 IP주소를 찾아서 사용자는 인터넷에 연결된 호스트(서버)에 접속할 수 있다. 

 

1. Root DNS 서버 

로컬 네임 서버가 특정 도메인 이름을 해석할 수 없는 경우 contact !

 

  • 인터넷의 DNS 계층 구조의 최상위 노드 
  • 모든 DNS 질의의 시작점 
  • 루트 DNS 서버는 모든 최상위 도메인 서버의 IP 주소를  가지고 있다. 
DNS 동작 과정 
- DNS가 서버에 대한 해당 도메인 이름에 대한 IP주소를 모르는 경우 DNS는 'contacts authoritative name server if name mapping not known'와 같은 메세지 반환 
- 이 경우 질의를 하위 DNS서버가 아닌 권위 있는 이름 서버(authoritative name server)에 전달
- 권위 있는 이름 서버는 해당 도메인 이름에 대한 IP 주소 정보를 가지고 있으므로 질의한 DNS 서버에게 IP주소 정보를 반환 
- 질의한 DNS 서버는 이른 'returns mapping to local name server'와 같은 메세지와 함께 로컬 네임 서버에게 반환 

 

 

2. 최상위 도메인 (TLD)서버 

Top Level Domain server 
  • 최상위 도메인 (.com, .net, .org, .edu, .jobs / 모든 나라 도메인 kr, fr, us, jp 등 )을 관리하는 서버 
  • 각각의 최상위 도메인 서버는 해당 도메인의 하위 도메인 서버의 IP주소를 가지고 있다. 

 

3. 권한있는(authoritative) DNS 서버

 

  • 도메인 이름에 대한 IP주소 정보를 가지고 있는 DNS 서버 
  • 각 도메인은 하나 이상의 권한 있는 DNS서버를 가지고 있다. 
    → organization은 자신이 사용하는 호스트들의 호스트 이름과 IP주소 간의 매핑 정보를 가지고 있으며 이를 권위 있는 이름 서버로서 제공한다. 이를 통해 클라이언트는 조직 내부의 호스트에 대한 이름 해결을 수행할 수 있다. 
  • organization은 이를 자체적으로 제작하거나 서비스 제공업체로부터 구매할 수 있다 ! 

 

4. Local DNS name server 

  • DNS 계층 구조(hierarchy)에 엄격하게 속하지는 않는다. 
  • 각각의 ISP(회사, 대학교, 인터넷 서비스 제공업체(ISP))는 하나의 서버를 가지고 있다 
    → 이 서버는 '기본 이름 서버(default name server): 제일 먼저 접속하는 서버 역할' 로도 불린다
  • 호스트가 DNS 쿼리를 실행하면, 해당 쿼리는 호스트의 Local DNS 서버로 전송된다.
    → Local DNS name 서버는 최근의 이름- 주소 변화 쌍을 로컬 캐시에 저장하여 사용된다. (하지만 오래됨에 주의 !)
    → Local DNS name 서버는 프록시 역할을 하며 쿼리 계층 구조로 전달한다. 

 ** 프록시 (Proxy) : 대리인, 대리인 역할을 하는 것 → 네트워크에서 프록시 서버는 클라이언트의 요청을 대신 받아서 서버로 전달하거나 서버의 응답을 대신 받아서 클라이언트로 전달 

 

 

 

 

⚠️ 생각보다 길어져서 .. 2편으로 다시 오겠다. 

너무 길어지면 보기 싫은 나의 마음이 반영되었달까 .. 

1편에서는 DNS의 전체적인 틀과 구조, 기능 등에 대해서 살펴보았다. 

2편에서는 DNS name resolution에 대한 예시와 캐시, 리코딩, 프로토콜과 보안과 관련한 내용을 포스팅해보겠다 ~ ! 


 

[참고 및 출처]

https://gentlysallim.com/dns%EB%9E%80-%EB%AD%90%EA%B3%A0-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AD%94%EC%A7%80-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/

정기훈 「원리로 이해하는 네트워크 입문」 정보문화사 ,2003 

한국항공대학교 「컴퓨터 네트워크」 강의 자료