우리가 'http://www.google.com' 으로 들어갔을 때 무슨일이 벌어질까에 대한 대략의 그림에 대해 포스팅하고자 한다.
일단 url 이란 무엇인가에 대해 먼저 설명해야겠다.
url 총 세가지로 구성된다.
(1) 프로토콜 (2) 도메인 주소, ip 주소, 포트 주소 (3) 자원 위치
예를 들어 'http://www.google.com' 을 예시로 보면 'www.google.com'이 도메인 네임이 되는 것이다.
그러나 조금 관심있는 사람이면 알만한 상식(?)으로는 네트워크 세계는 '원래' 각자의 ip 주소를 통해 연결되고 소통한다. 그렇다면 우리는 어떻게 읽기 좋은 'www.google.com'을 통해 여러 서버와 소통하고 있는가?
위의 얘기에 임팩트가 없어보이나 하고자 하는 말은 결국 'ip로 통신 해야하는 네트워크 세계에서 우리는 어떻게 읽기 힘든 수 조합 따위를 모른채 살아가는가?' 이다. 그 뒷 배경에는 도메인 네임 시스템(Domain Name System, DNS)이라 하여 인간의 언어를 ip 주소로 매칭시켜주는 시스템이 있다.
이 때 이 변환을 책임지고 있는 서버를 우리는 네임 서버(Name Server) 라 부른다. 이를 매칭시켜주는 과정은 아래에 기술하겠다. (하나만 미리 말하자면, 각 스텝에 검색을 담당하는 부분에서 우리가 원하는 정보를 찾았다면 그 과정은 종료된다.)
브라우저 주소창에 도메인을 검색하게 되면 PC는 각자에게 설정된 DNS(로컬 DNS)에 도메인 이름을 찾는다.
만일 로컬 DNS에 도메인 주소와 매치되는 캐시된 ip 주소가 없다면 다른 DNS 서버(루트 네임 서버, TLD 네임 서버, 네임 서버)와 통신을 하게 된다. (이를 iterative query 라 한다.)
루트 네임 서버에 묻는다. 모른다면 찾을 수 있는 TLD 서버에 대해 알려준다.
'.com' 을 관리하는 TLD네임 서버에게 묻는다.TLD 서버가 모른다면 이 때 세컨드 도메인을 관리하는 네임 서버에 대해 알려준다.
네임 서버(Authoritative name server)에게 묻는다.(네임서버는 무조건 답을 알고 있다.)
로컬 DNS 는 ip 주소를 캐싱하고 정보를 브라우저에 전달한다.
우리는 이제 특정 도메인을 가진 서버와 소스를 주고 받을 수 있게 된다.
이렇게 설명이 끝나도 될 것 처럼 그림은 완성되었다. 하지만 우리가 통신/교류/소통을 하기 위해선 그 안에 서로가 지켜야 할 선 또는 규약이 있다.
우리는 이를 프로토콜(Protocol) 이라 부른다. 웹 통신을 함에 있어서는 크게 두 가지의 프로토콜이 존재한다.(후에 더 자세하게 포스팅 할 수 있도록 하겠다.)
말 그대로 WEB 내에서 통신 기기 간에 메세지(요청(request), 응답(response))를 주고받는 양식과 규칙에 대한 체계이다.
과거 IP 를 통해 통신하던 시대에 발생했던 패킷 순서와 정확도에 대한 문제를 해결하고자 TCP 를 상위에 추가하여 자원을 주고 받는 방식을 개선 한 것이다.
앞서 찾아 냈던 바와 같이 우리는 접속하고자 하는 서버의 IP 주소를 알고 있다. 이제 위의 규약들을 기반으로 서버와 진짜 통신을 하게 된다. 이런 '연결 과정'을 우리는 TCP/IP 커넥션 이라 부른다.
이젠 정말 전체적인 그림은 만들어진 것 같으나, 보안 이슈, 성능 개선 등의 이유로 등장한 '프록시 서버'란 것이 있다.
이름에서 보이듯 클라이언트와 서버 사이에서 중계 역할을 하는 서버이다.
크게 세가지의 이유로 프록시 서버를 사용하게 된다.
네임 서버들이 해줄 역할을 프록시 서버가 대신하여 외부 트래픽을 줄이고 효율성을 높일 수 있다.
프록시 서버를 중간에 경유하게 되어 자신의 IP를 숨기는 것이 가능하다.
간혹 본인의 국가에서 접속이 제한 되는 사이트가 있다. 이를 프록시 서버를 사용하면 다른 나라로 우회 접속이 가능하므로 IP 검사로 부터 자유로울 수 있다.
여기까지가 클라이언트와 서버 간의 통신에 있어 간단한 그림 정도라 할 수 있다. 세부적으로 설명이 부족한 부분이 굉장히 많다고 생각한다. 추후에 네트워크 공부가 더 되었을 때 조금 더 세분화하여 각 부분별로 더 자세히 포스팅 할 수 있도록 하겠다.