search

오늘은 URL을 입력할 경우, 브라우저의 동작, 웹 통신의 흐름에 대해서 알아보겠다.
URL을 입력할 경우, 생기는 일은 다음과 같다.


1. 브라우저의 URL 파싱

URL을 입력받은 브라우저는 URL의 구조를 해석한다.

  • 어떤 프로토콜을 통해 해당 URL에 요청할 것인지
  • 어떤 URL로 요청할 것인지
  • 어떤 포트로 요청할 것인지

http://www.dlord.shop 이 있다고 하면 http는 프로토콜, www.dlord.shop은 URL, 포트가 안적혀있을 시, 브라우저에서 설정된 기본값으로 요청하게 된다.

HTTP라면 80포트, HTTPS라면 443 포트를 기본 값으로 요청한다.

2. HSTS 목록 조회

사용자가 최초로 사이트에 접속 시도를 하게 되면 웹서버는 HSTS 설정에 대한 정보를 브라우저에게 응답하게 된다. 브라우저는 이 응답을 근거로 일정시간동안 HSTS 응답을 받은 웹 사이트에 대해서 https 접속을 강제하게 된다.

HSTS란 Http Security Transport Sercurity로 HTTPS를 사용하는 연결만 허용하는 기능이다. HTTP 응답헤더에 “Strict Transport Security”라는 필드를 포함하여 응답하고 이를 확인한 브라우저는 해당 서버에 요청할 때 HTTPS만을 통해 응답하게 된다. 브라우저는 자신의 HTST 캐시에 해당 URL을 저장하는데 이를 HSTS 목록이라고 한다.

이를 통해 브라우저는 해당요청을 HTTPS로 보낼지 판단한다. HSTS목록에 해당 URL이 존재한다면, 명시적으로 HTTP를 통해 요청한다 해도 브라우저는 HTTPS로 요청한다.

3. URL을 IP 주소 변환

www.dlord.shop은 어디까지나 도메인 주소에 불과하므로, IP 주소로 변환해야 한다. 브라우저는 자신의 로컬 hosts 파일과 브라우저 캐시에 해당 URL이 존재하는지 확인한다. 존재하지 않을 경우, 도메인 주소를 IP 주소로 변환해주는 DNS(Domain Name System) 서버에 요청하여 URL을 IP 주소로 변환한다.

DNS는 ISP(Internet Service Provider)가 관리하는 시스템 Domain Name System을 일컫기도 하고, 서버 컴퓨터인 Domain Name Server를 일컫기도 한다.

4. 라우터를 통해 해당 서버의 게이트웨이까지 이동

DNS 서버로부터 IP 주소를 받았으면, 해당 서버로 요청을 보낸다. 해당 IP 주소로 가야하는 것은 알지만, 어떻게 가야 할지 경로는 알 수 없다. 이 요청이 네트워크를 타고 어떻게 이동할지는 네트워크 장비인 라우터의 라우팅을 통해 이루어진다.

라우터는 컴퓨터 네트워크에서 데이터를 송수신하는 장치이며, 패킷을 목적지까지 전달하기 위해 네트워크 지점을 결정한다. 라우터에서 라우팅 테이블을 통해 어떤 경로를 통해 가야할지 경로를 지정해준다.

게이트웨이는 네트워크에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점이다.

5. ARP를 통해 IP 주소를 MAC 주소로 변환

실질적인 통신을 하기위해서 IP 주소를 물리 주소인 MAC 주소로 변환한다. 이를 위해 해당 네트워크에서 ARP를 브로드캐스팅한다.

ARP는 IP 주소를 MAC 주소로 변환해주는 프로토콜이다. 브로드 캐스팅은 전송한 데이터가 네트워크에 연결된 모든 호스트에 전송되는 방식을 말한다.

해당 IP 주소를 가지고 있는 노드는 자신의 MAC 주소를 응답한다.

6. 대상 서버와 TCP 소켓 연결

대상 서버와 통신하기 위해 TCP 소켓 연결을 진행한다. 소켓 연결은 3-way-handshake라는 과정을 통해 이루어진다. HTTPS 요청일 경우, 서로 암호화 통신을 위한 TLS handshaking이 추가된다.

3-way-handshake TCP에게 연결지향적 특성을 갖게 해주는 과정으로, 간단히 말하면 서로 연결이 잘되어있는지 확인하기 위한 과정이다.

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다. 클라이언트는 응답을 기다리는 SYN-SENT 상태가 된다.
  2. 서버는 응답하기 위해 Listen 상태여야하며, 요청을 수락한다는 ACK가 설정된 패킷을 클라이언트에 보내며 응답을 기다리는 상태인 SYN-RECEVIED가 된다.
  3. 클라이언트는 서버에게 ACK를 보내고 이후부터 연결이 이루어지고 데이터가 오가게 된다. 서버의 상태는 ESTABLISHED가 된다.

위의 3가지 과정을 통해 신뢰성 있는 연결을 맺어준다는 의미에서 3-way-handshake이다.

7. HTTP(HTTPS) 프로토콜로 요청, 응답

연결이 확정되며 해당 페이지 www.dlord.shop을 달라고 서버에게 요청한다. 서버에서 요청을 받고 수락할 수 있는 요청인지 검사한다. 서버는 요청에 대한 응답을 브라우저에게 전달한다.

8. 브라우저에서 응답을 해석

서버에서 응답한 내용은 HTML, CSS, Javascript 등으로 이루어져있으며, 브라우저에서 해석해서 렌더링한다.


myImage
오늘도 수고하셨어요


Reference

https://deveric.tistory.com/97
https://sleepyeyes.tistory.com/4
https://dentuniverse.tistory.com/16

You might also enjoy