[CS] 네트워크 / 웹브라우저에 google.com을 검색하면 발생하는 과정

jake·2022년 10월 24일
0

CS

목록 보기
1/6
post-thumbnail

네트워크

인터넷의 동작 과정

인터넷 vs 웹

웹의 동작 과정을 이해하기 위해서는 먼저 인터넷의 동작 과정을 이해해야 한다.
'인터넷'하면 익스플로러나 크롬 이미지를 떠올리는 사람이 있다면 우선 웹과 인터넷의 개념을 분리할 필요가 있다. 인터넷과 웹의 관계는 너무 밀접해서 마치 인터넷과 웹이 동일한 개념인 것처럼 느껴지지만 인터넷과 웹은 엄연히 다른 개념이다.

인터넷은 세상의 모든 컴퓨터를 연결하고 어떤 일이 발생하더라도 연결을 유지하는 방법 혹은 그러한 통신망을 뜻한다. 반면 웹은 인터넷을 기반으로 동작하는 여러 서비스 중 하나이다. 다른 서비스로는 이메일, 텔넷 등이 있다.


단순한 네트워크

컴퓨터는 모든 정보를 0과 1로 저장한다. 하나의 컴퓨터가 다른 컴퓨터에게 정보를 전달한다는 것은 수많은 0과 1의 시퀀스를 전달한다는 것이다. 따라서 두 개의 컴퓨터를 전선으로 연결하여 컴퓨터끼리 정보를 주고 받을 수 있게 만들 수 있다. 5V는 1, 0V는 0 이라고 약속하고 전기 신호를 보내면 서로 정보를 주고 받을 수 있다.



우탁이와 용민이가 서로 컴퓨터로 통신을 하기 위해서 다음과 같이 전선을 통해 물리적으로 컴퓨터를 연결했다고 생각해보자.

이제 우탁이와 용민이는 서로 전기적 신호를 통해서 정보를 주고 받을 수 있게 됐다. 이때 옆에 있던 도진이도 우탁이와 통신을 하고 한다면, 우탁이의 컴퓨터에 도진이의 컴퓨터를 연결하는 전선을 추가적으로 배치하면 된다.

 


만약 점점 우탁, 용민, 도진이와 통신을 하고 싶은 사람들이 점점 늘어난다면, 필요한 전선의 양은 셀 수없이 많아질 것이다. 예를 들어 10대의 컴퓨터가 서로 연결되기 위해서는 9개의 플러그가 달린 각각의 컴퓨터와 45개의 전선이 필요하다.



이러한 전선 과부화를 피하기 위해 하나의 전선을 중앙에 놓고, 각 컴퓨터는 중앙의 전선과 연결하면 필요한 플러그와 전선의 수를 줄일 수 있다.




그런데 모든 컴퓨터가 단일한 경로로 연결되어 있기 때문에 한 쪽에서 보낸 정보를 다른 모든 컴퓨터에서 수신할 수 있다. 우탁이는 용민이한테만 메시지를 보내고 싶은데 전선에 연결 되어 있는 다른 모든 컴퓨터가 메시지를 들을 수 있다.





문제를 해결하기 위해 한 쪽에서 송신한 메시지를 원하는 쪽만 수신할 수 있도록 경로를 연결해주는 것이 스위치이다. 하나의 스위치에 각 컴퓨터들을 연결해주면, 하나의 컴퓨터는 같은 스위치에 연결된 다른 컴퓨터에만 메시지를 송신할 수 있다.

이렇게 컴퓨터들이 서로 연결된 하나의 그룹을 네트워크라고 한다.

이제 범위를 좀 더 확장해보자.
우탁이는 좀 더 먼 위치에 존재하는 현이와 통신을 하고 싶어졌다.
그런데 현이는 다른 네트워크에 속해있다. 이때 서로 다른 네트워크와의 통신을 위해 스위치와 스위치를 서로 연결해 주는 장비를 라우터라고 한다.



라우터는 또 다른 라우터와 연결할 수 있다. 라우터와 라우터를 계속 연결한다면 우탁이는 수많은 컴퓨터와 통신을 할 수 있다.






인터넷

앞서 말했듯이 이 모든 것은 물리적으로 연결되어 있기 때문에 이런 연결을 담당하는 곳이 있다. 연결을 담당해주는 곳은 인터넷 서비스 제공자, ISP(Internet Service Provider)이다. ISP는 몇몇 특별한 라우터, 그리고 다른 ISP의 라우터와 연결하는 회사인데 우리나라에는 SKT, KT, LG같은 회사들이 이런 서비스를 제공한다.
우리는 다른 네트워크와의 전기선을 직접 연결하는 것이 아니라 ISP를 통해 간접적으로 연결한다.

범위를 한번 더 확장해보자. 이제 우탁이는 미국에 있는 친구와 통신을 하고 싶다. 앞서 언급했듯이 ISP는 다른 ISP와 연결되어 있기때문에 우탁이는 한국의 ISP와 미국의 ISP를 통해서 미국에 있는 친구와 연결할 수 있다. 한국과 미국을 직접 연결하는 전기선은 없기 때문에 한국의 ISP는 미국과 연결되어 있는 일본의 ISP를 통해서 연결한다.

 

이러한 연결은 아래 그림처럼 해저 광케이블을 통해 물리적으로 직접 연결되어 있다.

이렇게 전 세계의 모든 컴퓨터, 이들이 속해있는 각각의 독립적인 네트워크들이 거대한 네트워크를 이루고 있는 것이 바로 인터넷이다. 그래서 인터넷을 네트워크들의 네트워크(Network of Networks)라고도 부른다.



한 컴퓨터에서 다른 컴퓨터로 정보를 보낼 때는 이를 패킷(packet)이라는 단위로 쪼개서 보낸다. 패킷들은 여러 라우터로 연결된 통로를 따라서 수신측 컴퓨터까지 전달된다.

수신측에서는 이를 다시 재조립하여 정보를 수신한다.
송신측 컴퓨터에서 수신측 컴퓨터로 안전하고 효율적으로 정보를 보내기 위해 데이터를 어떻게 쪼개고 어떻게 전달하며 어떻게 조립할지 등에 관한 방법과 규칙들을 정의한 것을 TCP/IP(Transmission Control Protocol/Internet Protocol)라고 하며, TCP/IP는 인터넷 통신의 기본 규약이다. 이름에서 알 수 있듯이 TCP와 IP, 두 가지 프로토콜로 이루어진 프로토콜의 집합이다.

TCP는 데이터를 패킷으로 쪼개고 합치는 일에 관한 규약이고, IP는 이러한 패킷을 어떻게 다른 컴퓨터로 전달할지에 관한 규약이다. A 컴퓨터에서 B 컴퓨터로 정보를 전달하기 위해서는 각 컴퓨터가 속한 네트워크의 주소를 알고 있어야 하는데 이러한 주소를 IP 주소라고 한다.





웹브라우저에 google.com 입력하면 일어나는 과정

1. www.google.com 을 브라우저 주소창에 입력

 

2. 브라우저는 캐싱된 DNS 기록들에서 www.google.com 에 대응되는 IP 주소가 있는지 확인한다.

DNS

DNS(Domain Name System)는 URL들의 이름과 IP주소를 저장하고 있는 데이터베이스다. 인터넷에 있는 모든 URL들에는 고유의 IP 주소가 지정되어 있는데, 이 IP 주소를 통해서 해당 웹사이트를 호스팅하고 있는 서버 컴퓨터에 접근을 할 수 있다. (예를 들어, www.google.com의 IP 주소를 알아보기 위해서는 nslookup www.google.com 을 터미널에 작성하면 해당 사이트의 IP 주소를 알려준다.)

DNS는 경도 위도로 주소(IP)를 외우지 않고 도로명 주소(URL)로 주소를 외우는 것과 비슷하다. 사용자가 외우기 쉬운 주소를 컴퓨터가 해석할 수 있는 IP 주소로 바꿔주는 시스템이다.


CACHE

컴퓨터는 사용자의 명령이 입력되면 CPU는 연산을 하고 동작에 필요한 모든 내용이 전원이 유지되는 내내 RAM에 저장된다. 컴퓨터가 발전하면서 CPU의 처리속도가 RAM에 비해 훨씬 빨라져 왔기 때문에 CPU가 RAM에 접근할 때 병목현상이 일어나게 되었다. 이를 방지하고자 CPU와 RAM 사이에 용량은 작지만 속도가 빠른 작은 메모리를 탑재했는데 이것이 바로 캐시다. 캐시에는 CPU 캐시, 디스크 캐시, 브라우저 캐시 등 다양하다.


2-1 DNS 쿼리를 캐시에서 먼저 실행

컴퓨터는 주소창에 입력된 주소를 브라우저 캐시에서 가장 먼저 확인한다. 브라우저는 일정 기간동안의 DNS 기록들을 저장하고 있다. (매번 새로 데이터를 받아오는 것보다 일정 기간동안 데이터를 보관해두는 것이 속도를 더 빠르게 만들 수 있기 때문이다.) DNS 쿼리(대응되는 IP 주소를 찾는 것)가 캐시에서 가장 먼저 실행이 된다.


2-2 그 다음 브라우저는 OS(운영체제) 캐시를 확인한다.

브라우저 캐시에서 해당 IP 를 발견하지 못하면, systemcall을 통해서 OS가 저장하고 있는 DNS 기록들의 캐시에 접근한다.


2-3 그 다음 router 캐시를 확인한다.

컴퓨터에서 DNS 기록을 찾지 못하면 브라우저는 DNS 기록을 캐싱하고 있는 router와 통신을 해서 찾으려고 한다.


2-4 그래도 못 찾으면 마지막으로 ISP 캐시를 확인한다.

ISP는 인터넷 망을 제공해주는 KT, SKT와 같은 업체를 말한다. 이러한 ISP들은 DNS 서버를 구축하고 있다.

 

3. 요청한 URL이 캐시에 없으면, ISP의 DNS 서버가 www.google.com을 호스팅하고 있는 서버의 IP 주소를 찾기 위해 DNS query를 날린다.

ISP의 DNS 서버는 인터넷을 통해 다른 DNS 서버들에게 물어 도메인 이름의 올바른 IP 주소를 찾는데 책임을 가지고 있다. ISP의 DNS 서버를 DNS recursor라고 하고, 다른 DNS 서버를 name server 라고 한다.

DNS recursor는 name server에 연락한다. 다른 name server 들 중에서 www.google.com 에 매칭되는 IP 주소를 찾으면 DNS recursor로 전송한다.

이 모든 요청들은 작은 데이터 패킷들을 통해서 보내진다. 패킷 안에는 보내는 요청의 내용과 DNS recursor의 IP 주소가 포함되어 있다. 이 패킷들은 원하는 DNS 기록을 가진 DNS 서버에 도달할 때까지 클라이언트와 서버를 여러 번 오간다. 패킷들이 움직이는 것도 Routing table에 기반한다. Routing table을 통해서 어떤 길로 가야 가장 빠른지 확인할 수 있다. 만약 패킷이 도중에 손실되면 Request fail error가 발생하게 된다.


4. Browser가 서버와 TCP connection을 한다.

TCP/IP

위에서 언급했듯이 TCP/IP는 컴퓨터들끼리 네트워크로 소통을 할 때 필요한 통신규약을 말한다. IP 주소 지정 방법, 떨어진 상대를 찾기 위한 방법과 그 곳에 도달하는 순서, 그리고 웹을 표시하기 위한 순서들에 대해 정의한 규칙이다. 이러한 통신규약에는 여러 가지가 있는데 대표적인 것이 HTTP 프로토콜이고, IP 프로토콜을 사용하는 모든 프로토콜을 총칭하여 TCP/IP 프로토콜이라고 한다.

브라우저가 올바른 IP 주소를 받게 되면 IP 주소에 해당하는 서버와 connection을 빌드하게 된다. 브라우저는 인터넷 프로토콜을 사용해서 서버와 연결이 된다. 인터넷 프로토콜의 종류는 여러가지가 있지만, 웹사이트의 HTTP 요청의 경우에는 일반적으로 TCP를 사용한다.

클라이언트와 서버 간의 데이터 패킷들이 오가려면 TCP connection이 되어야 한다. TCP/IP three-way handshake라는 프로세스를 통해 클라이언트와 서버 간의 connection이 이뤄지게 된다.

  1. 클라이언트 머신이 SYN 패킷을 서버에 보내고 connection을 열어달라고 물어본다.
  2. 서버가 새로운 connection을 시작할 수 있는 포트가 있다면 SYN/ACK 패킷으로 대답을 한다.
  3. 클라이언트는 SYN/ACK 패킷을 서버로부터 받으면 서버에게 ACK 패킷을 보낸다.
  4. 이 과정이 끝나면 TCP connection 이 완성된다.


5. Browser가 웹 서버에 HTTP 프로토콜에 따른 요청을 한다.

TCP 로 연결이 되었다면, 데이터를 전송하면 된다.

클라이언트의 브라우저는 GET 요청을 통해 서버에게 www.google.com의 웹페이지를 요구한다. 요청을 할 때 비밀 자료들을 포함하던지, form을 제출하는 상황에서는 POST 요청을 사용할 수도 있다. 이 요청을 할 때 다른 부가적인 정보들도 함께 전달이 된다.

  • browser identification(User-Agent 헤더)
  • 받아들일 요청의 종류(Accept 헤더)
  • 추가적인 요청을 위해 TCP connection 을 유지를 요청하는
  • connection 헤더
  • 브라우저에서 얻은 쿠키 정보
  • 기타 등등

 

6. 서버가 요청을 처리하고 response를 생성하고 클라이언트로 보낸다.

서버는 웹서버를 가지고 있다. 이들은 브라우저로부터 요청을 받고 request handler한테 요청을 전달해서 요청을 읽고 response를 생성하게 된다. Request handler 란 ASP.NET, PHP, Ruby 등으로 작성된 프로그램을 의미한다. 이 request handler는 요청과 요청의 헤더, 쿠키를 읽어서 요청이 무엇인지 파악하고 필요하다면 서버에 정보를 업데이트 한다. 그 다음에 response를 특정한 포맷으로(JSON, XML, HTML) 작성을 한다.

서버의 response에는 요청한 웹페이지, status code, compression type(Content-Encoding) - 어떻게 인코딩 되어 있는지, 어떻게 페이지를 캐싱할지(Cache-control), 설정할 쿠키가 있다면 쿠키, 개인정보 등이 포함된다.


7. Browser가 HTML content를 보여준다.

브라우저는 HTML content를 단계적으로 보여준다. 처음에는 HTML의 스켈레톤을 렌더링한다. 그 다음에는 HTML tag들을 체크하고 추가적으로 필요한 웹페이지 요소들(이미지 파일, CSS 스타일시트, JavaScript 파일 등)을 GET으로 요청한다. 이 정적인 파일들은 브라우저에 의해 캐싱이 되어 나중에 해당 페이지를 방문할 때 다시 서버로부터 불러와지지 않도록 한다. 그 다음에는 우리가 원했던 www.google.com의 모습이 보이게 된다.

0개의 댓글