아래는 웹의 동작원리를 한눈에 보기 쉽게 잘 설명한 모식도이다.
HTTP란? WEB 내에서 정보를 주고 받는 프로토콜(Protocol)으로, 즉 통신 기기 간에 메시지를 주고 받는 양식과 규칙의 체계이다. 이는 클라이언트와 서버 사이에 이루어지는 요청(request)과 응답(response)으로 이루어져 있다.
HTTP는 TCP/IP 계층을 기반으로 작동하는 경우가 많다.
그렇다면 TCP/IP 계층은 무엇일까?
인터넷 프로토콜(IP)에 전송 제어 프로토콜(TCP : Transmission Control Protocol)을 합친 방식으로 정의 할 수 있다. 기존에 IP를 통해 인터넷에 접속하여 자원을 주고 받는 방식은 빠르게 데이터를 처리한다는 장점이 존재하지만, 패킷 순서와 정확도는 고려되지 않은 방식이었다. 이러한 문제점을 해결하기 위해 기존 IP방식에 TCP를 상위에 추가하여 반복적으로 데이터를 점검하고 요청하는 일을 담당하도록 하였다. 이러한 방식은 자원에 대한 신뢰성을 보장하고 그 정확도를 제어하기 때문에 오늘날 네트워크 통신에 중요한 역할로 자리잡게 되었다.
과거에는 각각의 서버마다 host.txt
파일을 가지고 있었고, 클라이언트는 서버에 접속하기 위해 이 파일들을 다운로드 하여 적용하는 방식을 사용하였다.
하지만 이 방식은 사용자들에게 번거러움이 많았고, 사용자 수가 늘어감에 따라 방대한 양의 데이터가 생성되었다. 또한, Host들을 식별하기 위한 목적으로 사용된 IP 주소가 숫자 형식으로 이루어져 있었기 때문에 사용자들이 이를 구분하기 어려워하였다.
이러한 문제점들이 많은 상황 속에 이를 해결하기 위해서 DNS(Domain Name System)이 등장하게 되었다.
DNS의 체계는 위의 구조를 가진다.
- 최상위는 .(Root)으로서 인터넷도메인의 시작점이 된다.
- 바로 다음 단계는 최상위도메인(TLD, Top Level Domain)이라고 한다.
- 하위 단계로 여러 도메인이 존재한다.
아래는 DNS가 작동하는 원리를 잘 나타내고 있다.
작동 원리 설명
- 웹 브라우저에 www.naver.com을 입력하면, 단말에 미리 설정되어 있는 Local DNS에게 "www.naver.com이라는 hostname"에 대한 IP 주소를 요청하게 된다. 이 때 이에 대한 데이터가 존재한다면 IP주소를 제공하게 된다.
- 하지만 관련된 데이터가 없다면 다른 DNS 서버들과 통신을 시작하고, 제일 먼저 Root DNS 서버에 위 주소에 대한 정보를 요청하게 된다. Root DNS는 DNS의 루트 존으로, 전 세계에 13대만 구축되어 있는 서버이다. (우리나라는 미러서버를 운영하고 있다.)
- Root DNS 서버는 Local DNS 서버에게 다른 DNS 서버(TLD, 여기서는 com DNS)에게 관련된 데이터를 요청하도록 유도, 응답한다.
- Local DNS는 TLD(com DNS)에 데이터를 요청한다.
- TLD는 다시 Local DNS에게 또 다른 DNS 서버(여기서 "naver.com DNS")에게 관련된 데이터를 요청하도록 응답한다.
- Local DNS는 마지막으로 "naver.com"을 관리하는 DNS서버에 hostname에 대한 IP 주소를 요청한다.
- "naver.com DNS"는 Local DNS에게 IP주소 "222.122.195.6" 응답한다.
- Local DNS는 www.naver.com에 대한 IP주소를 캐싱(이후 빠른 응답을 위해) 하고, 그 정보를 단말(PC)에 전달하게 된다.
이러한 일련의 과정을 Recursive Query라고 부른다.
참조
(http://tcpschool.com/webbasic/works)
(https://webdir.tistory.com/161)
(https://www.netmanias.com/ko/post/blog/5353/dns/dns-basic-operation)