사용자가 웹사이트에 접속할 때 발생하는 일

김동훈·2023년 3월 27일

서울시 관악구에 사는 베개악어가 집 노트북으로 github.com 에 접속하게 될 때, 어떤 일들이 일어나는지 아는대로 상세히, 순서대로 써보도록 해보자!

  1. 내 컴퓨터에서 브라우저 주소창에 github.com을 입력하고 엔터를 누른다.
  2. 그 순간, 가장 가까운 DNS(Domain Name System) 서버에 쿼리가 날아간다.
  3. 그 DNS 서버에서는 github.com에 등록된 공인 IP가 있는지 확인하고, 그 IP로 연결해준다. 만일 그 IP가 cache timeout을 초과한 기록이라면 새로 갱신한다. 이건 어디서 갱신해오는 지는 까먹었음.
  4. http접속이면 80번포트로, https접속이면 443번 포트로 연결해준다.
  5. 기본적으로 HTTP Request이기 때문에 단발성 통신이 이어지며, 실시간 채팅같이 socket이 필요한 경우는 따로 socket을 열어주겠지요?
  6. 위에서 말한 공인 IP는 대개의 경우 로드밸런서로 연결된다. 이후 github.com이 작동하는 서버와 통신하는 것은 그 내부의 blackbox로 처리되므로 지금 상황에서 다룰 것은 아니다.

까지가 일단 나의 생각..

순서대로 짚고 넘어가면서 자세한 내용을 확인해보자.

  1. 그 순간, 가장 가까운 DNS(Domain Name System) 서버에 쿼리가 날아간다.
    -> '가장 가까운'은 추상적이다. 일반적으로 ISP(internet service provider)에 의해 지정된 DNS 서버 IP가 PC에 등록되어 있으며, 이는 임의로 변경가능하다. 대표적인 예로 cloudflare에서 만든 1.1.1.1와 같은 public dns.
  2. DNS 서버에서 먼저 확인하기 전에, local file에 있는 기록부터 살펴본다. local cache는 정적캐시와 동적캐시가 둘 다 있는데, 없으면 DNS 서버에 요청하게 된다.
  3. 서버 IP를 알아낸 뒤에 열린 포트로 데이터를 주고받게 될텐데, 서버 IP를 알아낼 때의 자세한 이야기를 할 수 있겠다. 우선 DNS에서 도메인 트리구조에 따라 domain root부터 시작하여 낮은 단계로 propagate되면서 github.com의 주소를 알아내게 된다. ICANN에 등록되어 domain root를 관리하는 비영리기관에 처음 물어보고, 그 기관에서는 *.com을 소유한 기관에 또 쿼리를 날리고, 그 기관에서 등록된 github.com의 IP를 최종적으로 가져오게 되는 것이다.

요 정도의 정리를 할 수 있겠다 지금은!

profile
이러매 눈 감아 생각해 볼 밖에. 겨울은 강철로 된 무지갠가 보다.

0개의 댓글