URL에 접근 시 일어나는 일들
이 포스팅은 제가 해당 내용에 대한 질문에 대해 30점 정도의 답변밖에 드리지 못했던 기억이 있었기 때문에 다시 공부하고자 적는 포스팅입니다.
정말 가깝지만 사실 제대로 이해하지 못하고 있는 URL부터 어떻게 인터넷 프로토콜을 통해 원하는 리소스를 받아오는지 알아봅시다.
1. URL에서 어떻게 어떤 정보를 알아낼까?
설명을 하기 전 TCP/IP 프로토콜에 대해서 간단히 알아봅시다.
왜냐하면 우리는 인터넷 서비스를 사용하며 웹 서버와의 통신에 관련한 내용이기 때문에 통신하기 위해 필요한 정보를 얻을 필요가 있기 때문입니다.
간단하게 그려보았습니다. 우리는 정보를 전달하기 위해서는 적어도 위와 같은 정보들을 얻어야 합니다.
프로토콜 : 어떤 규약을 사용하여 통신을 할 것인지
IP : 통신 하고자 하려는 주소가 어디인지?
TCP/UDP : 통신 방법에 따라 신뢰성있는 통신을 할 것인지 또는 어떤 포트로 접근 할 것인지
Mac 주소 : 해당 주소 내의 어떤 장치에게 정보를 전달 할 것인지 (장치마다 고유번호)
URL은 다음과 같은 형태로 이루어져 있습니다.
우리가 사용할 때는 단순히 영어 단어의 조합으로 보이지만 이 내용에서 우리는 프로토콜과 IP 뿐만 아니라 포트번호와 Mac주소까지 알 수 있습니다.
프로토콜(HTTP/HTTPS/FTP 등)
일반적으로 웹 서비스는 HTTP 혹은 HTTPS 프로토콜을 사용합니다.
HyperText Transfer Protocol의 약자로써 웹 서버와 클라이언트 사이에서 문서를 전달하기 위한 프로토콜입니다.
HTTPS의 경우에는 HTTP에 Security가 추가된 프로토콜로 SSL인증서 기반의 암호화 방식으로 기존의 방식에서 보안 상 문제가 되었던 Request Message 등을 암호화 하는 방식으로 작동합니다.
HTTPS는 Handshake에 대한 포스팅을 진행하며 추가적으로 공부를 진행하겠습니다.
도메인 이름
도메인이란 인터넷 서비스에서 꽤나 중요한 개념입니다. 다양한 방식으로 이해하시는 분이 계시지만 웹 서비스를 제공하는 서버의 IP 별명 정도로 이해하셔도 괜찮습니다.
즉 우리가 https://www.google.com 을 입력하면 www.google.com의 정보를 이용하여 구글의 ip를 알아내는 과정이라고 생각하시면 됩니다.
1. DNS 캐시
가장 처음에 일어나는 DNS 탐색 방법으로 접근 한 사이트는 캐시에 도메인과 ip를 저장하는 과정이 발생합니다.
운영체제에 저장하는 방식도 있으며 브라우저에 저장하는 방식도 있다고 합니다. 두 방식 모두 DNS를 빠르게 얻어내기 위한 방식으로 목적은 동일합니다.
DNS 캐시를 이용하면 장점으로는 해당 사이트에 접근 한 적이 있다면 통신 과정을 거치지 않고 곧바로 ip를 알아낼 수 있다는 장점이 있습니다. 이로인해 빠른 접근이 가능합니다.
2. 내 컴퓨터(클라이언트)
컴퓨터 내에 /etc/hosts 라는 경로의 파일을 열어보면 127.0.0.x와 같은 내부 ip의 값을 확인할 수 있습니다. 일반적으로 localhost라는 별명을 사용하도록 설정되어 있습니다.
처음으로 웹 서버에 접근을 하게 되면 가장 먼저 이 파일을 탐색합니다. 즉 내(클라이언트)가 만든 서버인지 탐색하게 됩니다.
클라이언트가 만든 서버라면 굳이 게이트웨이를 통해 멀리 나갈 필요없이 자신의 ip와 해당 포트번호만을 가지고 접근하면 되기 때문입니다. 이런 방식 덕분에 동일 ip로 만든 웹 서버는 인터넷 연결이 끊겨도 접속 할 수 있습니다. 리소스도 자신의 서버에 있으니 리소스 전송도 문제 없습니다.
하지만 거의 모든 웹 서버는 hosts 파일에 없습니다. 그럼 다음 단계로 넘어갑니다.
3. 인터넷 서비스 제공자
인터넷 서비스 제공자라고 불리는 ISP라는 개념이 있습니다. 주로 개인이나 기업 및 단체에게 인터넷 서비스를 제공해주는 기업들이 있으며 이런 기업들은 자체적으로 DNS 서버를 운영하고 있습니다.
자녀안심 인터넷을 사용할 때 유해사이트에 접근하면 지정 된 창을 띄우며 접근을 차단 할 수 있는 이유가 중간에서 URL을 통해 접근 정보를 알 수 있는 ISP가 있기 때문입니다.
내 컴퓨터에도 입력한 도메인 이름이 없다면 네트워크 통신을 통해서 ISP에 도메인 이름을 물어봅니다. ISP가 저장하고 있는 사이트라면 해당하는 IP 정보를 줍니다.
정말 만약 여기에도 없다면!
4. .com(혹은 이외의 마지막 도메인) 을 담당하는 서버
파일의 확장자처럼 도메인 이름 중 마지막에 있는 .com 나 .io와 같은 이름은 자체적으로 관리하는 서버가 있습니다.
이 정보를 관리하는 서버라면 무조건적으로 해당 서버의 IP를 알고 있기 때문에 마지막으로는 이러한 서버에 접근하여 IP를 알아냅니다.
Mac 주소는?
우리가 알아야 할 주소 중에는 IP도 있지만 서버의 Mac 주소 또한 알아야 합니다. 이 또한 한번 통신을 한 대상이라면 ARP 캐시라는 공간에 IP에 매칭되는 Mac 주소를 저장하고 있습니다만 만약 ARP 캐시에 없다면 이 또한 알아내야 합니다.
ARP 통신 개념이 등장합니다.
IP를 통해서 현재 서버가 있는 위치까지 라우팅 과정을 거쳐 도달 할 수 있지만 같은 네트워크 상에서 동작하는 많은 기기 중 어떤 기기에 요청을 보낼 지 우리는 알 수 없습니다. 이 때 기기에 부여 된 고유 번호인 MAC 주소가 필요합니다.
ARP 통신은 네트워크 계층에서 송신자IP/수신자IP/송신자MAC 주소를 포함한 ARP 패킷을 전송합니다. 수신자MAC 주소는 초기 값을 부여합니다.
그렇게 패킷이 도달하면 요청을 받는 기기에서 응답하는 패킷을 보내주게 됩니다. 이때는 자신의 MAC 주소를 담아서 보내기 때문에 완전한 통신이 가능하고 클라이언트는 서버의 MAC 주소를 알게 되므로 ARP 캐시에 IP와 매칭하여 MAC 주소를 저장하고 다음 통신에서는 해당 주소를 통해 통신을 진행합니다.
포트번호
이름 그대로 포트번호입니다.
HTTP의 경우 80 포트를 사용하도록 약속되어 있으며, HTTPS의 경우에는 443 포트를 사용합니다.
포트번호를 지정하는 것에 대해 의문을 가지시는 분이 계실 수 있지만, 자주 사용되는 프로토콜의 포트는 고정하여 사용함으로써 다른 앱에서 사용 할 수 없도록 제한을 걸어놓는 경우가 많습니다.
리소스 경로
불러 올 리소스의 경로입니다. 웹 서버의 경우 루트 경로에서 시작하여 적절한 위치에 리소스를 저장함으로써 구조화 시켜놓는 경우가 많습니다.
예를 들면 유저가 접근 할 수 있는 경로일 경우에는 다음과 같이 경로 상에 표시하기도 합니다.
/user/service/resourse.html
or
/user/service/resourse.jsp
이렇게 접근하면 해당 페이지는 리소스를 보여줍니다.
파라미터
GET 방식을 통한 접근 시 흔히 볼 수 있는 URL에 포함 된 정보입니다.
이 값은 서버의 위치를 찾기 위한 도메인 이름과 포트번호와는 다르게 원하는 정보를 전달하기 위한 방법으로 사용됩니다. 서버에게 요청을 보낼 때 함께 보낼 정보가 저장되는 방식입니다.
길이에 대한 제한이 있으며 노출되는 점에 있어서 민감한 정보를 포함하면 안되는 조건 등 짚고 넘어갈 점이 많지만 추후에 HTTP Request에 대해서 포스팅하겠습니다.
닻
특정 위치를 나타내는 값으로 실제로 사용한 적은 없습니다.
이 값을 이용하면 페이지에 접근 할 때 특정 위치까지 스크롤을 해주는 동작을 수행한다고 합니다.
2. 동작 순서
- 처음 URL을 입력하고 접근을 하게 되면 URL을 통한 HTTP Request Message를 만들게 됩니다.
HTTP Request Message는 HTTP Method(주로 GET/POST)와 URL 등 요청에 대한 내용이 포함되어 있습니다.
-
DNS 서버를 통해 정보를 얻습니다. (캐시 / local hosts / ISP 서버)
-
서버의 MAC 주소를 알아냅니다. (ARP 캐시 / ARP 패킷 통신)
-
TCP Handshake 를 진행합니다. (3-way / 4-way)
-
SSL Handshake 를 진행합니다. (HTTPS의 경우)
이후에 추가적으로 TCP-Handshake와 SSL-Handshake에 대한 포스팅을 하도록 하겠습니다.
출처
https://smorning.tistory.com/237
https://wangin9.tistory.com/entry/브라우저에-URL-입력-후-일어나는-일들-5TLSSSL-Handshake?category=827054