S E P H ' S
[Network] 브라우저에 URL을 입력했을 때 발생하는 일들 본문
인터넷 브라우저에 www.naver.com 을 입력한다면 어떤 일들이 일어나는지 과정을 통해 웹 통신의 큰 흐름에 대해 알아보도록 하자.
먼저 간략한 흐름을 파악해보자.
- 웹 브라우저에 URL을 입력하면 브라우저가 URL을 해석한다.
- 웹 브라우저가 DNS를 통해 도메인으로 IP를 조회한다.
- HTTP 프로토콜을 사용하여 HTTP 요청 메시지를 생성한다.
- TCP/IP 연결을 통해 서버로 HTTP 요청을 전달한다.
- 서버는 HTTP 프로토콜을 활용해 HTTP 응답 메시지를 생성한다.
- TCP/IP 연결을 통해 요청한 컴퓨터로 전송
- 도착한 HTTP 응답메시지는 웹페이지 데이터로 변환되고, 웹 브라우저에 의해 출력된다.
1. 브라우저의 URL 파싱
URL을 입력받은 브라우저는 URL의 구조를 해석한다. 어떤 프로토콜로 어느 도메인으로 어떤 포트로 보낼지 해석하게 된다. 기본적으로 URL의 구조는 아래와 같다.
- 어떤 프로토콜을 통해 해당 URL에 요청할 것인가?
- 어떤 URL로 요청할 것인가?
- 어떤 포트로 요청할 것인가?
명시적으로 포트를 선언하지 않으면 브라우저에서는 설정된 기본 포트로 이용해 요청한다. HTTP라면 80번, HTTPS라면 443 포트를 요청하게 된다.
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 주소로 변환
www.naver.com 이라는 주소로는 컴퓨터끼리 통신이 불가하다. 이를 인터넷 상에서 컴퓨터가 읽을 수 있는 IP 주소로 변환해야 서로 통신이 가능하다. 우선 브라우저에서는 자신의 로컬 hosts 파일과 브라우저 캐시에 해당 URL이 존재하는지 확인한다. 존재하지 않으면 도메인 주소를 IP 주소로 변환해주는 DNS(Domain Name System) 서버에 요청하여 해당 URL을 IP 주소로 변환한다.
DNS 서버로 요청하는 과정
- 미리 설정된 Local DNS에 해당 URL 주소의 IP 주소를 요청한다.
- Local DNS에 해당 IP 가 존재한다면 이를 응답하고 그렇지 않으면 다른 DNS 서버와 통신한다. root DNS 서버에 해당 URL의 IP를 요청한다.
- root DNS 서버에 해당 IP 가 없다면 하위 DNS 서버에 요청하라고 응답한다. 이 응답을 받은 Local DNS는 .net 도메인을 관리하는 DNS 서버에 같은 내용을 요청한다.
- .net DNS 서버에 해당 IP 주소가 없다면 하위 DNS 서버에 요청하라고 응답한다. 이 응답을 받은 Local DNS는 naver.com 도메인을 관리하는 DNS 서버에 같은 내용을 요청한다.
- naver.com DNS 서버에서 IP 를 응답받은 Local DNS는 해당 IP 를 캐싱하고 응답한다.
4. 라우터를 통해 해당 서버의 게이트웨이까지 이동
DNS 서버에게 IP를 받았으니 이제 해당 서버로 요청을 보낸다. 요청을 보낼 주소를 임시로 10.20.30.6이라고 가정하자. 이 IP 주소로 가야하는 것은 알고 있지만 경로는 알지 못한다. 이 요청이 네트워크를 타고 어떻게 이동하는지는 네트워크 장비인 라우터의 라우팅을 통해 이루어진다.
라우터에서는 라우팅 테이블을 통해 해당 요청이 어떤 경로를 통해 가야할지 경로를 지정해준다. 이를 통해 IP 주소를 찾아가게 된다.
5. ARP를 통해 IP 주소를 MAC주소로 변환
실질적인 통신을 하기 위해서는 논리 주소인 IP주소를 물리주소인 MAC 주소로 변환해야 한다. 이를 위해 해당 네트워크 내에서 ARP(Address Resolution Protocol)를 브로드캐스팅한다. 해당 IP 주소를 가지고 있는 노드는 자신의 MAC 주소를 응답한다.
6. 대상 서버와 TCP 소켓 연결
대상 서버와 통신하기 위해 TCP 소켓 연결을 진행한다. 소켓 연결은 3-way-handshake라는 과정을 통해 이뤄진다. 이 포스팅에서 하는 요청은 HTTPS 요청이다. 그렇기 때문에 서로 암호화 통신을 위한 TLS 핸드쉐이킹이 추가된다. 이를 통해 서버와 클라이언트는 암호화 통신을 진행할 수 있다. 3-way-handshake와 HTTPS 에 대한 내용은 이후에 추가로 더 다룰 예정이다.
7. HTTP(HTTPS) 프로토콜로 요청, 응답
이제 연결이 확정되었으니 해당 페이지를 달라고 서버에게 요청한다. 서버에서 해당 요청을 받고 이 요청을 수락할 수 있는지 검사한다. 그리고 서버는 이 요청에 대한 응답을 생성하여 브라우저에게 전달한다.
8. 브라우저에서 응답을 해석
서버에서 응답한 내용은 HTML, CSS, Javascript 등으로 이뤄져 있다. 이를 브라우저에서 해석하여 렌더링한다.
출처
'CS > Network' 카테고리의 다른 글
[Network] 쿠키와 세션 (0) | 2023.12.01 |
---|---|
[Network] HTTP 1.1 & 2.0 & 3.0 (0) | 2023.12.01 |
[Network] 5. HTTP 헤더 (0) | 2023.06.11 |
[Network] 4. HTTP 메소드, 상태 코드 (0) | 2023.06.05 |
[Network] 3. HTTP 기본 (0) | 2023.06.05 |