안녕하세요. 이번 시간에는 DNS(Domain Name Service)라는 서비스에 대해 알아보도록 하겠습니다. 우선 DNS에 대해 알기 전에 알아야 할 기본적인 지식에 대해 알아보겠습니다. 현대 사회에서는 각 장치마다 고유의 IP주소를 갖고 있고 통신을 할 때는 IP 주소를 통해서 하게 됩니다. 그러나 IP 주소는 숫자로만 이루어져 있어 외우기 어려운 탓에 IP 주소를 나타낼 수 있는 언어로 대체하게 되었습니다. 예를 들어 192.168.0.1의 주소를 abc.com 이라는 단어와 매칭시킴으로서 abc.com으로 데이터를 전송하면 192.168.0.1로 전송되는 식으로 말입니다. 이때 abc.com과 같이 IP 주소를 나타낼 수 있는 단어를 '도메인(Domain)'이라고 하고 데이터를 전송했을 때 도메인을 자동으로 IP 주소로 변환시켜주는 서비스를 수행하는 서버를 DNS 서버라고 부릅니다. 요약하자면 이렇습니다.


※ 도메인이란 쉽게 말해 그룹을 나타냅니다.


 1. 컴퓨터나 라우터, 스위치 등의 장치는 서로 통신할 때 IP주소를 통해 통신함

 2. IP 주소는 숫자로만 이루어져 있어 외우기 어렵다는 단점이 있음

 3. 이러한 문제를 해결하기 위해 IP 주소를 단어와 매칭시키는 방안이 생겨남 이때 매칭되는 단어가 도메인(Domain)임

 4. 도메인을 IP 주소와 매칭시켜 기억하고 도메인으로 데이터를 전송했을 때 자동으로 IP주소로 변환시켜주는 서비스를 수행하는 서버가 DNS 서버


 그렇다면 도메인이라는 녀석은 어떤 구조로 이루어져 있는지 알아보도록 하겠습니다. www.abc.com을 통해 예시를 들어보겠습니다.


www.abc.com(.)


 1. www는 가장 abc라는 도메인의 www 호스트를 나타냅니다.

 2. abc는 com이라는 도메인 아래의 하위 도메인을 나타냅니다.

 3. com은 루트 도메인(.) 아래의 하위 도메인을 나타냅니다.


 이를 상위부터 나타내면 루트 도메인(.) -> com -> abc -> www 식으로 나타낼 수 있습니다. 그렇다면 여기서 왜 루트 도메인은 괄호가 쳐져있냐는 의문을 가질 수 있는데 루트 도메인은 생략이 가능하기 때문에 괄호를 친 것입니다.


 DNS 서버가 생겨남으로써 IP 주소를 일일이 기억하고 해당 주소로 데이터를 전송해야 하는 등의 불편함이 사라졌습니다. 하지만 세상에는 여러개의 IP 주소가 존재함과 같이 도메인 또한 엄청나기 때문에 이를 관리하는 체계가 따로 있습니다. 이제 이 체계에 대해 알아보겠습니다.


 우선 DNS 서버는 루트(Root), 마스터(Master), 슬레이브(Slave) 이렇게 3가지의 서버 종류가 존재하며 이 서버들을 통해서 . 이제 각 서버들에 대해 알아보겠습니다.


 1. 루트 DNS 서버

  : 루트 DNS 서버는 최상위에 있는 DNS 서버라고 볼 수 있습니다. 이 서버에는 각 하위 서버들에 대한 정보가 담겨 있고 또 다른 루트 서버에 대한 정보들이 담겨 있습니다.

 2. 마스터 DNS 서버

  : 마스터 DNS 서버는 여러 클라이언트의 도메인과 IP가 저장된 서버입니다. 이 서버에서 클라이언트의 쿼리를 받고 처리하는 역할을 합니다.

 3. 슬레이브 DNS 서버

  : 슬레이브 DNS 서버는 마스터 DNS 서버의 레코드를 복사함으로써 마스터 DNS 서버와 같은 역할을 합니다.


 이렇게 DNS 서버들의 종류에 대해 알아보았습니다. 그렇다면 이제 DNS라는 서비스는 어떤 방식을 통해 이루어지는지 알아보겠습니다. 상황은 클라이언트가 abcd.com이라는 주소로 접속한다고 설정하겠습니다.


 1. 클라이언트에서 접속하고자 하는 도메인이 자신의 hosts파일에 있는지 확인합니다.

 2. hosts파일에 도메인이 존재한다면 사용하고 없다면 자신의 cache를 확인합니다.

 3. cache에 존재한다면 사용하고 없다면 자신의 DNS 서버로 설정된 서버에 쿼리(요청)를 보냅니다.

 4. 서버측에서 local hosts파일을 확인하고 없다면 local cache를 확인합니다.

 5. local cache에도 없다면 자신의 레코드를 확인합니다.

 6. 자신의 레코드에 도메인이 있다면 해당 도메인에 매칭되는 주소를 크라이언트에게 전송합니다.

 7. 만약 없을 시 자신의 상위 서버인 루트 서버에게 쿼리를 보냅니다.

 8, 루트 서버에서는 다른 루트 서버들 혹은 자신의 하위 마스터 서버들에게 해당 도메인에 대한 정보가 있는지 요청을 합니다. 

 9. 8번의 과정을 거치면서 해당 도메인에 대한 레코드가 있는 서버가 응답을 합니다.

 10. 응답을 받은 루트 서버는 원래 요청을 보내왔던 서버에게 응답을 합니다.

 11. 원래 요청을 보냈던 서버는 클라이언트에게 응답을 합니다.


 이러한 과정을 통해서 DNS 쿼리와 응답이 이뤄지는 것을 알 수 있습니다. 이제 마지막으로 DNS 서버가 사용하는 포트에 대해 알아보겠습니다.


 DNS서버는 TCP와 UDP 모두 53번 포트를 사용합니다. 그렇다면 왜 TCP와 UDP 따로 나눠져 있을까요? 이유는 TCP는 요청의 크기(query size)가 512byte를 넘어갈 때 사용합니다. 예를 들면 Slave DNS 서버가 Master DNS 서버로부터 레코드를 복사해가는 경우가 있겠습니다. 이상으로 DNS에 대한 포스팅을 마치도록 하겠습니다.

+ Recent posts