본문으로 바로가기

인터넷 주소창에 naver.com 을 입력하고 Enter키를 눌렀을 때 일어나는 과정들을 알아보자.

1. 브라우저의 URL 해석/파싱

크롬 주소창에 www.naver.com을 입력하고 엔터를 눌렀을 때, 가장 먼저 일어나는 일은 URL을 해석하는 과정이다.

즉, 어떤 프로토콜을 사용할 것인지, 어떤 URL로 서버에 요청을 보낼 것인지, 어떤 포트번호로 요청할 것인지 해석하는 과정이 이루어 진다.

여기서 참고해야 할 점은 우리는 주소창에 www.naver.com만 입력했지만 브라우저 내부적으로 기본값으로 http를 사용한다면 포트번호 80을 부여하고, https를 사용한다면 포트번호 443을 부여하게 된다.

☞https, port 용어 설명
http : 하이퍼 텍스트 전송 규약이라는 뜻으로 HTML 같은 문서를 웹 브라우저가 웹 서버에 요청하는 프로토콜이다. 프로토콜이란 네트워크에서 데이터를 교환하거나 전송하기 위한 방법들의 집합이다.

https : http와 거의 동일하지만 통신 내용을 암호화 한다.

port : 기술적으로 웹 서버에서 자원을 접근하기 위해 사용하는 gate를 의미한다. IP주소가 우리집 주소라면 port 번호는 우리집의 상세주소 (몇동,몇호) 라고 생각하면 된다.

1-2 . HSTS

만약 https 프로토콜을 사용하여 접근해야 하는 사이트에 http 프로토콜로 접근하게 되면 어떤 일이 발생할까?

기본적으로 생각할 수 있는것은 https로 접근해야 하는 사이트에 http로 요청이 오게 되었을때 서버측에서 302 : Redirect 를 통해 https로 전환시킬 수 있다.

하지만 이 방법은 http 연결을 거쳐서 https로 전환되는 과정이기 때문에 쿠키 탈취 등 보안상 안전하지 못하다.

따라서 https 를 클라이언트에게 강제하도록 해야하는데, 이 때 HSTS를 사용한다.

☞HSTS란?
HTTP Strict Transport Security(HSTS) : 웹 브라우저가 HTTPS 프로토콜만을 사용하여 서버와 통신하도록 하는 기술로 HSTS 응답을 받은 웹 사이트에 대해서 HTTPS 프로토콜 사용을 강제화 한다.
HTTP를 이용한 연결 자체가 최초부터 시도되지 않으며 클라이언트 측에서 차단된다.

HSTS를 지원하는 웹 브라우저에는 내부에 HSTS List를 보유하고 있다. 즉 HTTPS 프로토콜을 사용해야만 하는 웹 사이트들의 정보를 보유하고 있다는 뜻이다.

브라우저(크롬,사파리 등등)는 이 HSTS의 리스트에 우리가 요청할 웹 사이트가 존재하는지 확인한다. 이후 목록에 해당 웹사이트가 존재한다면 브라우저가 HTTP 대신 HTTPS 프로토콜을 사용하여 요청을 보내게 된다.

2. DNS서버에서 IP주소 받아오기 (URL -> IP Address)

우리가 인터넷에 입력한 www.naver.com은 컴퓨터가 바로 이해할 수 없다. 인간이 이해하기 쉽도록 도메인 이름을 사용하던 URL을 컴퓨터가 이해할 수 있도록 IP 주소로 변경해야 한다. 이 역할을 하는것이 바로 DNS(Domain Name System) 이다.

  1. 브라우저는 해당 URL의 IP 주소를 Local DNS에 요청한다.
  2. Local DNS에 해당 URL이 존재한다면 바로 응답을 보내고 존재하지 않는다면 root DNS 서버에 해당 URL의 IP 주소를 다시 요청한다.
  3. root DNS서버에도 해당 URL이 없다면 하위 DNS 서버에 요청하라는 응답을 준다.
  4. 하위 DNS 서버에 요청하라는 응답을 받은 Local DNS는 .com 도메인을 관리하는 DNS 서버에 해당 URL의 IP주소를 다시 요청한다.
  5. .com을 DNS 서버에 해당 URL의 IP주소가 없다면 또 다시 하위 DNS 서버에 요청하라는 응답을 준다.
  6. Local DNS 서버는 naver.com을 관리하는 DNS서버에 다시 요청을 보낸다.
  7. naver.com을 관리하는 DNS 서버에게 IP주소를 응답받은 Local DNS는 해당 IP 주소를 캐싱하고 응답한다.

7번 과정까지 마치게 되면 URL 주소를 Local DNS에 캐싱하게 된다. 따라서 다음 요청부터는 바로 위 그림처럼 바로 IP주소를 응답받게 되는 것이다.

3. 라우터를 이용해 접속하려는 네트워크로 가는 최적의 경로 찾기

DNS에게 IP주소를 얻었지만 우리가 접속하려는 서버는 동일한 네트워크 안에 위치하고 있지 않다. 따라서 라우터를 통해 해당 서버의 게이트웨이를 찾아 우리가 원하는 서버의 네트워크로 이동해야 한다.

4. DNS서버에서 응답 받은 IP 주소를 MAC 주소로 변환 (APR)

☞IP주소와 MAC 주소의 차이점
IP : 네트워크 통신에 있어서 각각의 통신기기(컴퓨터,노트북,스마트폰 등)에 할당된 식별번호를 나타낸다. 쉽게 말하면 편지를 주고 받기 위한 집주소 라고 이해하면 된다. IP주소는 통신 기기마다 고유하게 할당되어 있는 것이 아니라 대부분 통신사에 일정 금액을 지불하고 받아오는 것이기 때문에 경우에 따라 변경된다.

MAC : MAC주소도 IP주소와 마찬가지로 네트워크 통신에서 통신기기의 식별번호를 나타낸다. IP주소와의 차이점은, IP주소는 임시적으로 다른 주체에 의해 할당되는 것이지만, MAC주소는 통신기기의 하드웨어 자체에 부여된 고유한 식별번호를 나타낸다. 세상에 단 하나밖에 없는 유니크한 값을 가지며, 변경되지 않는다.
이러한 특징 때문에 MAC 주소는 외부에서 내부의 사설IP로 통신을 요청할 때 중요한 역할을 한다. 사설IP는 외부에서는 볼 수 없기 때문에 어떤 사설IP가 최종 목적지인지 알 수 없는데, MAC주소를 알고 있다면 IP주소에 구애받지 않고 원하는 최종 목적지에 도달할 수 있기 때문이다.

IP주소를 통해서 해당 IP 서버가 있는 곳이 로컬 네트워크가 아닌 경우 그 지역 라우터까지 패킷이 전달된다. 라우터에서는 IP 주소에 해당하는 컴퓨터가 누군지 알아내기 위해 MAC 주소가 필요하다.

 

즉, 우리가 접속하려는 서버의 네트워크를 찾기 위해 IP주소를 사용하고, 그 네트워크 내부에 있는 컴퓨터와 통신하기 위해 MAC 주소가 필요한 것이다.

 

ARP(address resolution protocol)는 논리주소인 IP 주소를 물리주소인 MAC 주소로 변환해주는 역할을 한다.

  1. 송신측은 목적지의 MAC주소가 필요하므로 ARP 요청 패킷을 브로드캐스트 방식으로 전달한다. 브로드캐스트 방식으로 전달하는 이유는 최종 목적지의 물리주소를 모르기 때문에 모두에게 요청하는 것이다.
  2. 모든 Host와 Router는 송신자가 보낸 ARP 요청을 수락한다.
  3. 해당되는 수신자만 자신의 IP주소와 MAC 주소를 넣어 응답한다.

4. TCP 소켓 통신

이제 MAC주소도 확보했으니 naver.com 서버와 통신을 하기 위한 TCP 소켓 연결을 진행해야 한다.

TCP 소켓 연결은 3-way-handshake 라는 과정을 통해 이루어진다. 추가적으로 HTTPS의 경우 3-way-handshake에 TLS(Transport Layer security, SSL) handShake가 추가된다.

5. HTTPS(HTTP) 프로토콜 요청 / 응답

이제 TCP소켓을 통해 연결이 완료 되었다. 이제서야 naver.com 페이지를 달라고 서버에 요청을 보낸다. 서버는 응답을 받고, 응답이 가능하다면 브라우저에게 해당 요청에 대한 응답을 생성(HTML,CSS,JS)하여 전달한다.

6. 브라우저가 응답

응답(HTML,CSS,JS등)을 받은 브라우저는 웹 페이지를 표시한다.

 


Reference

그림으로 배우는 HTTP&Network - 우에노 센

https://aws.amazon.com/ko/route53/what-is-dns/

https://deveric.tistory.com/97