브라우저에 URL을 입력하면

·2022년 6월 7일
0
post-thumbnail

1. 브라우저 주소창에 URL을 입력한다.

URL을 입력받은 브라우저는 URL을 파싱하여 구조를 해석한다.

URL의 구조

ex) https://www.google.com:443
protocol : https , http
url : www.google.com
port: 443

이때 포트를 따로 선언하지 않는다면 브라우저에서 기본으로 설정된 값을 이용해 요청한다.

  • HTTP - 80 port / HTTPS - 443 port

2. HSTS 목록을 조회 한다.

HSTS란?

 HTTP Strict Transport Security의 약자로 HTTP를 허용하지 않고 HTTPS를 사용하는 연결만 허용하는 기능이다.

HTTP로 요청이 왔다면 HTTP응답 헤더에 "Strict Transport Security"라는 필드를 포함해 응답하고, 이를 확인한 브라우저는 해당 서버에 요청할 때 HTTPS만을 통해 통신하게 된다. 이때 자신의 HSTS 캐시에 해당 URL을 저장하는데 이를 HSTS 목록이라고 부른다.

  HSTS 목록 조회를 통해 브라우저에서는 해당 요청을 HTTPS로 보낼지를 판단한다. HSTS 목록에 조회한 URL이 존재한다면 명시적으로 HTTP를 통해 요청해도 브라우저가 이를 HTTPS로 요청하게 된다.

3. 브라우저가 입력된 URL의 IP주소를 찾기 위해 DNS 기록을 확인한다.

DNS란?

  Domain Name System의 약자로 사람들이 쉽게 사이트 주소를 찾을 수 있게 도메인 주소 - IP 주소 를 연결해주는 역할을 한다.
인터넷의 모든 URL은 고유한 IP주소가 할당되어 있으며, IP 주소는 요청 웹 사이트의 서버를 호스트 하는 컴퓨터에 속한다.

DNS를 사용하는 이유는?

네트워크 트래픽을 규제하고, 데이터 전송시간을 개선하는데 필수적이다.

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

  1. 브라우저 캐시확인
    • 브라우저는 내가 이전에 방문한 웹 사이트의 DNS 기록을 일정 기간 저장하고 있다.
    • DNS 쿼리는 이곳에서 가장 먼저 실행된다.
  2. OS 캐시 확인
    • 브라우저 캐시에 원하는 IP 주소를 찾지 못했을때 실행된다.
    • OS도 DNS 레코드 캐시를 저장하고 있는데 해당 캐시에 접근하여 찾는다.
  3. 라우터 캐시 확인
    • OS 캐시에서도 찾지 못했을때 실행한다.
    • 브라우저는 DNS 기록을 캐싱하는 라우터와 통신하여 IP 주소를 탐색한다.
  4. ISP 캐시를 확인한다.
    • 위의 단계에서 IP주소를 찾지 못했을때 실행한다.
    • 브라우저는 ISP(Onternet Service Procider)에서 IP 주소를 찾는다. ISP는 DNS서버를 가지고 있는데 해당 서버에서 IP주소를 검색할 수 있다.

4. 위의 캐시에서 IP주소를 얻지 못하면 DNS 쿼리를 날려 IP 주소를 찾는다.

DNS 쿼리의 목적

 DNS 서버들을 검색해 해당 사이트의 IP주소를 찾는다.
 IP주소를 찾거나, 찾지 못해 오류응답을 보낼때 까지 반복 검색하는 재귀적 질의를 한다.

ISP의 DNS 서버인 DNS 리커서(DNS Recursor)는 다른 DNS 서버인 네임 서버(Name Server)에 물어 IP주소를 찾는다. 네임 서버는 도메인 이름 구조에 기반해 주소를 검색한다.

'www.google.com' 주소 검색
1. DNS recursor가 root name server에 연락
2. .com 도메인 name server로 리다이렉트
3. google.com name server로 리다이렉트
4. 최종적으로 DNS기록에서 'www.google.com' 에 매칭되는 IP주소 찾기
5. 찾은 주소를 DNS recursor로 보내기

이러한 요청(Request)는 내용 및 IP주소(DNS 리커서의 IP주소)와 같은 정보를 작은 데이터 패킷에 담아 전송하며 원하는 DNS기록을 가진 DNS서버에 도달할 때까지 클라이언트 ↔️ 서버를 여러번 오가는 과정을 거친다.

5. 브라우저와 해당 서버가 TCP연결을 한다.

 브라우저가 올바른 IP 주소를 수신하면 IP 주소와 일치하는 서버와 연결해 정보를 전송한다. 이때 브라우저는 인터넷 프로토콜(IP, Interntet Protocol)을 사용해 연결을 구축하며 일반적으로 HTTP 요청에는 TCP(Transmission Control Protocol)이라는 전송 제어 프로토콜을 사용한다.
 TCP 연결은 TCP/IP 3-way Handshake 과정을 통해 이뤄진다.

3-way-handshake 란?

SYN(synchronize:연결요청) 및 ACK(acknowledgement:승인)메시지를 교환해 연결을 설정하는 3단계 프로세스이다.
1. 클라이언트가 서버에 SYN 패킷을 보내 새 연결이 가능한지 묻는다
2. 서버에 새 연결을 수락할 수 있는 열린 포트가 있는 경우 SYN/ACK 패킷을 사용해 SYN패킷의 ACK로 응답한다.
3. 클라이언트는 서버로부터 SYN/ACK 패킷을 수신하고 ACK 패킷을 전송하여 승인한다.

6. 브라우저가 웹서버에 HTTP 요청을 보낸다.

TCP 연결 설정 후 브라우저는 GET 요청을 통해 서버에세 입력한 URL의 웹페이지를 요구한다. 요청할 때 부가적인 정보들도 함께 전달이 된다.

- browser identification(User-Agent 헤더)
- 받아들일 요청의 종류(Accept 헤더)
- 추가적인 요청을 위해 TCP connection을 유지를 요청하는 connection 헤더
- 브라우저에서 얻은 쿠키 정보
- 기타 등등

7. 웹어플리케이션서버(WAS)와 데이터베이스에서 우선 웹페이지 작업을 처리

WAS란?

사용자의 컴퓨터나 장치에 웹어플리케이션을 수행해주는 미들웨어이다.

 웹 서버는 브라우저로부터 받은 요청을 수행한다. 정적인 컨텐츠를 요청받은 경우 웹 서버 내에서 요청을 받아 처리하지만 동적인 컨텐츠가 있는 경우 웹 서버는 페이지의 로직이나 데이터베이스의 연동을 위해 WAS에 처리를 요청한다. WAS는 이 요청을 받아 동적인 페이지처리를 담당하고, DB에서 필요한 데이터 정보를 받아서 파일을 생성한다.
WAS에서 생성된 데이터는 다시 웹서버로 전송한다.

8. 웹서버는 브라우저에게 html 문서결과를 응답한다.

응답(response)은 상태코드(status code)로 서버 요청에 따른 상태를 보낸다.

  • 1xx : 정보만 담긴 메세지
  • 2xx : 요청 처리 완료
  • 3xx : 클라이언트를 다른 URL로 리다이렉트
  • 4xx : 클라이언트 측 오류 발생
  • 5xx : 서버 측 오류 발생

9. 브라우저는 화면에 웹 페이지를 출력한다.

profile
으쌰으쌰🐜🐜

0개의 댓글