Network | Domain, DNS서버란?
도메인(Domain) 이란?
도메인은 인터넷 상에서 웹사이트나 서버를 식별하기 위해 사용하는 주소입니다.
예를 들어, "example.com"은 하나의 도메인입니다.
실제로는 IP 주소가 웹 사이트를 식별하지만, 도메인은 IP 주소를 가르켜 기억하기 쉽게 변환해주는 역할을 합니다.
도메인 구조
최상위 도메인 (Top-Level Domain, TLD)
도메인의 가장 마지막 부분으로, "com", "org", "net", "kr" 등이 해당됩니다.
두번째 수준 도메인 (Second-Level Domain)
TLD 바로 앞에 위치하며, "example" 과 같은 부분입니다.
서브 도메인 (Subdomain)
도메인 이름 앞에 추가적으로 붙는 부분으로, "blog"나 "shop" 등이 서브 도메인으로 사용될 수 있습니다.
예를들어 "blog.example.com" 에서 blog가 서브도메인입니다.
도메인과 URL의 차이점?
웹 주소라고 하는 Uniform Resource Locator(URL)에는 사이트의 도메인 이름, 프로토콜, 경로 등의 정보가 포함됩니다.
https://yujin-17.tistory.com/entry/Network-%EC%84%9C%EB%B8%8C%EB%84%B7Subnet%EC%9D%B4%EB%9E%80
예를 들어 'https' 는 프로토콜이며, '/entry .../' 은 웹 사이트의 특정 페이지에 대한 경로입니다.
DNS 서버란?
DNS 서버는 도메인 이름을 IP 주소로 변환해주는 역할을 합니다.
인터넷에서 서버나 웹사이트에 접근하려면, 실제로는 IP 주소를 사용하여 연결합니다.
DNS 서버는 이 IP 주소를 도메인 이름과 연결해주는 시스템입니다.
DNS의 작동 방식
도메인 이름 입력
사용자가 웹 브라우저에 "example.com"을 입력합니다.
DNS 쿼리
브라우저는 DNS 서버에 "example.com"에 해당하는 IP 주소를 요청합니다.
DNS 서버 응답
DNS 서버는 "example.com"의 IP 주소를 찾아서 브라우저에 반환합니다.
웹사이트 접속
브라우저는 반환된 IP 주소를 사용하여 웹사이트에 접속합니다.
DNS 서버에서 DNS 쿼리 확인방법
DNS 쿼리 처리 과정
1. 클라이언트 요청
사용자가 웹 브라우저에 도메인 이름(ex. 'example.com')을 입력합니다.
브라우저는 DNS 쿼리를 생성하여 클라이언트의 DNS 서버(DNS 리커서(DNS 확인자))로 전송합니다.
2. 리커서(재귀 확인자) 쿼리
리커서는 클라이언트의 DNS 쿼리를 수신하고, 도메인 이름에 해당하는 IP 주소를 찾기 위해 여러 단계의 쿼리를 수행합니다.
리커서는 실제로는 클라이언트 역할을 하며, IP 주소를 찾기 위해 다른 DNS 서버와 상호작용합니다.
3. 루트 네임서버 쿼리
리커서는 먼저 루트 네임서버에 쿼리를 전송합니다.
루트 서버는 DNS 시스템의 최상위에 위치하며, 최상위 도메인(TLD) 서버의 주소를 제공합니다.
예를 들어, 'example.com'의 경우 '.com' 도메인에 대한 정보를 관리하는 TLD 네임서버의 주소를 알려줍니다.
4. TLD 네임서버 쿼리
리커서는 루트 서버로부터 받은 TLD 네임 서버의 주소를 사용하여 해당 TLD 네임서버에(예: '.com' 네임서버)로 쿼리를 전송합니다.
TLD 네임서버는 도메인에 대한 권한 있는 네임서버(권한 서버)의 주소를 제공하는 응답을 리커서에 전송합니다.
5. 권한 있는 네임서버 쿼리
리커서는 TLD 네임서버로부터 받은 권한 있는 네임서버의 주소를 사용하여 해당 권한 있는 네임 서버로 쿼리를 전송합니다.
권한 있는 네임서버는 실제로 도메인에 대한 정보를 가지고 있으며, 요청한 도메인 이름의 IP 주소를 제공합니다.
6. IP 주소 반환
권한 있는 네임서버가 응답한 IP 주소를 리커서는 클라이언트에게 전달합니다.
클라이언트는 이 IP 주소를 사용하여 원본 웹 서버와 직접 연결할 수 있습니다.
7. 웹 페이지 요청
클라이언트는 제공된 IP 주소를 사용하여 원본 웹 서버에 HTTP 요청을 보냅니다.
원본 웹 서버는 요청된 웹 페이지 데이터를 브라우저에 전달합니다.
8. 응답 처리
브라우저는 원본 서버로부터 받은 데이터를 해석하고, 사용자가 요청한 웹 페이지를 화면에 표시합니다.
위와 같은 내용을 좀 더 자세히 말해보겠습니다.
1. 브라우저에 'example.com'을 입력하면,
브라우저는 이 도메인 이름을 IP 주소로 변환하기 위해 DNS 쿼리를 생성합니다.
2. 컴퓨터의 hosts 파일에 example.com의 ip 주소 정보가 있는지 확인합니다.
hosts 파일은 IP 주소와 호스트 이름을 직접 매칭시켜주는 로컬 파일입니다.
이 파일은 해당 컴퓨터에서 가장 우선적으로 참조되며, 도메인 이름에 대한 IP 주소를 미리 정의할 수 있습니다.
위치 : macOS 에서는 '/etc/hosts' 파일에 위치합니다.
작성 규칙:
각 항목은 한 줄로 작성되며, IP 주소와 호스트 이름을 공백으로 구분합니다.
동일 IP 주소에 여러 호스트 이름을 등록할 수 있습니다.
파일 변경 후 캐시 갱신 :
/etc/hosts 파일을 변경 후, 다음 명령어로 캐시를 갱신할 수 있습니다.
$ dscacheutil -flushcache
3. 로컬 DNS 캐시 확인
Local DNS Cache : 컴퓨터에는 DNS 응답을 임시로 저장하는 로컬 DNS 캐시가 있습니다. 도메인 이름에 대한 IP 주소가
이 캐시에 저장되어 있다면, 해당 IP 주소를 즉시 사용할 수 있습니다.
/etc/resolv.conf 파일에서 로컬 DNS 서버의 주소가 나열되어 있습니다.
예를 들어 nameserver 8.8.8.8 와 같이 나타날 수 있습니다.
4. DNS 서버에 쿼리
로컬 DNS 캐시와 hosts 파일에서 IP 주소를 찾을 수 없다면, 로컬 DNS 서버에 쿼리를 전송합니다.
로컬 DNS 서버는 IP 주소를 찾기 위해 다음과 같은 단계적 쿼리를 수행합니다.
1. 루트 네임서버 쿼리 : 최상위 서버로, TLD 서버의 주소를 알려줍니다.
2. TLD 네임서버 쿼리 : 예를 들어 .com 또는 .net 등의 도메인에 대한 정보를 관리하며, 권한 있는 네임서버의 주소를 제공합니다.
3. 권한 있는 네임서버 쿼리 : 실제 도메인에 대한 IP 주소를 가지고 있으며, 해당 IP 주소를 반환합니다.
이러한 과정을 Recursive Query라 하며, 리커서(재귀 확인자)가 이 모든 과정을 대신 수행하며, 최종적으로 IP 주소를 찾아 클라이언트에게 전달합니다.
5. DNS 응답 처리
캐시 저장 : 응답 받은 IP 주소는 로컬 DNS 서버와 클라이언트 컴퓨터에 캐시됩니다. 다음 번 요청 시 캐시된 정보를 사용하여 더 빠르게 응답할 수 있습니다.
nslookup 명령어
nslookup : 도메인에 대한 정보 조회 명령어. 특정 호스트에 대한 IP 주소 조회
Non-authoritative answer
-> nslookup 명령어의 결과에서 로컬 DNS서버가 응답한 정보가 권한 있는 DNS 서버에서 직접 받은게 아니라, 이전에 캐시된 정보임을 의미
Authoritative answer
-> 실제 도메인에 대한 권한 있는 네임서버에서 직접 받은 정보를 의미
권한 있는 네임서버 확인 명령어
nslookup -type=NS example.com
DNS 쿼리 처리 과정은 클라이언트가 도메인 이름을 IP 주소로 변환하기 위해 여러 단계의 서버와 상호작용하는 복잡한 과정입니다.
이 과정에는 로컬 캐시, hosts 파일, 그리고 다양한 레벨의 DNS 서버가 포함됩니다. nslookup과 같은 도구를 사용하면 DNS 쿼리의 결과를 직접 확인할 수 있으며, 응답의 권한 있는 상태를 확인하는 것도 가능합니다.
출처
https://www.cloudflare.com/ko-kr/learning/dns/what-is-a-dns-server/