웹 통신의 큰 흐름 - 사이트 접속을하면 무슨 일이 일어날까?

박진형·2022년 4월 1일
0

Network

목록 보기
2/4
post-thumbnail

서론

브라우저의 URL창에 naver.com을 입력하면 무슨 일이 일어날까?
보통은 DNS서버에서 IP주소를 요청하고 IP주소를 받으면 해당 웹서버에 접속한다 정도로 답할 수 있겠지만 이런 답변만으로는 부족할 수 있다.
그렇기에 웹 통신의 흐름을 조금 더 자세하게 알아보고자 한다.

IP

IP는 컴퓨터를 식별하는 데 사용되는 주소값이고 IPv4, IPv6가 있으며 각각 32비트, 128비트로 이루어져있다.

흐름

사용자가 URL창에 URL을 입력하여 접속을 시도하면 DNS 서버로부터 IP주소를 받아온다.
그렇다면 DNS는 정확히 어떤 일들을 할까?

DNS

숫자로 되어있는 긴 IP 주소는 사람이 외우기 어렵다는 단점을 가지고 있다. 그래서 IP주소를 특정 별명으로 매핑을 해주는 것이 도메인 주소이고 DNS서버는 도메인 주소로 접속했을 때 도메인 주소에 매핑되는 IP 주소를 반환 시켜 연결할 수 있도록 해주는 역할을 한다.

- 캐싱

DNS 기록은 트래픽을 조절하고 전송시간을 줄이기 위해 캐싱된다. 다음과 같은 순서로 캐시를 확인한다.

  1. 브라우저 캐시
  2. OS 캐시
  3. router 캐시
  4. ISP 캐시

- 계층화된 구조

DNS 서버는 계층화된 구조를 가지고 있는데 다음과 같다.

DNS Server를 통해 IP 주소를 찾는 과정을 recursive search라고 한다.
모든 캐시에 IP의 정보가 없다면 원하는 IP 주소를 찾을 때 까지 DNS 서버를 오가며 반복적으로 검색하는 과정을 거친다.

ISP의 DNS 서버를 DNS Recursor라 부르고 이 DNS Recursor가 각 네임 서버와 정보를 주고받으며 최종적으로 사용자의 웹 브라우저에게 IP를 전달하는 역할을 한다.
대표적으로 국내에는 KT/SK/LG와 같은 통신사 DNS서버가 있다.

Authoritative DNS Server
실제 개인 도메인과 IP 주소의 관계가 저장되는 서버다. 위 그림에서는 naver.com, google.com이 속한 Second Level DNS Server가 될 수도있고, samsung.co.kr이 속한 Third Level/Sub DNS Server가 될 수도있다.

내가 생각하기엔, Second Level DNS Server, Third Level/Sub DNS Server 라는 명칭은 그저 계층의 순서를 표현하기 위한 명칭이고 정확히는 크게 아래 4가지로 구분지을 수 있을 것 같다.
1.Root Name DNS Server
2.TLD(Top Level Domain) DNS Server
3.Authoritative DNS Server
4.Recursive DNS Server(ISP, DNS Recursor)

DNS를 통한 흐름

그렇다면 위에 분류한 DNS Server들을 통해 어떤 순서로 수신측의 IP를 가져오는지는 다음과 같다.

  • naver.com에 접속을 하면 DNS Recurosr는 Root Name Server로가서 정보를 요청한다.
  • Root Name Server는 .com 네임 서버로 리다이렉트 해준다.
  • .com 네임 서버는 naver.com 네임 서버로 리다이렉트 해준다.
  • naver.com 네임 서버는 www.naver.com에 해당하는 IP 주소를 DNS Recursor에게 반환 해준다.

TCP Connection

브라우저가 IP 주소를 받게 됐다면 해당 IP와 TCP Connection을 한다. 이 과정은 3-way handshake 과정을 거친다.

  1. 클라이언트는 서버에게 SYN 패킷을 보내고 SYN_SENT 상태가 된다.
  2. 서버는 클라이언트에게 SYN/ACK 패킷 보내고 SYN_RECEIVED 상태가 된다.
  3. 클라이언트는 서버로부터 SYN/ACK 패킷을 받으면 서버에게 ACK 패킷을 보내고 클라이언트, 서버 모두 ESTABLISHED 상태가 된다.

HTTP 요청/응답

3-way handshake 과정으로 TCP 연결이 완료 되었다면 HTTP Request를 생성해 메시지를 서버로 전달한다.
서버는 HTTP Request에 대한 응답을 클라이언트로 전송한다.

브라우저 응답 출력

브라우저가 서버로부터 온 응답을 출력해준다.

정리

  1. URL창에 접속할 URL을 입력한다.
  2. DNS 캐시 정보가 있는지 브라우저, OS, router, ISP순으로 확인한다.
  3. 없다면 DNS recursor(ISP)가 각 네임 서버로 IP정보를 요청한다.
  4. 맨 처음 Root 네임 서버로 가서 TLD 네임 서버로 가고,
  5. TLD 네임 서버에서 Second Level 네임 서버로 가며,
  6. 입력한 도메인에 해당하는 IP주소를 찾을 때까지 recursive search를 한다.
  7. IP를 찾으면 TCP 연결을 한다.
  8. TCP를 통해 요청/응답을 주고 받는다.
  9. 응답을 브라우저에 출력한다.

0개의 댓글