Computer Science

브라우저에서 google.com을 요청할 때 통신 과정이 어떻게 이루어질까?

과정 1분 요약

1. 사용자가 웹 브라우저를 통해 google.com을 입력한다.

2. url 주소 중 도메인 네임 부분을 DNS 서버에 검색한다.

3. DNS 서버에서 해당 도메인 네임에 해당하는 IP 주소를 찾아 사용자가 입력한 url 정보와 함께 전달한다.

4. 브라우저는 HTTP 프로토콜을 사용하여 요청 메시지를 생성하고 HTTP 요청 메시지는 TCP/IP 프로토콜을 사용하여 서버로 전송한다.

5. 서버는 응답 메시지를 생성하여 다시 브라우저에게 데이터를 전송한다.

6. 브라우저는 응답을 받아 파싱하여 화면에 렌더링한다.

 

설명

2번 과정부터 설명해보자.

브라우저는 사용자가 입력한 google.com에 상응하는 ip 주소를 찾기 위해 dns 기록 캐시를 확인한다. DNS는 웹 사이트의 이름(URL)과 그것이 연결된 IP 주소를 갖고 있는 데이터베이스이다. 모든 url는 자신만의 ip 주소를 갖고 있다. DNS의 주 목적은 인간 친화적인 저장소이다. 이 뜻은, 우리가 길고 긴 ip 주소를 입력해서 브라우저에 접근해야한다면 이는 매우 불편하다. 하지만 alias와 같이 해당 아이피 주소에 별칭을 붙여준다면 기억하기 쉽다. 여담이지만, 이번에 웹 애플리케이션을 aws를 이용하여 직접 배포해보았다. 이 때에도 public ip를 이용하여 검색창에 입력하여도 접근이 가능했지만, dns를 단 이유도 위 이유와 같지 않을까?

 

DNS 서버에서 해당하는 IP 주소를 찾았다면, 브라우저에 IP 주소를 보내게 된다.

더보기

만약 요청한 URL이 DNS 캐시에 없다면?

 

DNS 서버는 google.com을 갖는 서버의 IP 주소를 찾기 위해 DNS Query를 시작한다. DNS 쿼리의 목적은 올바른 아이피 주소를 찾을 때까지 인터넷에 있는 많은 DNS 서버를 검색하는 것이다. 이렇게 recursive search로 올바른 아이피 주소를 찾을 때까지 혹은 못 찾겠다는 응답을 받을 때까지 계속 수행한다. 

 

이제, 브라우저는 서버와 TCP 통신을 시작한다. 브라우저가 올바른 ip 주소를 받으면, ip 주소가 일치하는 서버와 정보 전달을 위한 연결을 시도한다. 브라우저는 그러한 연결을 위해 인터넷 프로토콜을 사용하며 TCP가 HTTP 요청을 위해 사용되는 가장 흔한 방법이다.

 

컴퓨터와 서버 간의 데이터 패킷 전송을 위해 TCP 연결이 만들어지는 것이 중요한데, 이는 TCP/IP Three-way handshake 과정을 통해 만들어진다. three-way handshake 과정을 요약하자면 신뢰성있는 통신을 위해 SYN/ACK 메시지를 교환하는 과정이다. 

 

TCP 연결이 된 후, 이제 드디어 데이터를 전송한다. 브라우저는 google.com에 대해 묻는 GET 요청을 보낸다. (여기서 GET 요청 후 결과값을 보기 위해 telnet google.com 80으로 시도해보았지만 왜 난 응답이 안오는지 잘 모르겠다.. ㅠㅠ 오면 추가해야지) 서버는 받은 요청을 처리하고 다시 응답을 보낸다. 서버의 응답에는 요청한 페이지와 함께 status code, Content-encoding, private information 등이 담겨있다. 서버로부터 받은 응답을 이용해 HTML 컨텐츠를 브라우저에 그린다. 먼저 HTML을 렌더링한 뒤, html의 태그를 통해 추가적인 요소(CSS, Image, 등)에 대한 GET 요청을 내보내며 완성된 컨텐츠를 그려나간다. 

 

 

참고 자료

- medium.com/@maneesha.wijesinghe1/what-happens-when-you-type-an-url-in-the-browser-and-press-enter-bb0aa2449c1a