DNS(Domain Name System)의 이해와 동작 원리
1 DNS(Domain Name System)
1.1 DNS란?
- DNS는 도메인 이름을 IP 주소로 변환해주는 시스템입니다.
- 인터넷 프로토콜 통신에는 IP 주소가 필요하지만, 사람이 기억하기 어렵습니다.
- 따라서 IP 주소에 별칭(도메인 이름)을 붙여 사용하며, 이를 다시 IP 주소로 변환하는 과정을 name resolution이라고 합니다.
- DNS는 이러한 name resolution 기능을 제공하여 사용자가 쉽게 기억할 수 있는 도메인 이름으로 웹사이트에 접속할 수 있게 해줍니다.
IP 주소
- 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호입니다.
- 트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야 합니다.
- IP.md(IP 주소 참고)
1.2 hosts 파일
- 인터넷 상용화 이전(DNS가 없던 시절) 핸드폰에 전화번호를 저장하듯 각 단말에 hosts파일을 넣어두고 도메인과 IP 주소를 직접 관리했습니다.
hosts 파일
93.184.216.34 example.com
- hosts 파일은
/etc/hosts
에 위치하며, 도메인과 IP 주소의 매핑 정보를 담고 있습니다. example.com
에 요청을 보내면 먼저 hosts 파일에서example.com
을 찾아 이를93.184.216.34
IP 주소로 변환한 다음 통신을 이어갑니다.- 즉 DNS가 없던 시절에는 hosts 파일을 통해 name resolution 기능을 사용했습니다.
hosts 파일의 단점
- 작은 네트워크의 경우 각각의 호스트의 hosts 파일을 관리하는 것이 가능했습니다.
- 하 지만 네트워크가 커지고 호스트들이 많아 졌을 때를 생각해보면 hosts 파일로 name resolution을 관리하는 것은 매우 번거로운 일입니다.
- web이라는 도메인의 IP 주소를 변경하면 모든 호스트의 hosts 파일을 일괄적으로 업데이트해야 합니다.
- 인터넷이 상용화되어 네트워크가 거대해지자 더 이상 hosts 파일로는 관리할 수 없어졌고 name resolution 기능을 제공하는 별도의 중앙 서버를 만들게 되는데 이것이 바로 DNS입니다.
- 따라서 요즘에는 로컬에 존재하는 hosts 파일로 name resolution을 하지 않고 중앙 집중 서버인 DNS에 name resolution 기능을 사용합니다.
- 하지만 지금도 IP 주소를 모르는 도메인이 있는 경우 hosts 파일에서 먼저 찾고 없을 때 DNS에 질의합니다.
- 이러한 순서는
/etc/nsswitch.conf
파일에host: files dns
라고 기본 설정되어 있기 때문입니다. - 원하면 순서를 변경할 수 있습니다.
Host
- 네트워크에 연결된 장치(컴퓨터, 서버 등)들에게 부여되는 고유한 이름입니다.
- 도메인과 유사하지만 더 넓은 의미를 가지고 있습니다.
- 인터넷에서 호스트 이름은 인터넷에 연결된 호스트(컴퓨터)의 이름으로, 보통 호스트의 지역 이름에 도메인 이름을 붙인 것을 말합니다.
- 예를 들면, www.naver.com (웹 서버), mail.naver.com (메일 서버) 와 같이 네이버에서 사용되는 모든 호스트 이름에 naver.com이란 도메인 이름이 붙어 있습니다.
2 Domain
- IP 주소는 사람이 기억하기 어렵기 때문에 IP 주소에 이름을 부여할 수 있게 했는데, 이것을 도메인이라고 합니다.
- 넓은 의미로는 네트워크상에서 컴퓨터를 식별하는 호스트명을 가리키며, 좁은 의미에서는 도메인 레지스트리에게서 등록된 이름을 의미합니다.
- IP 주소 대신 도메인 주소를 이용하면 서비스중인 IP 주소가 변경되더라도 도메인 주소 그대로 유지해 접속 방법 변경없이 서비스를 그대로 유지할 수 있습니다
도메인 이름의 구조
- root domain :
.
- Top-level domain:
.com
- Second-level domain:
example
- Sub domain:
blog
3 DNS 서버
- DNS 서버의 종류로 DNS Server, 루트 네임 서버, TLD 네임 서버, 권한 있는 네임 서버가 있습니다.
- DNS 서버는 DNS 쿼리의 첫 단계며 클라이언트와 DNS 네임서버 사이의 중개자 역할을 합니다.
- 루트 네임 서버는 DNS Server가 DNS 레코드를 요청하는 과정의 첫 단계입니다.
- TLD 네임 서버는 .com, .net 또는 URL의 마지막 점 뒤에 오는 것 같은 일반적인 도메인 확장자를 공유하는 모든 도메인 이름의 정보를 유지하고 있습니다.
- 권한 있는 네임 서버는 도메인 이름에 고유한 정보를 포함하며 DNS A 레코드에서 찾은 도메인의 IP 주소를 DNS Sever에 제공하거나, 도메인에 CNAME 레코드(별칭)가 있는 경우 DNS Sever에 별칭 도메인을 제공합니다.
3.1 DNS Server
- DNS Server 또는 Local DNS라고 불리며, 클라이언트가 DNS 쿼리를 보내는 곳입니다.
- DNS Server는 DNS 쿼리의 첫 단계며 클라이언트와 DNS 네임서버 사이의 중개자 역할을 합니다.
- 쿼리: 도메인의 IP 주소를 찾는 행위
DNS Server의 동작 과정
- 웹 클라이언트로부터 DNS 쿼리를 받은 후 캐시된 데이터로 응답한다
- 캐시된 데이터가 없는 경우 아래와 같은 동작을 거친다
- 루트 네임서버에 DNS 쿼리
- TLD 네임서버에 DNS 쿼리
- 권한 있는 네임서버에 DNS 쿼리
- 권한 있는 네임서버로부터 응답에는 도메인의 IP 주소가 있으며 응답을 클라이언트에 보냅니다.
- 도메인과 매핑되는 IP 주소를 캐싱한다
DNS Server 설정
- 대부분의 인터넷 사용자는 ISP에서 제공하는 DNS server를 사용하지만 아래와 같은 퍼블릭 DNS server를 이용하도록 설정할 수 있습니다.
- Cisco OpenDNS: 208.67.222.222 and 208.67.220.220;
- Cloudflare 1.1.1.1: 1.1.1.1 and 1.0.0.1;
- Google Public DNS: 8.8.8.8 and 8.8.4.4; and
- Quad9: 9.9.9.9 and 149.112.112.112.
3.2 루트 네임 서버
- 전 세계의 13개의 DNS 루트 네임서버가 있고 모든 DNS Server에 알려져 있습니다.
- 루트 네임 서버는 DNS Server가 DNS 레코드를 요청하는 과정의 첫 단계입니다.
- 루트 서버는 도메인 이름을 포함한 DNS Server의 쿼리를 수용하며 루트 네임서버는 해당 도메인의 확장자(.com,. net, .org, etc.)에 따라 DNS Server를 TLD 네임서버에 보내 응답합니다.
- 루트 네임서버는 비영리 단체인 ICANN(Internet Corporation for Assigned Names and Numbers)이 관리합니다.
3.3 TLD 네임 서버
- Top-level Domain Name Server
- TLD 네임서버는 .com, .net 또는 URL의 마지막 점 뒤에 오는 것 같은 일반적인 도메인 확장자를 공유하는 모든 도메인 이름의 정보를 유지하고 있습니다.
- 예를 들어 TLD 네임서버는 ‘.com’으로 끝나는 모든 웹사이트의 정보를 갖고 있습니다.
- 사용자가 google.com을 검색하는 경우 DNS Server는 루트 네임서버로부터 응답을 받은 후 쿼리를 .com TLD 네임서버에 보내고, 해당 네임서버는 해당 도메인의 권한 있는 네임서버를 가리켜 응답합니다.
최상위 도메인의 종류
- 일반 최상위 도메인
- 국가별로 고유하지 않은 도메인이다
- 예) .com, .org, .net, .edu, .gov
- 국가 코드 최상위 도메인
- 여기에는 국가 또는 주와 관련된 모든 도메인이 포함된다.
- 예) .uk, .us, .ru, .jp
- TLD 네임 서버는 Registry(등록소)가 관리합니다.
- .com, .net TLD 네임 서버는 VeriSign Global Registry Services 라는 기업이 관리한다.