DNS(Domain Name System)는 흔히 우리가 알고 있는 URL을 IP 주소로 변환하는 시스템입니다. 우리가 알고 있는 URL들을 도메인 네임이라고 합니다. (www.naver.com 등...)
DNS는 TCP와 UDP를 사용하는 응용 계층의 프로토콜입니다. 일반적인 DNS 질의에는 UDP를 사용합니다. DNS는 빠르게 호스트에게 IP 주소를 알려주어야 하기 때문에 속도가 빨라야 합니다. 하지만 다음과 같은 경우에는 TCP를 사용해야 합니다. (포트는 TCP/53, UDP/53)
DNS는 Domain Name Space, Name Server, Resolver로 구성되어 있습니다.
"이 도메인 네임은 이 IP 주소다"라는 텍스트를 저장할 데이터베이스가 필요합니다. 그리고 분산된 데이터가 어디 저장되어 있는지 찾을 프로그램이 필요합니다. 만약 찾았다면 해당 IP 주소로 이동할 프로그램(브라우저 등)이 필요합니다. 따라서, 도메인 네임 스페이스라는 방법으로 도메인 이름을 관리합니다.
도메인 주소를 관리하기 위해 사용되는 DNS 전용 서버입니다. 네임 서버가 해당 도메인 이름의 IP 주소를 찾습니다.
DNS 클라이언트 요청을 네임 서버로 전달하고 찾은 정보를 클라이언트에게 제공하는 기능을 수행합니다. 어떤 네임 서버에서 찾아야하는지, 캐시에 있는지 등 어떻게든 찾아서 클라이언트에게 찾았는지 여부를 전달합니다.
DNS 서버(Name Server)와 DNS 클라이언트는 DNS 쿼리를 교환합니다. DNS 쿼리는 Recursive Query와 Iterative Query로 구분됩니다.
질의된 도메인에 대해 즉각 응답하거나, 다른 서버에게 질의한 결과로 응답하거나, 찾고 있는 정보가 없다는 에러 메시지를 보내줍니다.
질의된 도메인에 대해 대해 응답하거나, 이 작업을 할 수 있는 다른 DNS 서버에 클라이언트를 연결시켜 줍니다. 자신이 관리하지 않는 알 수 없는 질의에 대해 응답 가능한 네임 서버 목록을 전달합니다.
DNS 상에서 도메인에 관한 설정을 하기 위해 사용되는 일련의 문자들을 DNS 레코드라고 합니다. DNS 레코드에는 여러 종류가 있습니다.
- 브라우저 주소창에 maps.google.com을 입력
- 브라우저가 maps.google.com의 IP 주소를 찾기 위해 캐시에서 DNS 기록을 확인
- 만약 요청한 URL(maps.google.com)이 캐시에 없다면, ISP의 DNS 서버가 DNS 쿼리로 4. 4. maps.google.com을 호스팅하는 웹서버의 IP 주소 탐색
- 브라우저가 해당 서버와 TCP 연결을 시작
- 브라우저가 웹서버에 HTTP 요청 전송
- 서버가 요청을 처리하고 응답을 전송
- 서버가 HTTP 응답을 전송
- 브라우저가 HTML 컨텐츠를 보여줌
2~3번의 과정에서 캐시를 확인할 때 4개의 캐시를 확인합니다.
2~3번의 과정을 통해 얻어낸 IP 주소는 인터넷 상에서 웹서버의 위치를 나타냅니다.
브라우저가 HTML 컨텐츠를 보여줄 때 브라우저는 정적 컨텐츠와 동적 컨텐츠를 함께 보여줍니다. 정적 컨텐츠는 웹서버가 처리하고 동적 컨텐츠는 WAS(Web Application Server)가 처리합니다.
WAS는 DB와 연결되어 필요한 데이터를 받아서 동적 컨텐츠를 처리합니다. 또한 WAS는 정적 컨텐츠도 처리가 가능하기 때문에 웹서버의 역할도 수행할 수 있습니다. 다만, 정적 컨텐츠도 처리하게 되면 동적 컨텐츠의 처리가 지연되기 때문에 따로 처리하는 것입니다.
서버의 리소스 이름은 통합 자원 식별자(Uniform Resource Identifier, URI)라고 부릅니다. URI는 인터넷의 우편물 주소라고 생각하면 됩니다. 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있습니다. 그리고 이 URI에는 URL, URN 두 가지 형태가 있습니다.
URL(Uniform Resource Locator)은 URI의 가장 흔한 형태입니다. URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 서술합니다. 리소스가 정확히 어디에 있고 어떻게 접근할 수 있는지 분명히 알려줍니다. 우리가 흔히 알고 있는 사이트 주소입니다.
URN(Uniform Resource Name)은 콘텐츠를 이루는 한 리소스에 대해 리소스의 위치에 영향 받지 않는 유일무이한 이름입니다. URN은 리소스를 여기저기로 옮기더라도 문제없이 동작합니다. 리소스가 그 이름을 유지한다면 여러 종류의 네트워크 접속 프로토콜로 접근해도 문제 없습니다. URN이 있다면 사용자의 의해 URL이 바뀌더라도 리소스의 위치를 찾을 수 있습니다.
브라우저는 특정 사이트에 접속할 때 DNS를 통해 접속해야할 IP 주소를 얻는다고 설명드렸습니다. hosts 파일은 DNS를 통해 IP를 구하기 전에 먼저 검색되는 개인 주소록입니다. 매번 DNS를 통해 IP 주소를 가져오는 것이 아니라 로컬에 hosts 파일에 저장된 IP 주소를 가져올 수 있다면 브라우저의 속도 향상을 기대할 수 있습니다.