DNS의 목적은 편의성 제공이며 캐싱은 네트워크 트래픽을 조절하고 데이터 전송 시간을 줄인다.
DNS Query의 목적은 여러 다른 DNS 서버들을 검색해서 해당 사이트의 IP주소를 찾는 것이다. 이러한 검색을 Recursive Search라고 부른다. IP주소를 찾을 때 까지 DNS서버에서 다른 DNS서버를 오가면서 반복적으로 검색한다.
이 상황에서, ISP의 DNS 서버를 DNS recursor라고 부르고 인터넷을 통해 다른 DNS 서버들에게 물어 물어 도메인의 이름의 올바른 IP 주소를 찾는데 책임을 갖고 있다.
브라우저가 올바른 IP 주소를 받게 되면 서버와 연결을 한다. 브라우저는 인터넷 프로토콜을 사용해서 서버와 연결이 된다. 웹사이트의 HTTP 요청의 경우 일반적으로 TCP를 사용한다.
클라이언트와 서버간 데이터 패킷들이 오가려면 TCP 연결이 되어야한다. TCP/IP three-way handshak 프로세스를 통해 연결이 이루어진다.
TCP/IP three-way handshak란?
- 클라이언트 머신이 SYN 패킷을 서버에 보내고 연결을 열어달라고 물어본다.
- 서버가 새로운 연결을 시작할 수 있는 포트가 있다면 SYN/ACK 패킷으로 대답은 한다.
- 클라이언트는 SYN/ACK 패킷을 서버로부터 받으면 서버에게 ACK 패킷을 보낸다
이 과정이 끝나면 TCP 연결이 완성된다.
TCP 연결이 되어있다면, 데이터를 전송하면 된다. 클라이언트의 브라우저는 GET 요청을 통해 서버에게 www.google.com 웹페이지(html)을 요구한다. 요청을 할 때 쿠키나 헤더 정보와 같은 자료들을 포함 할 수 있다.
서버는 웹서버를 가지고 있다. 이들은 브라우저로부터 요청을 받고 request handler한테 요청을 전달해서 요청을 읽고 response를 생성하게 된다. 이 request handler는 요청과 요청의 헤더, 쿠키를 읽어서 요청이 무엇인지 파악하고 필요하다면 서버에 정보를 업데이트 한다.
서버의 response에는 요청한 웹페이지, status code, compression type, 어떻게 인코딩 되어있는지, 어떻게 페이지를 캐싱할지 등이 포함된다.
브라우저는 HTML content를 단계적으로 보여준다. 처음에는 HTML 스켈레톤을 렌더링하고 그 후에 HTML tag들을 체크해서 추가적으로 필요한 리소스등을 요청한다. 이 정적 우베페이지는 브라우저에 의해 캐싱이 되서 나중에 해당 페이지를 방문 할때 다시 서버로부터 요청하지 않는다. 드디어 원했던 www.google.com의 모습이 보여지게 된다.