본문 바로가기

HTTP

“www.google.com” 을 입력하면 무슨 일이 일어날까? (TCP/IP)

https://jootang2.tistory.com/136

 

웹 브라우저 요청 흐름을 따라가보자

https://jootang2.tistory.com/135 구글 URL을 해석해보자! (https://www.google.com:443/search?q=hello&hl=ko) 실제 구글 URL을 파헤쳐보면서 주소에 어떤 정보들이 담겨져 있는지 알아보자! 준비물 : https://www.google.com:443

jootang2.tistory.com

 

 

위 포스팅을 통해서 우리는 웹 브라우저 요청흐름을 따라가봤다.

 

오늘은 주소창에 "www.google.com"을 입력하면 무슨일이 일어나는 지 알아보자!

 

인터넷 세상에서는 TCP/IP를 통해 정보를 주고받는다.

 

TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합

프로토콜 : 컴퓨터 사이에서 정보를 주고받기 위해 필요한 통신규약

 

TCP/IP에는 4계층이 있다.

  1. Application Layer : 특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을수 있음 (프로토콜 : FTP, HTTP, SSH, Telnet, DNS, SMTP)
  2. Tranport Layer : 송신된 데이터를 수신측 애플리케이션에 확실히 전달 (프로토콜: TCP, UDP, RTP, RTCP)
  3. Internet Layer : 수신 측 까지 데이터를 전달하기 위해 사용 (프로토콜 : IP, ARP 등)
  4. Network Access Layer : 네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 함 (프로토콜: Ethernet, PPP, Token Ring)

 

이제 흐름을 알아보자!

 

  1. 주소창에 입력
  2. google 서버 80port에 HTTP Request 메세지를 전송
  3. 메세지를 전송하기 위해 패킷을 만들어야 함
  4. 패킷에는 각 계층에 필요한 정보들이 담겨야 함
    1. Application Layer : Http Request가 들어감
    2. Transport Layer : TCP
      1. SP(시작 포트번호: 나의 포트번호), DP(도착 포트번호: 80)
    3. Internet Layer :
      1. SA(시작 IP주소:나의 IP주소), DA(도착 IP주소:아직 모름)
        1. 도메인 주소로 도착 IP 주소를 알 수 있음: DNS 프로토콜을 통해서 IP주소를 알 수 있음 : 브라우저는 OS에게 IP주소를 알려달라고 함 : OS에서 DNS한테 요청을 보냄: OS는 이미 DNS 주소정보를 알고 있음
        2. DNS: HTTP와 같은 Application Layer 프로토콜임 : 53port 사용: UDP프로토콜 사용, 도메인이 담긴 요청을 도메인 서버로 보냄 : 도메인 서버가 IP정보를 응답 : 비연결지향혁 프로토콜임
    4. Network Access Layer : Ethernet 프로토콜
      1. MAC 주소 : 우리가 구글 웹서버의 MAC주소가 필요한가? 아니다!
      2. 대신 물리적으로 연결된 우리집 공유기의 MAC주소가 필요함
      3. 이 공유기를 통해 다른 네트워크와 연결이 가능해 게이트웨이라 부르기도 함
      4. 우리는 이미 공유기의 MAC주소를 알고 있음
      5. 어떻게 IP주소로 MAC주소를 알지?
      6. ARP프로토콜을 사용 : IP주소를 MAC주소로 바꿔주는 주소해석 프로토콜
      7. 요청을 보내기 전, TCP가 연결지향형 프로토콜인 점을 알아야 함
        1. 그래서 TCP는 데이터를 전송하기 전, 송신측과 수신측이 연결되었는지 확인되어야 함
        2. TCP 헤더에 표시한 플래그들을 사용 : 이러한 플래그들을 컨트롤비트라고 부름
        3. 3 way handShaking : SYN, ACK 플래그 사용
      8. 개인 네트워크는 private IP를 사용한다. 따라서 외부로 나갈 때는 public IP를 사용해야 하는데 이러한 작업을 NAT(Network Address Translation)이라고 한다.
      9. 구글 서버로 가기위해서는 여러 라우터를 거쳐야 한다. 라우터는 네트워크와 네트워크를 연결해주는 동작(라우팅)
      10. 구글 서버에 연결된 라우터까지 도착을 하면 구글의 MAC주소를 얻어 옴 : 이 때 ARP프로토콜을 사용
      11. 위의 과정으로 구글서버의 MAC주소를 알게됐음
    5. Internet Layer의 IP주소, Network Access Layer의 MAC주소를 통해 올바른 목적지에 도착함
    6. Transport Layer의 목적지 포트번호에는 80포트가 있음 : 80포트를 사용하고 있는 어플리케이션에 데이터를 전달
    7. Application Layer에서 Http가 사용할 Request 정보를 알 수 있음
    8. 서버에서 응답을 돌려보냄
    9. 응답과 요청과정이 끝나면 연결을 종료해야함 : TCP의 컨트롤비트 사용(ACK, FIN)
    10. 문제 상황 : 서버가 보낸 데이터가 FIN을 보낸 후에 도착한 상황
    11. 클라이언트는 FIN을 받았다고 바로 연결을 종료하면 응답을 받을 수 없음
    12. 따라서 FIN응답을 받아도 연결을 끊지 않고 잉여 패킷을 기다림 (TIME_WAIT)

 

위와 같은 과정으로 우리는 "www.google.com" 서버에 접속을 할 수 있게된다.

이렇게 많은 과정이 우다다다다 빨리 일어난다.

 

사람들은 혼자 있으면 대단하지 않지만 집단으로 뭉치게 되면 대단한 결과물들을 나타낸다. 참 신기하다.

꽃샘추위가 끝나고 이제 따뜻해지는 것 같다.

벚꽃 보러 가자요~~