google.com을 입력했을 때 벌어지는 일

dongbin_Shin·2021년 12월 18일
0

네트워크

목록 보기
1/1

브라우저에서 google.com을 주소에 입력하고 접속하면 어떤 일이 벌어질까?

주소창에 http://www.google.com이라고 작성하는 것은 구글 웹서버의 80port에 HTTP로 작성된 request 메시지를 보내는 것을 의미한다. (설명을 쉽게 하기 위해 HTTPS가 아닌 HTTP로 설명)

이 request 메시지를 구글 웹서버로 보내기 위해 각 계층에 필요한 정보를 포함한 패킷을 만들어야 한다.

여기서 계층은 Application Layer(HTTP), Transport Layer(TCP), Internet Layer(IP), Network Access Layer(Ethernet) 프로토콜을 사용한다고 가정한다.

요즘은 보통 TCP와 IP 프로토콜을 사용하기 때문에 이를 TCP/IP라고 부른다.

패킷 만들기 (패킷 전송 전)

Application Layer

Application Layer에는 작성한 HTTP Request가 들어간다.

Transport Layer

TCP 패킷의 헤더는 아래와 같이 구성된다.
여기서 Source Port와 Destination Port에 시작 포트번호와 목적지 포트번호가 입력된다.

시작 포트번호는 내 컴퓨터에서 만든 소켓의 포트번호이고 목적지 포트번호도 80이기 때문에 이 두 정보를 내 컴퓨터는 알고 있다.

Internet Layer

IP 헤더는 다음과 같다.
여기서도 마찬가지로 Source IP Address와 Destination IP Address에 시작 ip와 목적 ip주소가 입력되어야 한다.

시작 ip주소는 나의 ip이기 때문에 DHCP(Dynamic Host Configuration Protocol)서버를 통해 알 수 있다. 하지만 우리는 www.google.com이라는 도메인 정보만 알고 있기 때문에 목적 ip 주소를 알지 못한다.

때문에 DNS 프로토콜을 사용해 도메인 정보로 목적 ip 주소를 얻어낸다.

DNS 프로토콜

DNS 프로토콜도 HTTP와 같은 Application Layer 프로토콜이다.

이 프로토콜은 53번 포트를 사용한다.

DNS는 Transport Layer에서 UDP 프로토콜을 사용한다.

목적 ip 주소 알아내기

  1. 브라우저는 OS에게 도메인에 대한 ip주소를 요청한다.
  2. OS는 DNS 서버에 도메인이 담긴 쿼리와 함께 ip주소를 요청한다. (DNS 서버 주소는 컴퓨터에 미리 저장되어 있음)
  3. 요청받은 DNS 서버는 IP주소를 응답한다.

Network Access Layer

Ethernet 헤더는 다음과 같다.
여기서 SA, DA에 시작과 목적 MAC주소를 입력해야 한다.

이때 입력하는 MAC주소는 구글 웹서버의 MAC주소가 아니라 내 컴퓨터에 연결되어 있는 공유기(게이트웨이)의 MAC주소이다.

이 공유기(라우터)의 IP주소는 DHCP 서버를 통해 알 수 있다. 우리는 이 IP주소를 MAC주소로 변환해야 한다. 이때 사용하는 프로토콜이 ARP프로토콜이다.

ARP 프로토콜

ARP 프로토콜: IP주소를 MAC주소로 변환해주는 주소 해석 프로토콜

IP 주소를 포함한 광역 패킷을 브로드캐스트하고 호스트들은 자신의 ip 주소와 동일한지 확인해 일치할 시 자신의 MAC 주소를 응답한다.

패킷 전달 (패킷 전송)

위의 과정을 통해 패킷을 완성했다.

이제 패킷을 전달하기 위한 과정을 살펴보자.

우리가 사용하는 private IP는 외부 환경(나의 네트워크 밖의 환경)에서 IP주소를 찾지 못한다.

그래서 먼저 공유기에서 나의 private IP를 public IP로 변환하는 작업이 필요하다.

이 과정을 NAT(Network Address Translation)이라고 한다.

TCP의 연결

이 패킷을 구글 웹서버까지 잘 전달하기 위해 우리는 TCP 프로토콜을 사용하는데 TCP 프로토콜은 연결지향형 프로토콜이기 때문에 3-Way-Handshaking을 사용해 연결한다.

Routing

우리집 공유기에서 출발한 패킷이 구글 웹서버 공유기에 전달되기까지 많은 라우터를 거친다.

이 과정을 라우팅(Routing)이라고 한다.

라우터는 네트워크간의 연결을 책임지는 하드웨어이다.

ARP

라우팅을 거쳐 구글 웹서버가 연결된 라우터까지 패킷이 도착하면, 패킷의 IP 헤더에 적힌 목적지 IP주소로 ARP프로토콜을 통해 구글 웹서버의 MAC 주소를 알아낸다.

패킷 받기

위의 과정을 통해 구글 웹서버에 패킷이 도착하게 된다.

Transport Layer

패킷의 TCP 패킷에 적힌 Destination Port를 통해 해당 port를 사용하는 어플리케이션에 이 패킷을 전달해준다.

Application Layer

이 어플리케이션은 HTTP Request를 통해 사용자가 원하는 요청을 받을 수 있다.

패킷에 대한 응답

어플리케이션에서 HTTP Request에 대한 처리를 진행한 후 처리 결과를 응답으로 돌려 보낸다.

이 응답은 HTML 문서로 작성되어 전송된다.

응답 전송 과정에서도 마찬가지로 라우팅을 통해 브라우저의 공유기까지 응답이 전송된다.

응답 후 (연결 종료)

응답을 마치게 되면 3-way-handshaking을 통해 연결했던 경로를 끊어야 한다.

이때는 4-Way-Handshaking을 이용해 연결을 끊어준다.

profile
멋있는 백엔드 개발자

0개의 댓글