[Network] URI가 뭐죠

nopecho·2022년 1월 16일
1

URI(Uniform Resource Identifier)

URI 전에 URI, URL, URN 의 차이 부터 알고 보자

"URI는 위치(Locator), 이름(Name) 또는 둘다로 분류 될 수 있다"

기본적으로 URI는 URL, URN을 포함 하는 개념이다.

URI

  • Uinform : 리소스 식별하는 통일된 방식
  • Rsource : 자원, URI로 식별할 수 있는 모든것(제한이 없다)
  • Identifier : 구분하는데 필요한 정보

URL / URN

  • URL(Locator) : 리소스가 있는 위치를 지정
  • URN(Name) : 리소스에 이름을 부여
  • 리소스의 위치는 변할 수 있지만, 이름은 변하지 않음
  • 그래서 보통 URI를 URL로 같은 의미로 이해해도 됨

URL 구조

scheme://host[:port][/path][?query][#fragment]

만약 https://www.google.com:443/search?q=hello&hl=ko라는 URL이 있다. 이 URL을 URL구조와 대입시켜서 생각해보자
URL의 구조를 하나씩 살펴본다면 이렇다.

scheme

https:// 에 해당 하는 부분이다.

  • 주로 프로토콜을 사용한다
    * 프로토콜 : 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙 (http, https, ftp 등등)
  • 기본적으로 http는 80포트 , https는 443포트를 사용한다 (포트는 생략 가능)
    * HTTPS 는 HTTP에 보안 요소를 추가한 프로토콜이다 (HTTP + Secure)

host

wwww.google.com에 해당 하는 부분

  • 접속할 서버의 호스트 명이다.
  • 서버의 도메인명 또는 직접 서버 IP주소를 입력해서 사용 가능하다

:port

:443에 해당 하는 부분

  • 접속 포트를 나타낸다
  • 일반적으로 생략, http 는 80, https는 443

/path

/search 에 해당 하는 부분

  • 리소스의 경로(path)를 나타낸다
  • path는 계층적 구조로 이루어져있다
    _home_index.html -> home의 경로의 index.html
    /member/100 -> member의 경로의 100

query

?q=hello&hl=ko에 해당 하는부분

  • key = value 형태다
  • ?로 시작하고, &으로 추가 가능하다 ( ?key1=value1&key2=value2 )
  • query parameter, query string 등으로 불린다.

웹 브라우저 요청 흐름

우리는 웹브라우저( 크롬, 사파리, 엣지 등)의 주소창에 URL을 입력하고 엔터를 쳐서 서버에 요청을 보낸다.
그럼 이 URL이 어떤 과정을 통해서 서버에 요청을 보내고 응답을 받아 오는것일까?

애플리케이션 계층 : 웹 브라우저
OS 계층 : TCP/IP
네트워크 인터페이서 : LAN드라이버, LAN장비

이러한 흐름은 대략적으로 다음과 같다.

  1. https://wwww.google.com/search?q=hello라는 URL을 클라이언트가 웹브라우저를 통해 요청을 보낸다.
  2. https://부분을 보고 어떤 프로토콜 방식을 사용할 것인지 확인한다.
  3. DNS서버가 www.google.com라는 DNS를 조회하고 해당 서버의 IP 주소를 찾는다.
  4. 웹 브라우저는 https 프로토콜을 사용하는걸 확인했으므로 DNS서버가 찾은 IP의 443포트로 요청하는 HTTP 요청 메시지를 생성한다.
  5. 만들어진 HTTP요청 메시지를 소켓 라이브러리를 통해 OS계층으로 전달 된다.
  6. OS계층에서 전달 받은 HTTP메시지로 TCP/IP패킷을 생성한다.
  7. 만들어진 TCP/IP 패킷을 LAN장비를 통해 인터넷 망으로 보낸다.
  8. 요청을 받은 서버는 같은 방식으로 HTTP응답 메시지를 만들어 클라이언트에게 전달한다.
  9. 응답 받은 HTTP메시지를 웹 브라우저가 랜더링해서 클라이언트에게 보여준다.

0개의 댓글