항해톡 발표주제: [DNS]란 무엇인가
1. IP
인터넷을 통하여 컴퓨터(호스트)가 서로 통신 하기 위해서 먼저 필요한 것이 무엇일까?
바로 인터넷 주소(IP Address)이다.
인터넷 주소는 IPv4(32비트)로 구성되어있다. (ex. 216.58.200.14)
2. DNS 이전 시절 : DNS는 왜 만들어졌을까?
1) IP
과거 다른 컴퓨터와 통신하기 위해서는 ip 주소를 외우거나 별도로 기록해두었다가, ip 주소를 기입하여 접속해야했다.
이 방법은 ip가 많지 않은 초기에는 가능하였지만, ip주소가 많아짐에 따라 사람이 기억하거나 알아보기 어려운 12자리의 숫자의 ip 주소는 굉장한 불편을 초래하였다.
2) Domain과 Hosts
이에 사람이 기억하기 쉽게 ip에 이름을 부여하는 Domain이 등장한다.
가령 위에서 언급한 216.58.200.14 라는 ip 주소에 www.google.com 이라는 사람의 언어로 주소 이름을 부여한 것이다.
초기에는 각자의 컴퓨터에 hosts 파일에 { ip 주소 : 도메인 이름 }을 저장하여 관리하였다.
이를 통해 우리는 인터넷 주소창에 www.google.com 이라는 주소만을 입력하여 구글의 ip 주소로 접속할 수 있게 되었다.
그러나 계속 많아지고 변경되는 도메인 네임을 개인이 일일이 관리하는 것이 가능할까? 당연히 불가능하다.
그래서 이것을 hosts 파일을 SRI-NIC 라는 단체가 관리하게된다.
3) SRI-NIC (standard research institute - network information center)
SRI-NIC는 개별적으로 관리되고 있던 host이름과 주소 리스트를 일관적으로 관리하고 배포하는 시스템을 구축하게됩니다.
즉 모든 ip와 거기에 상응하는 도메인 이름을 하나의 hosts 파일로 만들어, 전 세계의 유저들에게 배포하고 유저들이 각자의 컴퓨터에서 도메인을 사용할 수 있도록 한 것이다.
그러나 이 방법도 도메인과 SRI 사용자가 많이지자, 1) 호스트 파일 관리가 어려워지고, 2) 서버 트래픽을 감당하기 어려운 상황이 펼쳐졌다.
3. DNS(Domain Name System)
1983년 John Postel 과 Paul Mochapetris는 DNS(Domain Name System)이라는 새로운 대안을 만들어낸다.
DNS는 SRI-NIC 아래서 호스트 파일이 관리되던 방식을, 분산형 데이터베이스 시스템으로 전환하여 안정적인 도메인 서비스를 제공하는 시스템이다.
👉🏻 한줄 요약 : DNS는 사람이 읽을 수 있는 도메인 이름을 머신이 읽을 수 있는 IP 주소로 변환하는 시스템을 의미한다.
4. DNS의 재귀적 질의와 응답
그렇다면 어떤 방식으로 DNS는 사용자에게 ip 주소를 제공하는가?
이것에 대한 답을 하려면, 먼저 사용자가 보내는 도메인은 어떤 질의인지 살펴보아야한다.
사용자는 다음과 같이 도메인 주소를 보낸다. 그리고 그 질의는 사실 다음과 같은 내용을 담고 있다.
*재귀적 질의(Recursive Query)
사용자 호스트가 Recursive 네임 서버로 질의할 때 사용되는 방식으로, Recursive 네임 서버로 대상 도메인의 리소스 레코드 정보를 조회해서 응답해달라는 질의를 의미한다.
- Query Name String : 질의하고 싶은 대상
- Type : 다른 DNS 서버에 질의하고자 하는 데이터의 타입
- Class : DNS 통신 중인 네트워크 (지금은 인터넷 외에 네트워크가 없어서 고정값이 되었다)
*응답 : DNS 질의에 대한 리소스 레코드
*DNS 접속 설정을따로 한 적이 없는데요...?
-> 대부분의 가정집에서 사용자가 인터넷에 접속할 때, DHCP(Dynamic Host Configuration Protocol)을 사용한다.
-> DHCP 서버에서 사용자 자신의 IP주소, 가장 가까운 라우터 IP주소, 가장 가까운 DNS 서버 IP주소를 제공해준다.
-> 짧게 말하면 인터넷 연결하면 자동으로 DNS 서버 IP 주소로 연결할 수 있다.
5. DNS의 구성요소
분산형 데이터베이스 시스템을 위하여 DNS에는 크게 3가지 구성요소를 가진다.
1) Domain Name Space
도메인 네임 스페이스는 DNS가 저장, 관리하는 계층적 구조를 의미한다.
DNS는 도메인을 위와 같이 계층적 트리 구조로 구분하고, 이를 각각의 네임 서버가 관리하는 방식으로 운영한다.
계층은 상단부터, 1) Root Domain, 2) Top Level Domain, 3) Second Level Domain, 4) Third Level Domain(Sub Domain)이 있다.
각 레벨의 도메인은 바로 아래의 하위 도메인의 관한 정보만을 관리하게된다.
이로인해 DNS의 분산형 데이터베이스 시스템이 가능하게된다.
2) Name Server
문자열로 표현된 도메인 이름을 실제 컴퓨터가 통신할 때, 이를 IP 주소로 상호변환하는 것을 가능하게 해주는 서버를 네임 서버라고 한다.
네임 서버에는 크게 1) 권한이 있는 네임 서버, 2) 도메인 서버, 3) 권한이 없는 네임 서버 로 나뉜다.
*여기서 권한은 해당 서버가 내려줄 데이터(레코드)를 가지고 있느냐 없느냐에 차이를 뜻한다.
(1) 권한이 없는 네임 서버 (non-Authoritative Name Server)
- 서버 자신이 서비스할 데이터(레코드)가 없이 단지 외부에 있는 컴퓨터의 ip 주소를 알아내서 사용자에게 서비스하는 네임서버를 뜻한다.
- 권한이 없는 네임 서버는 사용자로부터 재귀적 질의(Recursive Query)가 들어오면, 자신의 캐시에 저장된 정보 또는 반복적 질의(Iterative Query)를 통해, 그 결과를 사용자 호스트에 응답해준다.
- Recursive / Cache 네임 서버가 여기에 해당된다.
- public DNS / Local DNS Server 라고도 부르며, KT, LG유플러스, SK브로드밴드, 구글 등이 제공한다.
*반복적 질의(Iterative Query)
Recursive 네임 서버가 도메인을 관리하는 각 네임 서버로 질의할 때 사용하는 방식이다. 순차적으로 반복하여 진행하는 질의이다.
(2) 도메인 네임 서버(Domain Name Server)
- 도메인 네임 서버는 계층형에 따른 네임 서버를 의미한다.
- 도메인 네임 스페이스와 동일하게, 1) Root Name Server, 2) Top Level Name Server, 3) Sub Name Server가 이다.
- 각각 도메인 네임 서버는 바로 하위 단계의 도메인 네임 서버에 대한 리소스 레코드를 가진다.
(3) 권한이 있는 네임 서버 (Authoritative Name Server)
- 자신이 서비스할 데이터(레코드)를 가지고 ip resolution을 해주는 서버를 뜻한다.
- 권한이 있는 네임 서버는 존 파일을 읽어 들여 존 데이터를 구성하고 이를 이용하여 질의에 응답한다.
- 상위에 있는 네임 서버들은 도메인에 대한 모든 데이터를 가지고 있지 않으며, 가장 하위에 있는 네임 서버가 해당 도메인에 대한 모든 권한(추가, 변경, 삭제 )을 가지고 권한이 없는 네임 서버에게 정보를 전달한다.
- 권한이 있는 네임 서버가 관리하는 도메인 영역을 존(Zone)이라 하고, 관리 도메인에 대한 정보를 담고 있는 파일을 존 파일(Zone file)이라 한다. (아래 7번 zone 참고)
3) Resolver
리졸버는 웹 브라우저와 같은 DNS 클라이언트의 요청을 네임 서버로 전달하고, 네임 서버로부터 정보(도메인 이름과 ip 주소)를 받아 클라이언트에게 제공하는 기능을 수행한다.
위에서 권한이 없는 네임 서버가 사용자의 재귀적 질의를 받아, 이를 반복적 질의를 통해 해결한다고 하였는데, 이를 실제적으로 수행하는 것이 바로 리졸버다.
*Stub Resolver
스터브 리졸버는 클라이언트 호스트에서 사용자의 재귀적 질의를 권한이 없는 네임 서버에 전달하는 역할을 하는 리졸버를 뜻한다.
스터브 리졸버는 질의한 내용에 대한 결과를 응답 받아 웹 브라우저로 전달하는 인터페이스 기능만을 수행한다.
6. DNS의 통신 흐름
1) 클라이언트가 스터브 리졸버에게 재귀적 질의를 전달한다.
2) 리졸버는 cache에서 응답을 찾고, 없으면 권한이 없는 네임 서버(이하 DNS)에게 질의를 전달한다.
3) DNS의 리졸버는 cache에서 응답을 찾고, 없으면 RLD(루트 레벨 도메인 서버)에 질의한다.
4) RLD가 응답을 전달하면, 이에 따라 DNS는 TLD(Top 레벨 도메인 서버)에게 질의한다.
5) TLD가 응답하면, 이에 따라 DNS는 SLD(Second 레벨 도메인 서버)에게 질의한다.
6) SLD는 자신의 존 파일 정보를 확인하여 도메인의 ip를 DNS에 전송한다.
7) DNS는 전달받은 ip 주소를 클라이언트에게 전달한다.
*DNS와 클라이언트의 리졸버는 전달 받은 응답 데이터를 cache에 저장하여, 다음 질의 때에는 cache에서 전달한다. 이 방식으로 서버의 과부화와 효율을 높인다.
*물론 영구적으로 저장하는 것은 아니고 한번 가져온 정보를 일정 시간 보관하는데 이 기간을 TTL(Time To Live)라고 한다.
7. Zone
Zone이란 하나의 DNS가 관리하는 영역을 뜻한다. Zone은 그 Zone을 담당하는 DNS 서버와 그 Zone에 대해서 관리하는 데이터를 칭하는 Zone 파일로 구성된다.
도메인을 소유한 특정 조직의 DNS 서버는 해당 도메인에 대한 Zone 파일을 갖는다.
해당 Zone 파일에는 해당 Zone이 담당하는 모든 리소스 레코드가 포함되어 있다.
이 파일엔 Domain 내부 정보(해당 Zone에 속한 호스트 또는 서브 도메인 정보)가 존재하고, 해당 정보 조회를 허용하고 외부 클라이언트에게 정보를 제공할 수 있다.
8. DNS Record
DNS 레코드는 DNS 서버가 해당 패킷을 받았을 때 어떤식으로 처리할지를 나타내는 지침을 뜻한다.
DNS 레코드에는 서버가 요청에 응답하는 방법에 대한 다양한 구문과 명령이 포함되어 있다.
*일반적인 record
- A record : 이 레코드는 도메인과 연결된 실제 IP 주소를 나타냅니다.
- CNAME record : 이 레코드는 현재 도메인 아래에 나열되거나 현재 도메인과 연결된 하위 도메인을 나타내는 데 사용됩니다.
- MX record : 이 레코드는 도메인에 따라 사용될 수있는 모든 메일 서버를 나타냅니다.
- NS record : 이 레코드는 현재 도메인에 사용중인 네임 서버를 보여줍니다.
- SOA record : 이 레코드는 도메인이 마지막으로 업데이트 된시기 및 관련 연락처 정보와 같이 도메인에 대한 중요한 정보가 있습니다.
- TXT record : 현재 목록에없는 도메인에 대한 추가 정보를 포함하도록 편집 할 수 있습니다.
참고
https://www.youtube.com/watch?v=NzleOkTTzO8&list=PLQFHF6cwEgwMKP2yyFtfejWfMrg_vDgfH&index=7
https://www.youtube.com/watch?v=zrqivQVj3JM&list=PLuHgQVnccGMCI75J-rC8yZSVGZq3gYsFp&index=1
https://www.koreascience.or.kr/article/JAKO200709906004763.pdf