본문 바로가기

CS/Network

(Network) Domain Name System에 대해서

두대의 컴퓨터가 통신을 하기 위해서는 IP주소가 필수적으로 있어야 한다.

각각의 인터넷에 연결된 장치들을 Host라고 부른다. (네트워크에 연결되어있는 장치)

 

하지만 이러한 방식으로 IP 주소를 일일이 기억해서 접속하는 방식은 너무 비효율적이다.

  • 이름으로 특정 Host에 접근하는 방법은 없을까?

 

 

모든 운영체제에는 옆과 같은 hosts 파일이 존재하고 

해당 파일에 IP에 주소를 맵핑이 가능하다.

 

 

 

하지만 해커가 우리가 쓰고 있는 운영체제를 해킹해서 hosts 파일에 접근해서 조작을 한다면 해킹을 당할 위험이 커진다.

ex) 신한은행 사이트와 비슷하게 만든 사이트를 만들어서 ip 조작 후 신한은행 도메인을 바라보게끔 만들어 버리면 우리는 눈뜨고 코베이는 격으로 돈을 갖다 바치게 된다.   93.184.216.34 shinhan.com/index.jsp

  • 하지만 은행권과 같이 보안이 중요한 사이트는 https를 사용하여 이를 사전에 방지한다.

위의 hosts 파일을 변경해서 특정 도메인 네임으로 접근하는 방식은 자신의 로컬에만 해당하는 이야기이다.

그렇다면 DNS가 등장하기 이전에는 어떠한 방식으로 Domain Name을 사용하였을까?

 

 

 

Stanford Research Insititute에 자신의 IP에 해당하는 도메인을 직접 등록하여 사용하였다.

(IP가 아닌 이름을 통해서 접근하는 방식의 시작)

문제점

  1. 하나의 기관에서 수작업을 통해서 host파일을 갱신하였기 때문에 너무 비효율적이다.
  2. host에 모든 hosts 주소를 포함된다 것도 너무 비효율적이다.

클라이언트 입장에서의 DNS

서버가 자신의 도메인을 DNS 서버에 등록을 하면 클라이언트가 해당 도메인에 접근 시 자신의 hosts 파일에 해당 도메인이 있는지를 검색하고 존재하지 않다면 DNS 서버로 접근해 해당 도메인에 대한 IP주소를 가져온 다음 접근할 수 있다.

  • 이전에는 hosts 파일로 IP를 관리하였지만 이제는 서버로 IP주소를 관리하게 되었다.

서버 입장에서의 DNS

DNS의 내부 구조

DNS 서버의 역할은 크게 두 가지이다.

IP를 기억하고 클라이언트가 해당 주소 요청 시 IP를 알려주는 역할이 그것이다.

 

그렇다면 DNS 서버는 한대뿐일까? 

아니다. 전 세계에서 분산되어서 클라이언트에게 효율적으로 IP를 공급한다.


위와 같이 크게 네 가지의 부분으로 도메인을 나눌 수 있다.

  • Root DNS는 Top-level의 IP를 알 수 있다.
  • Top-level은 Second level의 IP를 알 수 있다.
  • Second level은 sub의 IP를 알 수 있다.
    • 단 직계 level의 IP만을 알 수 있다. (Root는 Sub의 IP를 알 수 없다.)

모든 컴퓨터는 Root 네임 서버의 IP는 무조건 알고 있다. (없으면 아무것도 할 수 없다.)

 


DNS 등록 과정

등록자가 등록대행자를 통해서 등록소에 자신의 IP에 해당하는 도메인을 등록한다.

 

Root name server의 역할 : 전 세계의 Top-level 도메인의 주소를 기억하는 것이다.

  • com NS a.gtld-servers.net 

도메인 등록 시 Top-level에 직접 IP를 등록할 수는 없고 네임 서버를 부가적으로 구축해야 한다. (직접 구축할 수 도 있지만 대부분 등록 대행자가 구축해준다.)

 

 

Top-level Domain의 역할 : Name서버의 도메인의 주소를 기억하고 있다.

Domain-Name-Server의 역할 : 등록자가 등록한 IP의 주소를 기억하고 있다.

 

클라이언트가 인터넷을 연결하는 순간에 Domain-Name-Server가 자동으로 세팅된다.

  • 전 세계의 모든 Domain-Name-Server는 반드시 Root Name Server에 대한 주소를 알고 있다.

IP 주소 가져오는 방법 (feat nslookup)

nslookup을 통해서 example.com의 ip 주소를 가지고 와보자

 

명령어 : nslookup example.com

ip주소를 가지고 오긴하지만 Non-authoritative 라는 글귀가 눈에 띈다.

이것은 네임서버에서 직접 IP주소를 가져온것이 아닌 캐싱된 값을 가져온 것이라고 볼 수 있다.

 

직접 네임서버에 접근하여 IP주소를 가져오기 위해서는우선

명령어 : nslookup -type=ns example.com

 

으로 네임 서버의 이름을 가지고 온다.

가져온 네임서버를 가지고

명령어 : nslookup example.com b.iana-servers.net.

직접 네임서버에 접근하여 IP주소를 가지고 올 수 있다.

 

'CS > Network' 카테고리의 다른 글

(Network) IP와 Subnet 에 대해서  (0) 2022.01.30
(Network) 3way handshaking & 4way handshaking  (0) 2020.05.10
(Network) TCP vs UDP  (0) 2020.05.10
(Network) SSL 인증서  (0) 2020.04.28
(Network) HTTPS와 SSL 인증서(2) - 공개키  (0) 2020.04.28