https://jootang2.tistory.com/136
위 포스팅을 통해서 우리는 웹 브라우저 요청흐름을 따라가봤다.
오늘은 주소창에 "www.google.com"을 입력하면 무슨일이 일어나는 지 알아보자!
인터넷 세상에서는 TCP/IP를 통해 정보를 주고받는다.
TCP/IP : 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합
프로토콜 : 컴퓨터 사이에서 정보를 주고받기 위해 필요한 통신규약
TCP/IP에는 4계층이 있다.
- Application Layer : 특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을수 있음 (프로토콜 : FTP, HTTP, SSH, Telnet, DNS, SMTP)
- Tranport Layer : 송신된 데이터를 수신측 애플리케이션에 확실히 전달 (프로토콜: TCP, UDP, RTP, RTCP)
- Internet Layer : 수신 측 까지 데이터를 전달하기 위해 사용 (프로토콜 : IP, ARP 등)
- Network Access Layer : 네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 함 (프로토콜: Ethernet, PPP, Token Ring)
이제 흐름을 알아보자!
- 주소창에 입력
- google 서버 80port에 HTTP Request 메세지를 전송
- 메세지를 전송하기 위해 패킷을 만들어야 함
- 패킷에는 각 계층에 필요한 정보들이 담겨야 함
- Application Layer : Http Request가 들어감
- Transport Layer : TCP
- SP(시작 포트번호: 나의 포트번호), DP(도착 포트번호: 80)
- Internet Layer :
- SA(시작 IP주소:나의 IP주소), DA(도착 IP주소:아직 모름)
- 도메인 주소로 도착 IP 주소를 알 수 있음: DNS 프로토콜을 통해서 IP주소를 알 수 있음 : 브라우저는 OS에게 IP주소를 알려달라고 함 : OS에서 DNS한테 요청을 보냄: OS는 이미 DNS 주소정보를 알고 있음
- DNS: HTTP와 같은 Application Layer 프로토콜임 : 53port 사용: UDP프로토콜 사용, 도메인이 담긴 요청을 도메인 서버로 보냄 : 도메인 서버가 IP정보를 응답 : 비연결지향혁 프로토콜임
- SA(시작 IP주소:나의 IP주소), DA(도착 IP주소:아직 모름)
- Network Access Layer : Ethernet 프로토콜
- MAC 주소 : 우리가 구글 웹서버의 MAC주소가 필요한가? 아니다!
- 대신 물리적으로 연결된 우리집 공유기의 MAC주소가 필요함
- 이 공유기를 통해 다른 네트워크와 연결이 가능해 게이트웨이라 부르기도 함
- 우리는 이미 공유기의 MAC주소를 알고 있음
- 어떻게 IP주소로 MAC주소를 알지?
- ARP프로토콜을 사용 : IP주소를 MAC주소로 바꿔주는 주소해석 프로토콜
- 요청을 보내기 전, TCP가 연결지향형 프로토콜인 점을 알아야 함
- 그래서 TCP는 데이터를 전송하기 전, 송신측과 수신측이 연결되었는지 확인되어야 함
- TCP 헤더에 표시한 플래그들을 사용 : 이러한 플래그들을 컨트롤비트라고 부름
- 3 way handShaking : SYN, ACK 플래그 사용
- 개인 네트워크는 private IP를 사용한다. 따라서 외부로 나갈 때는 public IP를 사용해야 하는데 이러한 작업을 NAT(Network Address Translation)이라고 한다.
- 구글 서버로 가기위해서는 여러 라우터를 거쳐야 한다. 라우터는 네트워크와 네트워크를 연결해주는 동작(라우팅)
- 구글 서버에 연결된 라우터까지 도착을 하면 구글의 MAC주소를 얻어 옴 : 이 때 ARP프로토콜을 사용
- 위의 과정으로 구글서버의 MAC주소를 알게됐음
- Internet Layer의 IP주소, Network Access Layer의 MAC주소를 통해 올바른 목적지에 도착함
- Transport Layer의 목적지 포트번호에는 80포트가 있음 : 80포트를 사용하고 있는 어플리케이션에 데이터를 전달
- Application Layer에서 Http가 사용할 Request 정보를 알 수 있음
- 서버에서 응답을 돌려보냄
- 응답과 요청과정이 끝나면 연결을 종료해야함 : TCP의 컨트롤비트 사용(ACK, FIN)
- 문제 상황 : 서버가 보낸 데이터가 FIN을 보낸 후에 도착한 상황
- 클라이언트는 FIN을 받았다고 바로 연결을 종료하면 응답을 받을 수 없음
- 따라서 FIN응답을 받아도 연결을 끊지 않고 잉여 패킷을 기다림 (TIME_WAIT)
위와 같은 과정으로 우리는 "www.google.com" 서버에 접속을 할 수 있게된다.
이렇게 많은 과정이 우다다다다 빨리 일어난다.
사람들은 혼자 있으면 대단하지 않지만 집단으로 뭉치게 되면 대단한 결과물들을 나타낸다. 참 신기하다.
꽃샘추위가 끝나고 이제 따뜻해지는 것 같다.
벚꽃 보러 가자요~~
'HTTP' 카테고리의 다른 글
HTTP의 주요 메소드에는 뭐가 있을까요!? (2) | 2023.01.29 |
---|---|
HTTP의 특징 : Stateless와 connectionless를 살펴보자 (0) | 2023.01.27 |
웹 브라우저 요청 흐름을 따라가보자 (4) | 2023.01.26 |
구글 URL을 해석해보자! (https://www.google.com:443/search?q=hello&hl=ko) (2) | 2023.01.26 |
TCP, UDP 차이 (0) | 2023.01.25 |