[번역] 검색창에 URL로 검색하면 무슨 일이 일어날까?

주형(Jureamer)·2022년 4월 7일
0

해당 내용은 "What happens when you type a URL in the browser and press enter?" 의 번역 자료입니다.

1. maps.google.com을 주소창에 검색한다.

2. 브라우저는 URL(maps.google.com)과 일치하는 IP주소가 있는 지 찾기 위해 DNS 캐시를 확인한다.

DNS(Domain Name System)은 URL의 이름과 특정 IP주소를 연결하기 위한 Database다. 모든 URL은 고유의 IP주소가 할당되어있고 그 IP주소는 접속하고자 하는 웹사이트의 서버에 속해있다.

예를 들어 www.google.com이 209.85.227.104라는 IP주소 값을 갖고 있으면 http://209.85.227.104 로 타이핑했을 때 www.google.com에 도착할 수 있는 것이다.

DNS는 URL과 IP주소들의 목록으로, 전화번호부가 각각 이름과 매칭되는 전화번호를 갖고 있는 역할과 비슷하다.

DNS의 주요 목적은 인간 친화적인 이정표 역할이다. 우리는 웹사이트에 접속하기 위해 일일이 IP주소를 외워서 접속하지 않는다. 우리는 외우기 쉬운 URL을 통해 접속을하고 DNS가 올바른 IP주소를 찾는 역할을 대신 해주는 것이다.

DNS 기록을 찾기 위해 브라우저는 4개의 캐시를 확인한다.

1. 브라우저 캐시 확인. 브라우저는 이전에 방문한 웹사이트의 DNS 기록을 일정한 기간동안 저장한다. 그렇기 때문에 DNS 쿼리는 첫번째로 브라우저를 먼저 확인한다.

2. OS 캐시 확인. 브라우저 캐시에 없다면, 브라우저는 OS에 저장되어있는 DNS 캐시를 확인 하기 위해 system call을 OS에 보낸다(ex: gethostname on Windows)

3. 라우터 캐시 확인. 컴퓨터 내부에도 없다면 브라우저는 DNS 캐시를 유지하고 있는 라우터와 통신하게 된다.

4. ISP 캐시 확인. 만약 위의 시도가 다 실패한다면, 브라우저는 마지막 희망을 품으며 DNS 캐시를 포함하는 ISP(Internet Service Provider, 통신사)를 확인한다.

우리는 왜 이렇게 많은 부분에 캐시가 저장되어있는 지 궁금할 수 있다. 이건 우리가 개인정보보호 관련해 불편함을 느낄 수가 있다. 하지만 캐시는 네트워크 트래픽 조절데이터 전송속도 향상에 필수적이다.

3. ISP DNS 서버가 DNS 쿼리를 실행한다.

DNS쿼리의 목적은 다수의 DNS서버를 돌면서 해당 URL과 일치하는 IP주소값을 찾는 것이다. 이러한 검색 타입은 재귀 검색이라고 불리며 DNS 서버 사이를 돌면서 IP주소를 찾거나 찾을 수 없다는 error를 반환하기 전까지 수 없이 검색을 반복한다.


출처

우리가 오늘날 접속하는 웹사이트들은 Third-level, Second-level, Top-level 도메인을 포함하고 있다. 각 레벨의 도메인은 각각의 DNS를 갖고 있어, DNS 쿼리 실행동안 검색 대상이 된다.

maps.google.com 검색 시 DNS recursor은 root name server를 만나고 root name server는 Top-level Domain(.com)으로 보낸다. Top-level Domain은 Second-level Domain(google.com)으로 보내고 해당 도메인은 maps.google.com과 일치하는 IP주소를 DNS recursor에게 보내게 되고 브라우저로 다시 돌려준다.

이러한 요청은 요청본문과, IP 주소를 포함한 작은 data packets을 받게 되고 packets은 클라이언트와 서버 사이의 여러 네트워크 장비들 사이에서 일치하는 DNS 서버를 찾기 전까지 탐험한다. 네트워크 장비는 패킷이 목적지에 도달하기 까지 최적의 경로를 찾기 위해 routing tables를 사용한다. 만약 중간에 packets을 잃게 되면 failed error를 받고 일치하는 DNS서버를 찾게 되면 브라우저에게 올바른 IP 주소를 되돌려 받는다

4. 브라우저와 서버간의 TCP 연결을 시작한다.

브라우저가 일치하는 IP주소를 받으면 정보를 전송하기 위해 서버와 연결을 시도한다. 브라우저는 이러한 연결을 위해 인터넷 프로토콜을 사용한다. 수 많은 인터넷 프로토콜이 있지만 TCP가 HTTP requests에 가장 많이 사용된다.

연결 하기 위해 TCP Connection이 설정되야하는데 이를 위해 TCP/IP three-way handshake라고 프로세스가 실행된다.
이것은 three-stp prcoess로 연결 설정을 위해 클라이언트와 서버 사이에 동기적인 응답 메시지를 주고 받는 것이다.

  1. 클라이언트는 동기적인 packet을 서버에 보내서 새로운 연결을 요청한다.

2.서버의 포트가 열려있고 연결이 가능한 상태라면, 승인이 담긴 동기적 응답을 반환한다.

  1. 클라이언트가 응답 메세지를 받고 응답 메세지를 보내면 연결이 승인된다.

5. 브라우저는 HTTP 요청을 웹서버에게 보낸다.

TCP Connection이 설정되면 브라우저는 Get 요청을 보낸다. 만약 자격이 필요한 곳에 들어가거나 특정한 양식을 제출하는 곳에 접속한다면 POST요청을 보낼 것이다. 이 요청은 추가적인 요청을 위해 TCP Connection을 유지할 수 있는 지 질문하기 위해 브라우저를 식별할 수 있는 (ex: User-Agent) 추가적인 정보 등을 보낸다.

또한 브라우저가 이 도메인에 대해 보관하고 있는 쿠키에서 가져온 정보를 전달한다.

6. 서버가 요청을 확인하고 응답을 보낸다.

서버는 요청을 받으면 해당 요청을 확인하고 응답을 보내주기 위해 request handler로 보낸다. request handler는 어떤 요청인지, data가 update되야하는 지 등을 확인하기 위해 요청의 header와 cookies 등을 확인한다. 그리고 응답을 특정 포맷(JSON, XML, HTML)으로 만든다.

7. 서버가 HTTP 응답을 보낸다.

서버 응답은 우리가 요청한 상태코드, 압축타입, 캐시 방법 등을 포함한 웹페이지를 포함한다.

첫번째 라인의 상태코드는 응답의 상태를 말해주기 때문에 꽤 중요하다.
상태코드는 크게 다섯가지의 숫자형태로 되어있다.

  • 1XX 정보 제공 메세지
  • 2XX 성공
  • 3XX 다른 URL로 리다이렉트
  • 4XX 클라이언트 오류
  • 5XX 서버 오류

8. 브라우저는 HTML 콘텐츠를 보여준다.

브라우저는 이 때 HTML 콘텐츠를 보여준다. 먼저 HTML 뼈대를 렌더링하고 HTML 태그를 확인하고 이미지, CSS, Javascript 등을 추가 요소를 확인하기 위해 GET 요청을 보낸다.

이러한 정적 파일들은 브라우저에 캐시로 저장되어 재방문 시에는 중복해서 다운로드 받지 않게 된다.

끗.

Reference

profile
작게라도 꾸준히 성장하는게 목표입니다.

0개의 댓글