인터넷을 어떻게 일어나는가?
현대의 삶, 이제 인터넷 없이는 아무 일도 할 수 없는 시대가 와 버렸습니다. 하지만, 인터넷 브라우져에 google.com을 치면 어떠한 일들이 일어나는지 아는 사람들은 별로 없습니다. 오늘은 거기에 대해 한번 알아보려 합니다.
자.. 유저가 브라우져에 google.com을 치면...
1. 브라우저 캐시 체크
일단 브라우저는 보통 DNS(Domain Name Service)라는 서비스를 체크하지만, 현대 브라우저에서는 여러 캐시들을 거치게 됩니다. 캐시라는 것은 정보를 저장해 놓은 창고 같은 곳인데, 이를 이용하면 보다 다른 처리가 없이 빠른 속도로 정보를 읽을 수 있습니다.
그 첫번째로, 브라우져 캐시가 있는데 기존에 google.com을 방문했다면, 구글에 빠르게 접근할 수 있는 내용들이 거기 다 들어가 있습니다. 두번째로, 첫번째에서 찾을 수 없었다면, OS캐쉬를 찾아보게됩니다. OS캐쉬는 말 그대로 운영체제 안에 있는 캐쉬로 `systemcall`을 통해 그 내용에 접근할 수 있습니다.
세번째는 라우터 캐시를 확인합니다. 라우터란, 집에서 사용하는 공유기를 생각하시면 됩니다. 거기서도 DNS 내용을 저장하기 때문입니다. 마지막으로 ISP(Internet Service Provider)캐시 한국에서는 인터넷을 제공하는 회사를 생각하시면 되고, 미국에서는 Comcast나 AT&T를 생각하시면 됩니다.
이러한 캐시들이 있는 이유는, 인터넷 스피드를 최대한 빨리 하기위한 방법이라고 생각하시면 됩니다.
2. DNS(Domain Name Service)로 IP 주소 획득
ISP 캐시에서까지 그 IP주소를 찾을 수 없었다면, 이제 ISP의 DNS server에다가 DNS 쿼리를 보내야 합니다. 즉, "구글이라는 주소 IP주소 알면 나한테 좀 가르쳐줘"라며 여기저기 물어보는 겁니다. 이를 Recursive search라고 하는데, 아래의 순서대로 찾기 시작합니다. 이러한 일은 ISP의 DNS recursor가 담당하며, 다른 DNS name서버에다가 물어보는 일을 합니다.
위의 내용을 설명하자면, DNS recursor에서 Root domain에 연락을하고, 이는 Top-level domain인 .com DNS에 물어보게 되고, 그다음에는 Second-level domain google.com name server로 이동되며, 거기서 기본이 되는 www의 ip address를 DNS recursor에 보내게 됩니다.
결국에는 google.com이 142.250.189.238라는 IP 주소를 찾게 됩니다.
3. 브라우저가 TCP/IP 프로토콜을 사용해 서버에 연결
이제 IP주소를 알게 되며, TCP(Transmission Control Protocol)/IP(Internet Protocol)를 사용해 서버에 연결을 하려고 신호를 보냅니다. 신호는 밑에 있는 형식을 사용하며 TCP부분은 데이터를 잃지 않고 잘 보내는 방법을 담당하고 있으며, IP부분은 주소에 맞게 잘 보내는 쪽을 담당하고 있습니다.
이제 TCP연결을 해야하는데, 그 방법을 3way handshaking이라고 합니다. 말그대로 여러번 악수를 하며, 클라이언트와 서버가 안전하게 잘 알아듣고 연결을 해주는 방법입니다.
처음에는 클라이언트가 SYN 신호를 보내며, 포트(서버에는 65,000개의 포트가 있음) 좀 열어달라고 물어보면, 서버가 SYN와 ACK을 보내고, 클라이언트가 내가 보낸 정보가 맞는지 확인 후, 서버에게 잘 받았다고 다시 ACK를 보냅니다. 이렇게 되면 서로 안전하게 정보를 교환할 수 있는 길이 연결이 됩니다.
4. Firewall & Https/SSL
이러한 TCP 연결을 하는 중, Firewall과 https나 SSL이라고 하는 접근 제한 방법이 있습니다. Firewall은 불이 났을 때, 공기를 차단하는 벽처럼, 인터넷에서도 해커가 무자비한 서비스 트래픽을 보내는 경우를 대비해 Firewall을 설치해, 특정 IP주소나 어떤 지역에서 접근해 오는 신호를 차단할 수 있으며, Https/SSL은 클라이언트와 서버와의 암호화를 통해 중간에 누가 패킷을 엿듣는 것을 차단합니다. 우리가 스타벅스에서 인터넷을 쓴다면, 스타벅스에서 서버에 그 데이터 패킷이 도달하기 전에 우리의 데이터 패킷을 볼 수 있기 때문에 그 서버와 클라이언트만 알 수 있는 암호화를 통해 이를 원천 차단합니다.
5. Load balancer
여러분도 아시겠지만, 구글이 컴퓨터 한대를 가지고 서비스를 제공하지는 않겠죠? 바로 Load balancer가 트래픽을 잘 측정해 그 뒤에 있는 여러대의 서버중 트래픽을 받을 수 있는 서버에게 잘 보내줍니다. 이는 사거리에 경찰이 교통을 잘 정리해 주며, 트래픽이 망가지거나 지연되지 않도록 해줍니다.
6. 웹서버
TCP 연결이 된 후, 이제 클라이언트는 데이터를 보내게 되고, 그 데이터는 "나에게 첫 페이지를 보내줘"라는 신호와 함께 보내지게 됩니다. 여기에는 브라우저 버전과 종류, 쿠키(사용자 정보)등의 내용이 보내지게 되며, 구글은 여기서 사용자에게 필요한 내용을 요청한 방식으로 보내주게 됩니다. 여기에는 내용과 함께 HTTP 코드 또한 보내져, 성공 아니면 실패등의 정보를 알 수 있습니다.
7. HTML 컨텐트 렌더링
이제 브라우저는 구글 서버에서 받은 HTTP코드와 HTML을 통해 렌더링을 시작하며, 필요한 이미지나 다른 파일들이 있으면, 또 보내달라고 요청을 하며, 사용자는 구글의 페이지를 보게 됩니다.
짜잔! 여기까지가 우리가 브라우저에서 google.com을 입력했을 때 이루어지는 일들이었습니다.