브라우저에 URL을 요청했을 때 👣

nRecode·2021년 4월 20일
0

공부한 내용을 정리한 포스팅입니다. 틀린 부분이 있다면 지적해 주시면 감사하겠습니다.
(라우팅, 어떻게 mac주소를 알아내는 과정 더 추가하기)


인터뷰에서 url 입력 후 일어나는 일을 최대한 자세히 설명해달라는 질문을 들었을 때 당황했던 기억이 있습니다.
당시 저의 대답은 도메인에 직접 접속할 수 없으니 dns서버에서 ip를 찾은 후 응답하면 이를 이용하여 클라이언트에서는 해당하는 화면을 렌더링 한다였습니다. 너무나 많은 것이 축약되어 있습니다 ㅎㅎ...

인터뷰 단골질문인 브라우저에서 url을 입력했을 때 일어나는 일을 단계적으로 이해할 수 있도록 공부해야겠다는 생각이 들었습니다.

1. URL 파싱

URL을 입력받은 브라우저는 우선 이 url이 어떤 구조로 이루어져있는지 구조를 확인하고 정보를 얻어야합니다.

https://example.com:80

이라는 url이 있습니다.
여기서 https는 프로토콜
example.com는 url
80은 port입니다.

브라우저는 url을 통해 어떤 프로토콜로, 어떤 url로, 또 몇 번 포트로 요청할 지 분석합니다.

2. HSTS 리스트 점검

먼저 HSTS에 대해 간략히 이해를 해본다면, HTTP Strict-Transport-Security의 약자로 HTTP 대신 HTTPS만을 사용하여 통신해야 한다고 웹사이트가 브라우저에게 알리는 보안기능입니다.

다시 돌아가서, 브라우저가 분석을 마치고 나면 미리 불러들인 HSTS리스트를 점검합니다. 이 리스트는 HTTPS로만 연결되도록 요청한 웹사이트의 목록입니다. 만약 요청한 웹사이트가 이 목록에 존재한다면, 브라우저는 HTTP대신 HTTPS로 요청을 보내게 됩니다.

3. DNS Lookup (URL -> IP 주소)

DNS 캐싱이란?

캐싱의 목적은 데이터를 임시 저장하여, 데이터 요청에 대해 성능을 개선합니다. DNS 캐싱은 클라이언트와 가까운 곳에 데이터를 저장해 DNS 조회 체인의 쿼리를 피할 수 있으므로, 로드 시간이 향상되고 대역폭/CPU 소비가 줄어듭니다.

브라우저 DNS 캐싱

최신 웹 브라우저는 기본적으로 정해진 시간 동안 DNS 레코드를 캐시하도록 설계되었습니다.
브라우저 → hosts 파일 → DNS Cache의 순서로 도메인에 매칭되는 ip를 찾습니다.

캐시되어 있지 않은 도메인

example.com의 DNS lookup 과정입니다.
DNS 정보가 캐시되어 있지 않다면 아래와 같은 단계를 가집니다.

  1. 일반적으로 케이블 인터넷 공급업체가 관리하는 DNS해석기로 라우팅됩니다.

  2. DNS 루트 이름 서버에 요청을 전달합니다.

  3. 이번에는 TLD 이름 서버 중 하나에 다시 전달합니다. 위의 url에서는 .com TLD에 요청합니다.

  4. 마지막으로, 도메인의 이름 서버로 쿼리를 보냅니다. 웹 서버의 IP 주소를 받고 이 IP를 DNS 해석기로 반환합니다.

  5. 해석기는 처음 요청한 도메인의 IP 주소로 웹 브라우저에 응답합니다.

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

DNS서버에게 IP주소를 받았으니 해당 서버에게 요청을 보내야 합니다. ARP는 주소 결정 프로토콜입니다. ARP를 통해 알아낸 IP 주소로 Mac 주소를 알아내야 합니다.

먼저, ARP 캐시가 목적지 IP의 ARP 항목을 가지고 있는지 점검합니다. 캐시가 존재하지 않는다면, 해당 네트워크 내에서 ARP를 브로드 캐스팅합니다. 해당 IP주소를 가지고 있는 노드는 자신의 MAC 주소를 응답합니다.

6. 브라우저 표시

해당 example.com 페이지를 달라고 서버에게 HTTP(S) 프로토콜로 요청을 합니다. 서버는 해당 요청을 받고, 이 요청을 수락 할 수 있는지 검사합니다. 그리고 서버는 응답을 브라우저에게 전달합니다.

마침내 HTML, CSS, javascript 등으로 이루어진 것을 브라우저가 해석하여 화면에 표시됩니다.

출처

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글