www.google.com 을 브라우저 주소창에 친다.
요약.
1. URL 해석
2. 브라우저가 도메인에 대응되는 IP주소 있는지 확인
2-1. 없으면 DNS서버가 DNS query 날림
3. 브라우저가 IP주소 받으면 서버와 TCP connection
4. 브라우저가 웹 서버에 HTTP 요청
5. 서버가 요청을 처리하고 response 생성
6. 서버가 HTTP response 보냄
7. 브라우저가 HTML content를 보여줌
URL 해석
- 문법에 맞지 않다면, 기본 검색엔진으로 검색한다. 주소창에 검색어를 입력했을 때 구글, 네이버 등으로 리다이렉트 되어지는 것이다.
- 문법에 맞다면, URL의 호스트 부분을 인코딩한다. HSTS(HTTP Strict Transport Security) 목록을 확인하고 있으면 HTTPS로 없으면 HTTP로 요청한다.
브라우저는 캐싱된 DNS 기록들을 통해 www.google.com에 대응되는 IP주소가 있는지 확인한다.
DNS(Doman Name System)은 URL들의 이름과 IP주소를 저장하고 있는 데이터베이스이다. 인터넷에 있는 모든 URL들에는 고유의 IP 주소가 지정되어있다. 이 IP 주소를 통해서 해당 웹사이트를 호스팅하고 있는 서버 컴퓨터에 접근을 할 수 있다. 즉 DNS는 전화번호부와 같은 역할을 한다.
예를 들어, www.google.com의 IP 주소를 알아보기 위해서는 nslookup www.google.com을 터미널에 작성하면 해당 사이트의 IP 주소를 알려준다. 구글을 사용하는 사용자가 매우 많기 때문에 구글의 서버 IP 주소는 여러개가 있고 nslookup으로는 그 중 내가 접근이 가능한 IP 주소를 보여준다.
- 가장 먼저 브라우저 캐시를 확인한다. 브라우저는 일정기간 동안(유저가 이전에 설정한)의 DNS 기록들을 저장하고 있다. DNS query가 이 곳에서 가장 먼저 실행이 된다.
- 그 다음에 브라우저는 OS 캐시를 확인한다. 브라우저 캐시에 웹사이트 이름의 IP 주소가 발견되지 않았다면, 브라우저는 systemcall을 통해서 OS가 저장하고 있는 DNS 기록들의 캐시에 접근한다
- 그 다음에는 router 캐시를 확인한다. 컴퓨터에 DNS 기록을 찾지 못하면 브라우저는 DNS 기록을 캐싱하고 있는 router와 통신을 해서 찾으려고 한다.
- 그래도 못 찾는다면 마지막으로, ISP 캐시를 확인한다. ISP는 DNS 서버를 구축하고 있다.
-> 여기서 캐싱이란?
캐시는 컴퓨터의 성능을 향상시기기 위해 사용되는 메모리를 말한다. 주기억장치와 CPU사이에 위치하고, 자주 사용하는 데이터들을 기억한다.
캐싱은 이 캐시 영역으로 데이터를 가져와서 접근하는 방식을 말한다. 예를 들면 속도가 느린 디스크의 데이터를 속도가 빠른 메모리로 가져와서 메모리상에서 읽고 쓰는 작업을 수행한다.
요청한 URL이 캐시에 없으면, ISP의 DNS 서버가 www.google.com을 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다.
DNS query의 목적은 여러 다른 DNS 서버들을 검색해서 해당 사이트의 IP 주소를 찾는 것이다. 이러한 검색을 recursive search라고 부른다. IP 주소를 찾을 때 까지 DNS 서버에서 다른 DNS 서버를 오가면서 반복적으로 검색하던지 못 찾아서 에러가 발생할 때 까지 검색을 진행한다.
이 상황에서, ISP의 DNS 서버를 DNS recursor라고 부르고 인터넷을 통해 다른 DNS 서버들에게 물어 물어 도메인 이름의 올바른 IP 주소를 찾는데 책임을 갖고 있다. 다른 DNS 서버들은 name server라고 불린다. 이들은 웹사이트 도메인 이름의 구조에 기반해서 검색을 하기때문이다.
Browser가 서버와 TCP connection을 한다
HTTP 요청: TCP(Transmission Control Protocol) 소켓을 열고 3-way handshake로 연결을 설정한다.
HTTPS 요청: TLS(Transport Layer Security) handshake 과정을 통해 세션키를 생성한다.
브라우저가 올바른 IP 주소를 받게 되면 서버와 connection을 빌드하게 된다. 브라우저는 인터넷 프로토콜을 사용해서 서버와 연결이 된다. 인터넷 프로토콜의 종류는 여러가지가 있지만, 웹사이트의 HTTP 요청의 경우에는 일반적으로 TCP를 사용한다.
클라이언트와 서버간 데이터 패킷들이 오가려면 TCP connection이 되어야 한다. TCP/IP three-way handshake라는 프로세스를 통해서 클라이언트와 서버간 connection이 이뤄지게 된다. 단어 그대로 클라이언트와 서버가 SYN과 ACK메세지들을 가지고 3번의 프로세스를 거친 후에 연결이 된다.
- 클라이언트 머신이 SYN 패킷을 서버에 보내고 connection을 열어달라고 물어본다
- 서버가 새로운 connection을 시작할 수 있는 포트가 있다면 SYN/ACK 패킷으로 대답을 한다
- 클라이언트는 SYN/ACK 패킷을 서버로부터 받으면 서버에게 ACK 패킷을 보낸다
이 과정이 끝나면 TCP connection이 완성되는 것이다.
-> 여기서 TCP란?
우선, 프로토콜은 서로 다른 기기들 간의 데이터 교환을 원활하게 수행할 수 있도록 표준화 시켜 놓은 통신 규약이다.
Transmission Control Protocol, 전송제어 프로토콜이다. 보통 TCP/IP라고 IP와 같이 많이 쓴다.
- TCP는 OSI 계층의 전송 계층에 해당한다.
- 신뢰성 있는 연결형 서비스를 제공한다.
- 패킷의 다중화, 순서 제어, 오류 제어, 흐름 제어 기능을 제공한다.
- 스트림 전송 기능을 제공한다.
Browser가 웹 서버에 HTTP 요청을 한다.
TCP로 연결이 되었다면, 데이터를 전송하면 된다.
클라이언트의 브라우저는 GET 요청을 통해 서버에게 www.google.com 웹페이지(index.html)를 요구한다.
요청을 할 때 비밀 자료들을 포함하던지, form을 제출하는 상황에서는 POST 요청을 사용할 수도 있다. 이 요청을 할 때 다른 부가적인 정보들도 함께 전달이 된다:
부가적인 정보는 다음과 같다.
browser identification(User-Agent 헤더)
받아들일 요청의 종류(Accept 헤더)
추가적인 요청을 위해 TCP connection을 유지를 요청하는 connection 헤더
브라우저에서 얻은 쿠키 정보
기타 등등
서버가 요청을 처리하고 response를 생성한다
서버는 웹서버를 가지고 있다(i.e. Apache, IIS...). 이들은 브라우저로부터 요청을 받고 request handler한테 요청을 전달해서 요청을 읽고 response를 생성하게 한다. Request handler란 ASP.NET, PHP, Ruby 등으로 작성된 프로그램을 의미한다. 이 request handler는 요청과 요청의 헤더, 쿠키를 읽어서 요청이 무엇인지 파악하고 필요하다면 서버에 정보를 업데이트 한다. 그 다음에 response를 특정한 포맷으로(JSON, XML, HTML) 작성한다.
서버가 HTTP response를 보낸다
서버의 response에는 요청한 웹페이지, status code, compression type(Content-Encoding) - 어떻게 인코딩 되어 있는지, 어떻게 페이지를 캐싱할지(Cache-Control), 설정할 쿠키가 있다면 쿠키, 개인정보 등이 포함된다.
response의 첫줄은 status code를 나타낸다. Status code란 현재 response의 상태를 의미하고 총 5가지의 종류가 있다:
- 1xx은 정보만 담긴 메세지라는 것을 의미한다
- 2xx response가 성공적이라는 것을 의미한다
- 3xx 클라이언트를 다른 URL로 리다이렉트함을 의미한다
- 4xx 클라이언트 측에서 에러가 발생했음을 의미한다
- 5xx 서버 측에서 에러가 발생했음읠 의미한다
Browser가 HTML content를 보여준다
브라우저는 HTML content를 단계적으로 보여준다. 처음에는 HTML의 스켈레톤(기본 틀)을 렌더링한다. 그 다음에는 HTML tag들을 체크하고 나서 추가적으로 필요한 웹페이지 요소들을(이미지, CSS 스타일시트, Javascript 파일, 등) GET으로 요청한다. 이 정적인 파일들은 브라우저에 의해 캐싱이 되서 나중에 해당 페이지를 방문할 때 다시 서버로부터 불러와지지 않도록 한다.
이 모든 것이 끝나면 www.google.com 의 모습이 보이게 된다.
'IT정보' 카테고리의 다른 글
[Computer Architecture] ARM 프로세서 (0) | 2022.08.29 |
---|---|
[면뽀] API? REST API? RESTful API? Ajax는? (0) | 2022.02.14 |
[면뽀] GET과 POST 차이 (0) | 2022.02.14 |
Library VS Framework (0) | 2021.12.06 |
Native, Hybrid, Cross-platform App 차이 (0) | 2021.12.05 |