관리 메뉴

공부한것들을 정리하는 블로그 입니다.

사용자가 웹 브라우저에서 URL을 입력하면 어떤 과정을 거쳐 결과가 반환될까? 어떤 일이 일어날까? 본문

잡담/개발자로서 공부

사용자가 웹 브라우저에서 URL을 입력하면 어떤 과정을 거쳐 결과가 반환될까? 어떤 일이 일어날까?

호 두 2019. 11. 28. 09:32
반응형

 

우리가 흔히 쓰는 웹 브라우저(Chrome, Internet Explorer, Firefox)에 URL(Uniform Resource Locator)을 입력하고 Enter를 치면 어떻게 웹페이지가 우리 눈에 보여질까?

 

 

1. 주소표시줄에 URL을 입력하고 Enter를 입력한다.

 

2. 웹 브라우저가 URL을 해석한다.

 

3. URL이 문법에 맞으면 Punycode encoding을 url의 host부분에 적용한다.

 

4. HSTS (HTTP Strict Transport Security)목록을 로드해서 확인한다.

  - HSTS 목록에 있으면 첫 요청을 HTTPS로 보내고, 아닌경우 HTTP로 보낸다.

 

5. DNS(Domain Name Server) 조회한다.

  1) DNS에 요청을 보내기 전에 먼저 Browser에 해당 Domain이 cache돼 있는지 확인한다. (Chrome의 경우 chrome://net-internals/#dns 에서 확인 가능)

  2) 없을 경우 로컬에 저장돼 있는 hosts파일에서 참조할 수 있는 Domain이 있는지 확인한다.

  3) 1), 2)가 모두 실패 했을 경우 Network stack에 구성돼 있는 DNS로 요청을 보낸다. (DNS는 일반적으로 Local router, ISP의 캐싱 DNS)

 

6. ARP(Address Resolution Protocol)로 대상의 IP와 MAC address를 알아낸다.

  ARP broadcast를 보내려면 Network stack library가 조회 할 대상 IP 주소와 ARP broadcast에 사용할 인터페이스의 MAC address를 알아야 한다.

  ARP cache는 대상 IP에 대한 ARP 항목을 확인해서 cache가 있을경우 MAC주소를 반환한다.

  ARP cache가 없는 경우 : 

   1) 대상 IP address가 local subnet에 있는지 확인하기 위해 routing table 조회

   2) 있는경우 subnet과 연관된 interface 사용, 없는 경우 기본 gateway의 subnet과 연관된 interface 사용

   3) Network library는 Link Layer(OSI Model Layer 2)에 ARP 요청을 보냄

   4) 응답에서 target의 MAC address와 IP address로 DNS 프로세스 다시 시작

   5) DNS에 53번 포트를 열어서 UDP 요청을 보낸다. (응답 데이터가 큰경우 TCP가 대신 사용)

   6) 로컬 / ISP DNS에 없는 경우 SOA(Service-oriented architecture)에 도달 할 때까지 재귀요청을 보내서 응답을 받는다.

 

7. 대상과 TCP 통신을 통해 Socket을 연다.

   1) 브라우저가 대상 서버의 IP 주소를 받으면 URL에서 해당 포트 번호(HTTP의 기본값은 80, HTTPS의 기본값은 443)를 가져와서, TCP Socket stream 요청

   2) TCP segment가 만들어지는 Transport Layer(OSI Model Layer 4)로 전달. 대상 포트 header에 추가되고 source port는 시스템에서 동적 포트 범위내에서 임의 지정

   3) TCP segment를 Network Layer(OSI Model Layer 3)로 전달. segment header에 대상 컴퓨터의 IP주소와 현재 컴퓨터의 IP주소가 삽입된packet 구성

   4) packet이 Link Layer(OSI Model Layer 2)로 전달. 시스템의 MAC address와 gateway(local router)의 MAC주소를 포함하는 Frame header 추가 (gateway의 MAC address를 모르는경우 ARP를 이용해 찾아야 한다.)

   5) packet이 ethernet, Wifi, Cellular data network 중 하나로 전송 

    - 광인터넷을 쓸 경우 modem을 통해 광신호로 변경된 후 network node로 직접 전송

   6) packet local subnet router 도착, AS(Autonomous System)경계 router들을 통과

      해당 라우터에선 packet의 IP header에서 target address를 추출하여 적당한 다음 hop으로 routing 

      IP header의 TTL(Time To Live)필드는 통과하는 라우터의 대해 하나씩 감소

      TTL필드가 0이 되거나 현재 router 대기열에 공간이 없으면 네트워크 정체로 packet 삭제

   7) TCP socket 통신 과정 

 

8. HTTPS인 경우 TLS(Transport Layer Security) handshake가 추가된다. 

   - TLS는 SSL(Secure Sockets Layer)이 표준화 되면서 바뀐 이름이다. HTTPS로 통신을 하게 되면 7번 TCP socket 통신과정 전에 아래와 그림과 같은 통신이 추가 된다. 여기서 시간은 큰 의미는 없다.

 

9. HTTP 프로토콜로 요청한다.

  - 그냥 HTTP라면 7번의 connection set-up 이후 부터이고, HTTPS라면 8번에 있는 그림에서 168ms 부터이다.

  client가 HTTP 프로토콜을 사용해서 서버에 다음과 같은 형식으로 요청을 보낸다.

 

10. HTTP 서버가 응답한다.

  - HTTPD(HTTP daemon) 서버는 요청 / 응답을 처리하는 서버이다. 가장 일반적인 HTTPD 서버는 Linux의 경우 Apache 또는 Nginx이고 Windows의 경우 IIS이다.

 

11. 웹 브라우저가 그린다. 

  서버가 리소스(HTML, CSS, JS, Image 등)를 브라우저에 제공하면 브라우저는 아래 프로세스를 수행한다.

   - 구문 분석 - HTML, CSS, JS

   - 렌더링 - DOM Tree 구성 -> 렌더 트리 구성 -> 렌더트리 레이아웃 배치 -> 렌더트리 그리기

 

 

 

 

반응형

'잡담 > 개발자로서 공부' 카테고리의 다른 글

GraphQL vs REST  (0) 2019.12.24
웹 개발자를 위한 Web Protocols 정리  (0) 2019.12.23
CI/CD를 활용한 MSA Automation ( CI/CD )  (0) 2019.11.29
MSA의 개념과 장단점  (0) 2019.11.29
면접 예상 질문 및 답변  (0) 2019.11.28
RESTful API 설계 및 Tips  (0) 2019.01.14
크롬 개발자 도구 101  (0) 2019.01.07
Redirect vs Dispatcher Forward   (0) 2018.12.12
Comments