[네트워크] www.google.com 을 접속하면 일어나는 일 자세히 알아보기!
들어가며..
우리가 인터넷 브라우저의 주소창에 'www.google.com' 등 주소를 입력하고 엔터를 누르는 순간, 눈에 보이지 않는 곳에서는 수많은 과정이 순식간에 일어난다. 이러한 과정을 통해 우리는 홈페이지에 쉽게 접속할 수 있지만. 간단해 보이는 행위 뒤에는 복잡한 네트워크 통신의 세계가 숨어 있다. 이번 내용은 우리가 www.google.com 사이트를 들어가기 위해, 주소창에 주소를 입력한 후 엔터를 치면 어떤 일이 일어나는지에 대해서 알아보고자 한다.
도메인 주소란 무엇인가?
본문으로 들어가기 전, 선수 지식인 도메인 주소에 대해서 알아보자.

인터넷이라는 전 세계적으로 연결된 거대한 네트워크 상에서 각각의 장치를 구별하고, 원활한 데이터 교환을 가능하게 하기 위해서는 'IP 주소'를 필요로 한다. IP 주소는 인터넷에 연결된 모든 장치에게 부여되는 고유한 주소로, 이 주소를 통해 장치들은 서로를 식별하고 통신할 수 있다.
우리가 자주 방문하는 네이버, 구글과 같은 웹사이트들은 각각 고유한 웹 서버를 가지고 있고 해당 웹 서버의 인터넷 주소인 IP 주소를 알아야만 방문을 할 수가 있다. 하지만, 우리가 각 웹사이트들의 숫자로 구성되어 있는 IP 주소를 일일이 외우면서 다니는건 아무리 암기에 자신이 있다고 해도 너무 불편하다.
이러한 불편함을 해소하기 위해 도입된 것이 바로 '도메인 주소'이다. 도메인 주소는 숫자로 이루어진 IP 주소와 매핑되어 있으며, 사람이 기억하기 쉬운 문자 형태로 구성되어 있다. 예를 들어 브라우저 주소창에 'www.naver.com', 'www.google.com'을 입력하면 해당 도메인 주소는 뒤에 숨겨진 IP 주소로 변환되어 해당 웹사이트의 서버에 접속하게 된다.
전체 흐름
이제부터 본격적으로 브라우저 주소창에 www.google.com을 입력하고 엔터를 눌렀을 때 흐름을 살펴보자.
캐시 확인
브라우저 캐시 확인
가장 먼저 브라우저는 자신에게 www.google.com IP 주소가 저장되어 있는지 dns 캐시 목록을 확인한다.

크롬 브라우저의 경우 chrome://net-internals/#dns 를 통해 특정 웹사이트의 브라우저 dns 캐시 여부를 확인할 수 있다.
OS 캐시 확인
브라우저 dns 캐시에 www.google.com이 없다면, 시스템 호출(System Call)을 통해서 OS 캐시에 www.google.com의 IP 주소가 저장되어 있는지 확인한다.

윈도우의 경우 다음과 같이 터미널 창에 ipconfig /displaydns 명령어로 운영체제 DNS 캐시 목록을 조회할 수 있다.
시스템 호출이란?
운영 체제의 핵심 기능을 사용하기 위해 응용 프로그램이 운영 체제에 요청하는 절차
라우터 캐시 확인
OS 캐시에도 www.google.com에 대한 IP 주소가 없다면, 라우터 즉, 집에서 사용하는 공유기에 따라 다르지만 DNS 캐시를 가지는 경우가 있기 때문에, DNS 캐시를 조회하여 빠르게 응답을 줄 수 있다.
ISP 캐시 확인
라우터 캐시에도 없다면, 우리가 사용하는 (KT, SKT, LG유플러스)와 같은 통신사인 인터넷 서비스 제공 업체 (Internet Service Provider, ISP)은 자체적으로 DNS 쿼리 결과를 저장하는 캐시를 통해 IP 주소를 빠르게 가져올 수 있다.
DNS 서버 요청
캐시에서 IP 주소를 찾지 못했다면, DNS 서버에 www.google.com에 대한 IP 주소를 얻어오기 위해 요청을 보내야 한다.
먼저, DNS 서버에 IP 주소를 얻는 과정을 이해하기 위해서 DNS 서버 계층 구조에 대해서 간략하게 알아보자

도메인은 체계적인 분류와 관리를 위해서 도메인 이름은 영문자를 '.' 으로 연결한 계층 구조를 가지고 있다.
가장 위의 Root Domain의 아래로 갈라지는 가지를 기준으로 단계별로 알아보자면,
1단계 도메인(Top Level Domain, TLD) 은 'kr'과 같이 국가를 나타내는 국가 코드 도메인 이나, 'com'과 같이 등록인의 목적에 따라 사용되는 일반 도메인이 있다.
2단계 도메인은 조직의 속성을 구분하는 'co'(영리 기업), 'go'(정부 기관), 'ac'(대학)과 같은 도메인이 있다.
3단계 도메인은 조직이나 서비스 이름을 나타내는 도메인 이름으로 원하는 문자열을 사용할 수 있다.
마지막은 컴퓨터의 이름을 나타내는 호스트가 위치한다.
다시 본론으로 돌아와서, www.google.com에 대한 IP 주소를 얻어오기 위해 질의하는 과정을 살펴보겠다.

[STEP 1]
사용자는 브라우저에 도메인을 입력하고 요청을 보낸다.
[STEP 2]
클라이언트(브라우저)는 로컬 DNS 서버에 www.google.com 의 IP 주소를 문의한다.
[STEP 3-4]
로컬 DNS 서버는 Root 네임 서버에게 www.google.com IP 주소를 문의한다.
Root DNS 서버는 자신의 하위 계층 서버인 'com' TLD 네임 서버의 IP 주소를 반환한다.
[STEP 5-6]
로컬 DNS 서버는 TLD 네임 서버에게 www.google.com IP 주소를 문의한다.
TLD DNS 서버는 'google.com' Authoriative 네임 서버의 IP 주소를 반환한다.
[STEP 7-8]
로컬 DNS 서버는 Authoriative 네임 서버에게 www.google.com IP 주소를 문의한다.
Authoriative 네임 서버는 www.google.com IP 주소를 반환한다.
결과적으로 클라이언트는 로컬 DNS 서버에서 받은 IP 주소를 통해 웹 서버로 접속을 시도할 수 있다.
TCP 연결
이제 웹사이트 화면을 받기 위해서 www.google.com 웹 서버로 HTTP 프로토콜을 통해 요청을 보낼 것이다.
HTTP 프로토콜이란?
HTTP(Hypertext Transfer Protocol) 프로토콜은 웹에서 정보를 교환하기 위해 설계된 애플리케이션 계층의 프로토콜
HTTP 개요 - HTTP | MDN
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜입니다. HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 합니다. 클라이언트-서버
developer.mozilla.org
HTTP 프로토콜은 TCP/IP 로 동작하는데 가장 처음 클라이언트와 서버가 연결을 맺을 때 TCP/IP three-way handshake 과정을 거쳐서 통신을 맺게 된다.
TCP/IP 프로토콜이란?
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있다. IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다. TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해 준다. HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다.

클라이언트와 서버가 연결하는 과정은 다음과 같다.
[STEP 1]
클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보내고 내가 보낸 SYN 패킷에 대한 응답 ACK 패킷 응답을 기다리는 SYN_SENT 상태가 된다.
[STEP 2]
서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다리는 SYN_RECEIVED 상태가 된다.
[STEP 3]
클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 요청을 보낼 수 있다.
SYN (Synchronize Sequence Numbers) 란?
연결을 초기화할 때 사용되는 메시지이다. 클라이언트가 서버에게 연결을 시작하고자 할 때, 클라이언트는 SYN 패킷을 보내며, 이 패킷은 연결을 시작하는 데 사용될 시퀀스 번호를 포함하고 있다. 이 시퀀스 번호는 데이터 전송에서 패킷의 순서를 결정하는 데 사용된다.
ACK (Acknowledgment) 란?
수신 확인을 나타내는 메시지이다. SYN 요청을 받은 서버는 클라이언트에게 SYN-ACK 패킷을 보내어, 클라이언트의 SYN 요청을 받았으며 연결 준비가 되었음을 알린다. 이 때, ACK 패킷은 클라이언트의 SYN 패킷에 대한 응답으로, 클라이언트가 처음 보낸 시퀀스 번호에 1을 더한 값을 포함하여 보낸다.
HTTP 요청
이제 TCP/IP 연결도 맺었으니 서버에 요청을 보낼 수 있는 상태가 되었다.

그 전에, 실제로 어떤 메시지가 서버로 전송되는지 잠깐 알아보자.
HTTP 요청 메시지 구조
HTTP 요청 메시지는 클라이언트가 서버로 전달해서 서버의 액션이 일어나게끔 하는 메시지이다.
다시 말해서 우리가 www.google.com에 요청을 보내면 HTTP 요청 메시지가 서버로 전송된다.

HTTP 요청 메시지는 다음과 같이 3가지 부분으로 나뉘어진다.
start line
시작 줄은 다음과 같이 세 가지 요소 (HTTP 메소드) (Request target) (HTTP version) 포맷을 이루고 있다.
- HTTP 메소드 : 요청의 의도를 담고있는 메소드로, GET, POST, PUT, DELETE 등이 있음
- Request Target : 요청이 전송되는 목표 주소
- HTTP version : version에 따라 요청 메시지 구조나 데이터가 다를 수 있기 때문에 version을 명시
headers
HTTP 헤더는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있도록 해준다.

- Request headers : 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더
- General headers : 요청과 응답 모두에 적용되지만 최종적으로 전송되는 데이터와는 관련이 없는 헤더
- Representation headers : 컨텐츠 길이나 MIME 타입과 같이 본문에 대한 자세한 정보를 포함하는 헤더
body
본문은 요청의 마지막 부분에 들어간다. GET, HEAD, DELETE , OPTIONS 메소드처럼 리소스를 가져오는 요청은 본문을 넣지 않고 보통 POST 요청일 경우 업데이트를 하기 위해 서버에 데이터를 전송한다.
HTTP 응답
서버는 해당 HTTP 요청 메시지를 받은 후 적절한 HTTP 응답 메시지를 생성해 클라이언트에게 응답을 보낸다.
요청 메시지와 마찬가지로 서버에서도 어떤 메시지를 전송하는지 잠깐 알아보자.
HTTP 응답 메시지 구조
HTTP 응답 메시지는 클라이언트의 요청 메시지에 대한 답변이다.
다시 말해서 www.google.com에 요청을 받은 서버는 HTTP 응답 메시지를 클아이언트에게 전송한다.

HTTP 응답 메시지도 마찬가지로 다음과 같이 3가지 부분으로 나뉘어진다.
start line
시작 줄은 다음과 같이 세 가지 요소 (HTTP version) (Status Code) (Status Text) 포맷을 이루고 있다.
- Status Code : 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 세 자릿수로 구분한다.
- Status Text : 응답 상태를 간략하게 글로 설명해준다.
headers

- Response headers : 서버 대한 자세한 정보를 포함하는 헤더
- General headers : 요청과 응답 모두에 적용되지만 최종적으로 전송되는 데이터와는 관련이 없는 헤더
- Representation headers : 컨텐츠 길이나 MIME 타입과 같이 본문에 대한 자세한 정보를 포함하는 헤더
body
응답 메시지 본문에는 클라이언트에게 전송되는 실제 데이터를 담고 있다.
웹 페이지의 HTML, 이미지, 스타일 시트, 자바스크립트 코드 등 다양한 형태로 존재할 수 있지만, 모든 응답 메시지에 본문이 들어가지는 않는다.
HTTP 응답 메시지 body의 내용은 Content-Type 헤더에 의해 정의된 MIME 타입을 기반으로 해석된다. 예를 들어, HTML 문서의 경우 Content-Type은 text/html이 될 것이며, JSON 형식의 데이터를 반환하는 응답의 경우 application/json이 된다.
MIME types (IANA media types) - HTTP | MDN
A media type (also known as a Multipurpose Internet Mail Extensions or MIME type) indicates the nature and format of a document, file, or assortment of bytes. MIME types are defined and standardized in IETF's RFC 6838.
developer.mozilla.org
브라우저 렌더링
서버로 부터 받은 데이터를 브라우저 화면 상에 표시하는 과정이다.

웹 페이지를 우리 눈앞에 생생하게 표현하기까지, 서버로부터 HTML, CSS 등 필수 리소스를 받아와야 하며, 브라우저는 이러한 리소스들을 활용해 페이지를 그려내는 꽤 복잡한 과정을 거친다. 이 과정에는 HTML 코드로부터 DOM 트리를 구성하고, CSS로부터는 CSSOM 트리를 만드는 작업이 수행되는 등 흥미로운 주제이지만, 이 모든 것을 한 번에 다루려면 포스팅 길이가 너무 길어질 것 같으므로 브라우저 렌더링 과정에 대해서는 다음 기회에 좀 더 자세히 알아보는 시간을 가지도록 하겠다.
참고 문헌
IP Address vs Domain Name | Starlink
IP Address Vs Domain Name A domain name is essentially a name for an IP address of a website. Since IP addresses consist of a combination of numbers,
starlink.mu
쉽게 이해하는 네트워크 15. 도메인 의미와 계층 구조 및 DNS 네임 서버(ft. 도메인의 가치)
도메인과 DNS 네임 서버의 이해 도메인이란? 앞서 우리가 인터넷에서 구글이나 네이버가 제공하는 웹 서비스를 이용할 수 있는 것은 구글이나 네이버가 만든 웹 서버에 누구나 접속할 수 있도록
better-together.tistory.com
브라우저에 google.com을 치면 일어나는 일들
인터넷을 어떻게 일어나는가? | 현대의 삶, 이제 인터넷 없이는 아무 일도 할 수 없는 시대가 와 버렸습니다. 하지만, 인터넷 브라우져에 google.com을 치면 어떠한 일들이 일어나는지 아는 사람들
brunch.co.kr