URI와 웹 브라우저 요청 흐름

KosMos·2022년 9월 27일
0

URI, URL, URN

1) URI(Uniform Resource Identifier)

  • URI는 URI와 URN을 모두 포함하는 용어
  • 자원의 위치(Locator)와 이름(Name)을 모두 포함
  • URL은 자원이 있는 위치(Locator)를 지정하고, URN은 자원에 이름(Name)을 부여

2) URL 분석

  • scheme : 주로 프로토콜을 사용하며 어떤 방식으로 자원에 접근할 것인가 하는 규칙
    - ex : http, https, ftp 등등
  • userinfo : 사용자 정보를 포함해서 인증에 사용하며 거의 사용하지 않음
  • host : 호스트명, 도메인명 또는 IP 주소를 직접 사용 가능
  • port : 접속 포트로 IP가 컴퓨터의 논리적인 주소면 port는 컴퓨터에서 실행되는 앱의 주소
    - http는 80, https 443이 기본 포트번호이며 생략 가능
  • path : 리소스 경로로 계층적 구조로 이루어짐
    - ex : /members, /members/100, /items/iphone12, ...
  • query : key-value 형태의 pair resource이며 ?로 시작하며 &로 자원 추가가 가능함
    - 형태 : ?a=b&c=d
    - query parameter 또는 query string으로 부름
  • fragment : html 내의 북마크에서 사용되며 서버에 전송되는 정보가 아님

2. https://www.google.com/ 을 접속할 때 일어나는 일

1) 웹 브라우저에서 서버로 요청했을 때의 흐름

https://www.google.com:443/search?q=hello&hl=ko

(1) 브라우저의 URL 파싱

  • 브라우저에서 어떤 프로토콜,URL, 포트로 요청할 것인지 분석
  • 명시적으로 포트를 선언하지 않았다면 HTTP는 80, HTTPS는 443의 디폴트 값으로 요청
  • 브라우저는 URL에 적힌 값을 파싱해 HTTP Request Message를 만들어 OS에 전송을 요청하며, 이때 Domain으로 요청을 보낼 수 없어 DNS Lookup을 수행

HTTP 요청 메시지
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com

(2) DNS Lookup 과정

  • 브라우저 -> hosts 파일 -> DNS cache 순서로 도메인에 해당되는 ip를 찾기
  • 일반적으로 DNS Lookup은 루트 도메인 -> 서브 도메인 서버 순으로 찾음

(3) HTTP 메시지 전송

  • 웹 브라우저가 HTTP 메시지를 생성하며 SOCKET 라이브러리를 통해 전달된다.
  • 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 HTTP 메시지를 담은 패킷을 생성한다.
  • 네트워크 인터페이스 계층에서 패킷에 네트워크 제어 정보를 덧붙여 LAN 어댑터에 전송하고 LAN어댑터는 이를 전기 신호로 변환시켜 송출한다.

(4) 라우터를 통해 패킷 이동

  • 패킷은 스위칭 허브를 경유해 인터넷 접속용 라우터에서 ISP로 전달되고 인터넷으로 이동한다.
  • 액세스 회선에 의해 통신용 라우터로 운반되어 인터넷의 핵심부로 전달된다.
  • 고속 라우터들 사이로 목적지까지 패킷이 전달되기 됩니다.

(5) 목적지 도착

  • 핵심부로 통과한 패킷은 목적지의 LAN에 도착하여 방화벽이 패킷을 검사한다.
  • 캐시 서버로 보내어 웹 서버에 갈 필요가 있는지 검사한다.
  • 웹 서버에 도착한 패킷은 프로토콜 스택이 패킷을 추출해 HTTP 메시지를 복원하며, 웹 서버 어플리케이션으로 넘긴다.
  • 애플리케이션은 요청에 대한 HTTP 응답 메시지를 작성해 클라이언트로 회송하여 위에서 전달된 흐름 그대로 전송된다.

0개의 댓글