브라우저에 google.com을 치면 무슨일이 일어날까?
오늘은 브라우저에
www.google.com
을 입력하면 어떤 과정이 일어나는지 알아보겠습니다.도메인의 해당 IP 주소를 찾기 위해 캐시에서 DNS를 탐색
유저가 브라우저에
www.google.com
을 입력하면 브라우저는 www.google.com(도메인)
을 IP 주소로 변환해야합니다.모든 URL에는 고유한 IP 주소가 할당되어 있습니다. 접속하고 싶은 사이트의 IP 주소를 입력하여 접속하는 것은 어렵기 때문에 도메인 이름으로 검색을 하게 되고, 이 때 DNS가 도메인과 매칭되는 IP 주소를 찾아주는 역할을 합니다.
캐싱된 DNS 기록 확인
검색창에
www.google.com
을 입력했을 때, 브라우저는 유저가 이전에 google에 방문한 적은 없었는지 내부적으로 여러 단계에 걸쳐 DNS 캐시를 찾기 시작합니다.브라우저 캐시
를 확인합니다. 브라우저는 로컬 컴퓨터에 저장되는 캐싱 방식으로 유저가 이전에 방문한 웹사이트의 DNS 기록을 일정 기간 저장하고 있습니다.
OS 캐시
를 확인합니다. OS 캐시는 운영체제 안에 있는 캐시로 systemcall을 통해 그 내용에 접근할 수 있습니다. 즉 유저의 사용중인 운영체제 안에 저장되어 있는 DNS 기록을 찾아본다는 의미입니다.
라우터 캐시
를 확인합니다. 만약 유저의 컴퓨터 (브라우저, OS)에도 www.google.com에 대한 DNS 기록이 없다면, 라우터 캐시를 찾아봅니다. 라우터란 집에서 사용하는 공유기라고 생각하면 됩니다.
ISP 캐시
를 확인합니다. 위의 단계에서 DNS 기록을 찾지 못했다면, ISP에서 DNS 기록을 찾게 됩니다. ISP는 SKT, KT 등 한국에서 인터넷 서비스를 공급하는 회사를 의미합니다.
캐시를 찾지 못했다면, ISP의 DNS 서버가 DNS 쿼리를 통해 IP 주소 검색
ISP 캐시 확인 단계에서까지
www.google.com
에 해당하는 IP 주소를 찾지 못했다면 ISP는 DNS 서버에 DNS 쿼리를 보내기 시작합니다. 이 과정은 IP 주소를 찾거나 찾을 수 없다는 오류 응답을 받을 때까지 반복합니다. 이 과정은 ISP의 DNS recursor가 담당하게 됩니다.- DNS recursor가 DNS 쿼리를 Root domain에 전송
- Top-level domains인
.com
DNS 서버에 전송
- Second-level domains인
google.com
으로 전송
- 마지막으로
www
까지 갖춰지게 되면www.google.com
의 IP 주소를 찾게된다
TCP/IP 프로토콜을 사용해 서버와 연결
브라우저가 올바른 IP 주소를 받게되면 IP 주소와 일치하는 서버와 연결해 정보를 전송합니다. 브라우저는 인터넷 프로토콜(IP)을 사용하여 연결을 구축하게 되는데, 사용할 수 있는 여러가지 인터넷 프로토콜이 있지만, 일반적으로 HTTP 요청에서는 TCP 전송 제어 프로토콜을 사용합니다.
TCP/IP three-way handshake
라는 프로세스를 통해 클라이언트와 서버간 connection이 이루어지게 됩니다. 여기서 HTTPS를 사용하는 경우 데이터의 암호화를 위한 TLS(Transport Layer Security) 핸드셰이크라는 추가 과정을 수행합니다. - 클라이언트가 SYN(synchronize: 연결 요청) 신호를 서버쪽으로 보내며 포트를 열어달라고 물어봅니다.
- 서버가 SYN와 ACK를 클라이언트에게 보내게 됩니다.
- 클라이언트는 서버에서 받은 SYN와 ACK를 통해 첫 번째 단계에서 보낸 정보가 맞는지 확인 후 다시ACK(승인)를 보냅니다.
이렇게 되면 서로 안전하게 정보를 교환할 수 있는 포트가 열리게 됩니다.
클라이언트와 서버가 통신할 때의 안전장치
TCP 연결을 하는 도중 누군가 유저의 정보를 엿보려고 하거나 해커가 무자비한 서비스 트래픽을 보내는 경우를 대비하는 두 가지 방법이 있습니다. 바로
Firewall
과 HTTPS/SSL
인데요.Firewall
은 불이 났을 때 공기를 차단하는 벽처럼 해커가 무자비하게 트래픽을 보내는 경우를 대비해 특정 IP 주소나 어떤 지역에서 접근해오는 신호를 차단할 수 있습니다.
HTTPS/SSL
은 클라이언트와 서버가 정보를 주고 받을 때 중간에 정보를 가로챌 수 있기때문에 정보를 암호화해서 정보가 새는걸 차단합니다.
브라우저가 웹서버에 HTTP 요청
TCP 연결이 되면 데이터를 전송합니다. 클라이언트는
GET
요청을 통해 서버에 www.google.com
의 웹사이트 데이터를 요구합니다.서버가 HTTP Response를 응답
클라이언트에서 보낸 request를 서버가 처리하게 됩니다. 그리고 response를 생성해서 보내주게 되는데요.
서버의 response에는 특정한 포맷 (JSON, XML) 등으로 작성되고 웹 페이지와 함께 상태 코드 (status code), 압축 유형 (Content-Encoding), 페이지 캐싱 방법 (Cache Control), 설정할 쿠키 등이 포함되어 있습니다.
HTML content 노출
브라우저는 서버로부터 받은 reponse 데이터에 들어있는 HTML을 화면에 단계별로 표시하게 됩니다.
- HTML 골격 렌더링
- HTML 태그 확인 후 이미지, CSS 스타일 시트, 자바스크립트 파일 등과 같은 웹 페이지의 추가 요소에 대한
GET
요청
- 페이지가 브라우저에 노출
이렇게 브라우저 검색창에 특정 주소를 쳤을 때 어떤 일이 일어나는지 알아보았습니다. 이러한 과정을 알아보면서 평소 코드를 작성하고 실행할 때에도 어떻게 동작되는지 알고 있어야 문제의 원인 파악과 해결이 되겠구나를 느끼게 되었던 것 같습니다.