▶ 개요
네트워크에 대해 본격적으로 공부해보기 전에
구글 홈페이지를 열기 위해 사용자 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 패킷을 서버로 보낸다. 이로써 연결이 완전히 종료된다.