1. URI, URL, URN
1) URI(Uniform Resource Identifier)
- URI는 URI와 URN을 모두 포함하는 용어
- 자원의 위치(Locator)와 이름(Name)을 모두 포함
- URL은 자원이 있는 위치(Locator)를 지정하고, URN은 자원에 이름(Name)을 부여
2) URL 분석
형태 : scheme://[userinfo@]host[:port][/port][?query][#fragment]
예시 : https://www.google.com:443/search?q=hello&hl=ko
- 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 응답 메시지를 작성해 클라이언트로 회송하여 위에서 전달된 흐름 그대로 전송된다.
인프런의 김영한님의 "모든 개발자를 위한 HTTP 웹 기본 지식"라는 강의를 보고 직접 공부하면서 작성하였습니다.
혹시 문제가 있다면 바로 삭제하겠습니다.
'CS > 컴퓨터네트워크' 카테고리의 다른 글
CORS란? (Spring Boot+Security 처리) (0) | 2022.08.07 |
---|---|
HTTP와 HTTPS의 개념과 차이점에 대하여 (0) | 2022.07.31 |
HTTP 상태코드 (0) | 2022.07.10 |