Profile picture

[네트워크] 네트워크 동작 원리 파악하기 - 내 PC에서 구글까지의 과정은?

JaehyoJJAng2023년 03월 10일

▶ 개요

네트워크에 대해 본격적으로 공부해보기 전에

구글 홈페이지를 열기 위해 사용자 PC에서 어떤 일이 발생하는지 네트워크 관점에서 단계별로 정리해보려고 한다.


▶ IP 할당

  • 1. 사용자 PC를 공유기와 연결하고, 이 때 사용자 PC는 동적으로 IP를 할당 받으려고 한다(DHCP)
  • 2. IP를 할당받기 위해 DHCP Discover 패킷을 UDP 프로토콜을 이용하여 브로드캐스트로 보낸다.
  • 3. 해당 Discover 패킷을 받은 공유기는 DHCP Offer를 통해 DHCP 서버의 주소와 할당받을 수 있는 IP를 Discover를 요청한 PC에 보낸다.
  • 4. PC는 다시 DHCP Request를 통해 IP 주소를 요청한다.
  • 5. DHCP 서버는 DHCP Ack 패킷을 통해 IP 주소 및 기타 연결 정보를 제공한다.

▶ 브라우저 요청 입력

  • 사용자가 브라우저에 www.google.com을 입력하고 엔터를 누른다.

▶ DNS 조회

  • 브라우저는 도메인 이름을 IP 주소로 변환하기 위해 DNS(Domain Name System) 조회를 시작한다.
  • 사용자 PC의 운영체제에서 먼저 로컬 DNS 캐시를 조회하여 최근에 조회한 IP 주소가 있는지 확인한다.
  • 로컬 캐시에 IP 주소가 없으면, 사용자 PC는 설정된 DNS 서버(대개는 ISP에서 제공하는 DNS 서버가 공유기에 설절된 DHCP를 통해 자동으로 사용자에게 IP와 함께 제공됨)로 쿼리를 보낸다.
  • DNS 서버는 도메인 이름을 IP 주소로 변환하여 응답한다. 예를 들어 www.google.com에 대한 IP 주소는 142.250.204.132로 반환된다.

▶ 구글 웹서버와 통신

▸ TCP 연결 설정

  • IP 주소를 얻은 브라우저는 해당 IP 주소로 TCP 연결을 설정한다.
  • TCP 연결은 3-way Handshake로 수행된다.
    • SYN: 사용자 PC는 구글 서버로 SYN 패킷을 보낸다.
    • SYN-ACK: 구글 서버는 사용자 PC로 SYN-ACK 패킷을 보낸다.
    • ACK: 사용자 PC는 구글 서버로 ACK 패킷을 보낸다.

▸ HTTPS 연결 설정

  • TCP 연결이 설정되면, 브라우저는 HTTPS 프로토콜을 사용하여 구글 서버와 보안 연결을 설정한다.
  • TLS(Transport Layer Security) Handshake가 이루어진다.
    • Client Hello: 사용자 PC는 사용 가능한 암호화 방법, TLS 버전 등을 포함한 Client Hello 메시지를 보냅니다.
    • Server Hello: 구글 서버는 선택된 암호화 방법과 서버 인증서를 포함한 Server Hello 메시지를 보냅니다.
    • Certificate Verification: 사용자 PC는 서버 인증서를 검증합니다.
    • Client Key Exchange: 사용자 PC는 세션 키를 생성하고 서버에 전달합니다.
    • Finished: 양쪽 모두 세션 키를 사용해 암호화된 Finished 메시지를 교환하여 핸드셰이크를 완료합니다.

▸ HTTP 요청

  • HTTPS 연결이 설정되면 브라우저는 구글 서버에 HTTP Request(GET)를 보낸다.
  • 구글 웹 서버에서는 해당 Request를 토대로 처리를 수행 후, 내 PC로 Response를 보낸다.

▸ TCP 연결 종료

  • 연결 종료를 위해 TCP 4-way-handshake를 보낸다.
    • FIN Flag: 클라이언트(사용자 PC)가 연결을 종료하기로 결정하면, 클라이언트는 서버(구글 웹 서버)로 FIN 플래그가 설정된 TCP 패킷을 보낸다. 이 패킷은 더 이상 데이터를 전송하지 않겠다는 신호이다.
    • ACK Flag: 서버는 클라이언트의 FIN 패킷을 수신하면, 이를 확인하고 ACK 플래그가 설정된 TCP 패킷을 클라이언트로 보낸다. 이는 FIN 패킷을 수신했음을 알리는 신호이다.
    • 서버의 FIN Flag 전송: 서버도 연결을 종료하기로 결정하면, 서버는 클라이언트로 FIN 플래그가 설정된 TCP 패킷을 전송한다.
    • 클라이언트의 ACK Flag 전송: 마찬가지로 클라이언트는 서버의 FIN 패킷을 수신하면, 이를 확인하고 ACK 플래그가 설정된 TCP 패킷을 서버로 보낸다. 이로써 연결이 완전히 종료된다.

Loading script...