반응형

웹 브라우저 요청 흐름

이전시간에 https로 위의 URL을 보내면 어떻게 될까?

먼저, 웹브라우져가 www.google.com 로DNS서버를 조회한다.
그랫더니 IP가 200.200.200.2라는게 나왔다. 그리고 포트는 https는 생략하면 443이다.
이렇게 IP와 PORT정보를 찾아낸다.

그리고 HTTP 요청 메시지를 생성한다.

HTTP 요청메시지는 위처럼 생겼다.

GET은 데이터를 뭔가 달라는 것일 거다.

그리고 /부터 뒤에 쿼리 정보가 들어가는 것이다. 그리고 HTTP버전정보도 들어가고,
Host 정보도 들어간다(구글 닷컴에서 보내는 것이구나) 라고 말이다.

이런 형태로 HTTP 요청 메시지가 만들어진다. (부가적인 정보가 더 있긴하지만 간략하게 표현한 것임)

애플리케이션계층에서 웹브러우저가 HTTP 메시지를 생성한다.
DNS에서 IP랑 PORT정보를 찾았기 때문에 이것을 가지고 이전에 살펴보았던 3 way handshake(syn, syn+ack, ack)를 해서 google.com 서버와 연결한다. 
그리고 나서 SOCKET 라이브러리를 통해 OS계층의 TCP/IP 에 전달한다.

TCP/IP에서는 HTTP 메시지에 TCP/IP 패킷을 씌운다.

그러고나서 이 패킷정보가  인터넷으로 흘러가게 된다.

그림으로 보면, 이러한 패킷이 인터넷으로 흘러가게 되는 것인데, 이때 전송데이터가

웹 브라우저가 만든 HTTP메시지이다.

이렇게해서 인터넷망으로 던지면 수많은 인터넷 노드들을 통해서 IP 200.200.200.2번으로 전달이 된다.

이 요청 패킷을 전달해서 구글서버에 도착을 하면, TCP/IP패킷은 다 까서 버리고, HTTP메시지를 딱 끄집어 낸다음, 그것을 가지고 본인이 해석을 한다. "아~이거는 search로 왔고, 쿼리는 hello네? 언어는 ko구나?"라고 해석해서 구글의 검색엔진을 통해서 hello와 관련된 내용을 한국어로 데이터를 찾는다.

그다음에 구글 웹서버에서 HTTP응답 메시지를 만들어낸다.

응답 메시지는 대략 위와같이 생겼다.
HTTP버전,
Contetnt-Type,
Contetnt-Length
등의 정보가 담겨있다.

이렇게 구글도 똑같이 HTTP응답 패킷을 만들고, 그위에 TCP/IP 패킷을 씌우는 것이다.

이렇게해서 나(클라이언트)에게 도착을 하는 것이다.

그런데 여기에는 TCP/IP패킷 외에도 HTTP응답 메시지가 있다.

HTTP응답 메시지를 열면, HTML데이터가 들어있는 것이다.

그러면 해당 HTML데이터를 따서 웹브라우저가 HTML을 랜더링 해주고,
우리는 그 HTML결과를 볼 수 있게 된다.

 

이러한 방식으로 동작을 한다.

다음시간부터 본격적으로 HTTP가 뭔지 알아보자.

 

반응형