서울시 관악구에 사는 베개악어가 집 노트북으로 github.com 에 접속하게 될 때, 어떤 일들이 일어나는지 아는대로 상세히, 순서대로 써보도록 해보자!
- 내 컴퓨터에서 브라우저 주소창에 github.com을 입력하고 엔터를 누른다.
- 그 순간, 가장 가까운 DNS(Domain Name System) 서버에 쿼리가 날아간다.
- 그 DNS 서버에서는 github.com에 등록된 공인 IP가 있는지 확인하고, 그 IP로 연결해준다. 만일 그 IP가 cache timeout을 초과한 기록이라면 새로 갱신한다. 이건 어디서 갱신해오는 지는 까먹었음.
- http접속이면 80번포트로, https접속이면 443번 포트로 연결해준다.
- 기본적으로 HTTP Request이기 때문에 단발성 통신이 이어지며, 실시간 채팅같이 socket이 필요한 경우는 따로 socket을 열어주겠지요?
- 위에서 말한 공인 IP는 대개의 경우 로드밸런서로 연결된다. 이후 github.com이 작동하는 서버와 통신하는 것은 그 내부의 blackbox로 처리되므로 지금 상황에서 다룰 것은 아니다.
까지가 일단 나의 생각..
순서대로 짚고 넘어가면서 자세한 내용을 확인해보자.
- 그 순간, 가장 가까운 DNS(Domain Name System) 서버에 쿼리가 날아간다.
-> '가장 가까운'은 추상적이다. 일반적으로 ISP(internet service provider)에 의해 지정된 DNS 서버 IP가 PC에 등록되어 있으며, 이는 임의로 변경가능하다. 대표적인 예로 cloudflare에서 만든 1.1.1.1와 같은 public dns.
- DNS 서버에서 먼저 확인하기 전에, local file에 있는 기록부터 살펴본다. local cache는 정적캐시와 동적캐시가 둘 다 있는데, 없으면 DNS 서버에 요청하게 된다.
- 서버 IP를 알아낸 뒤에 열린 포트로 데이터를 주고받게 될텐데, 서버 IP를 알아낼 때의 자세한 이야기를 할 수 있겠다. 우선 DNS에서 도메인 트리구조에 따라 domain root부터 시작하여 낮은 단계로 propagate되면서 github.com의 주소를 알아내게 된다. ICANN에 등록되어 domain root를 관리하는 비영리기관에 처음 물어보고, 그 기관에서는 *.com을 소유한 기관에 또 쿼리를 날리고, 그 기관에서 등록된 github.com의 IP를 최종적으로 가져오게 되는 것이다.
요 정도의 정리를 할 수 있겠다 지금은!