쟈미로그
www.google.com에 접속할 때 일어나는 일을 알아보자 본문
학교에서 내 노트북 검색창에 구글(https://www.google.com)을 검색할 때 일어나는 과정을 자세히 정리해보자!!
들어가기 앞서, 학교 네트워크의 구조는 이렇다고 하자.
학교 네트워크에는 여러 AP(Access Point)가 있고, AP들은 switch에 연결돼있다. switch들은 게이트웨이 역할의 router와 연결돼있고, 이 router는 SK브로드밴드나 KT와 같은 ISP(Internet Service Provider)의 네트워크에 연결돼있다.
```
School network
+----+ +--------+ /------\ +--------+
Node ---| AP |---| Switch |---| Router |---| Switch |--- ...
+----+ +--------+ \------/ +--------+
| | |
... ... |
|
###################################|#################
KT network |
|
/------\
... ---| Router |
\------/
|
...
```
큰 흐름을 정리해보면,
- (처음 학교 네트워크에 연결되는 것이라면) IP 주소 할당받기
- www.google.com을 입력
- 브라우저는 해당 URL의 IP 주소 알아냄
- 캐싱된 DNS 기록이 있는지 확인
- 없다면 DNS 서버에 요청 쿼리를 날려서 알아냄
- 알아낸 IP 주소와 Web 클라이언트-서버 통신 진행
- TCP 연결
- TLS 연결 (구글 웹 서버는 HTTPS 통신이므로)
- 마지막으로 HTTP 통신을 진행. 보낸 request에 대한 response를 받으면 구글 홈페이지가 보인다.
그럼 이제부터 이 과정을 자세히 알아보자!
1. IP 주소 할당받기
처음으로 학교 네트워크에 연결된 것이라면, 내 컴퓨터(클라이언트)는 아직 IP 주소가 없다.
그래서 먼저 IP 주소를 받아야지 통신할 수 있다.
(1) AP에 접속
먼저 노트북을 켜고 AP(학교 Wifi 공유기 등)를 검색한다.
AP들은 범위 내의 모든 노드에게 비콘(Beacon) 프레임을 주기적으로 브로드캐스팅하면서 자신의 존재를 알리고 있다. 그래서 클라이언트는 이 AP 리스트를 확인하고 연결할 AP를 선택할 수 있다. 클라이언트가 만약 `iptime01`을 선택하면 AP로 접속 요청 프레임이 전송되고, AP는 응답 프레임을 클라이언트에게 보내 연결을 마친다.
(2) DHCP을 통해서 IP 주소를 할당받는다
IP 주소를 할당하기 위해 DHCP(Dynamic Host Configuration Protocol) 서버를 이용해야한다.
DHCP 서버는 AP나 라우터에서 동작할 수 있다.
클라이언트는 DHCP ACK 메시지에서 자신의 IP 주소 + DNS서버의 IP 주소, 임대 기간 등을 기록한다.
즉, DHCP 덕분에 내 IP 주소 뿐만 아니라 DNS 서버의 IP 주소를 알 수 있다! (그래서 DNS 서버의 IP 주소를 얻는 과정은 따로 필요하지 않음.)
(나중에 따로 분리해서 정리해두기. DHCP가 왜 UDP 프로토콜 기반인지도 정리하자.)
2. 입력한 URL에 해당하는 IP 주소 구하기
클라이언트가 브라우저에 https://www.google.com을 입력하면, 이 홈페이지(데이터)를 얻기 위해서 구글 서버와 통신해야한다.
그러기 위해선 먼저 해당 URL의 IP 주소를 알아야한다.
이때 도메인 네임을 IP 주소로 변환하기 위해 DNS가 사용된다. 먼저 브라우저 등에 캐싱된 DNS 기록이 있는지 확인을 하고, 만약 기록이 없다면 DNS 서버에 직접 요청을 해서 해당하는 IP 주소를 얻어내야한다.
(1) ARP로 DNS 서버의 MAC 주소를 알아내기
하지만 현재 클라이언트는 로컬 DNS 서버의 IP 주소만 알고 MAC 주소는 모르는 상태다. 이를 알아내기 위해 ARP(Address Resolution Protocol)를 사용한다.
- ARP Request : 클라이언트는 로컬 DNS 서버의 IP 주소와 함께 ARP Request 메시지를 만든다. ARP 메시지는 AP로 전송되고, AP에 이더넷으로 연결돼있는 스위치에 브로드캐스팅된다. 스위치도 로컬 DNS 서버의 MAC 주소를 모르기 때문에 자신과 연결된 모든 장비에 프레임을 전송한다.
- ARP Response : 로컬 DNS 서버가 ARP 메시지 프레임을 받으면 자신의 MAC 주소를 담아서 ARP Reply 메시지를 준비한다. 이 응답 베시지는 이더넷 프레임에 담겨서 스위치로 전송되고, 이어서 클라이언트에게 전송된다.
이제 클라이언트가 로컬 DNS 서버의 MAC 주소를 알게 되었으므로 DNS 쿼리 메시지를 보낼 수 있다.
(2) DNS 서버를 통해서 URL의 IP 주소를 알아내기
클라이언트는 도메인 네임(www.google.com)을 넣어서 DNS 쿼리 메시지를 만들고, 로컬 DNS 서버로 전송한다. 로컬 DNS 서버는 메시지를 보고 www.google.com의 IP 주소를 찾는다.
로컬 DNS 서버가 해당 IP 주소를 알고 있으면 클라이언트에게 바로 응답을 줄 수 있다. 하지만 로컬 DNS 서버는 google.com의 IP 주소를 모르면? 루트 DNS 서버에 DNS 쿼리를 전송할 것이다. 루트 DNS 서버는 전세계에 13대 뿐이며, 한국을 비롯한 다양한 나라에 미러 서버가 운영되고 있다. (자세한 내용은 DNS 포스트에서 다뤄보자)
이제 클라이언트는 DNS 메시지를 받아서 www.google.com의 IP 주소를 추출할 수 있다. 구글 서버를 만날 준비가 끝났다!
3. Web 클라이언트-서버 통신
(1) TCP 소켓 통신
클라이언트는 구글 서버와의 통신을 위해 TCP 소켓을 만들어야한다. 하지만 TCP로 데이터를 주고받으려면 먼저 구글 서버와 연결이 돼야한다. 이때 3-way handshake
을 이용해서 TCP 연결을 구축한다.
(2) TLS handshaking
구글 웹 서버는 HTTPS 통신을 하므로 TLS handshaking
과정도 거쳐야한다!
(자세한 과정은 따로 업로드하기)
4. 준비 끝
이제 클라이언트는 www.google.com에 접속할 모든 준비가 다 됐다.
클라이언트 브라우저는 HTTP GET 메시지를 만들고 URL을 담는다. 이 내용이 TCP 세그먼트의 페이로드가 되어서 www.google.com으로 전송된다!! 전송되는 패킷은 TLS로 암호화되어서 Content-Type을 제외하곤 내용을 확인할 수 없다.
www.google.com의 HTTP 서버는 TCP 소켓에서 HTTP GET 메시지를 읽고, HTTP 응답 메시지를 만든다. HTTP 응답 메시지의 body에 요청받은 콘텐츠를 담아 TCP 소켓으로 전송한다.
HTTP 응답 메시지를 담은 데이터그램은 학교 네트워크로 향하고, 클라이언트에 도달한다. 클라이언트의 브라우저는 소켓의 HTTP 응답 메시지를 읽고 body에서 html을 추출해 웹페이지를 렌더링해준다.
이 모든 과정을 거치면 클라이언트의 브라우저에 구글 홈페이지가 보여진다!
참고
https://parksb.github.io/article/36.html#getting-started%3A-wlan%2C-dhcp%2C-udp-and-ip
https://backtony.github.io/interview/2021-12-12-interview-19/
'CS > Network' 카테고리의 다른 글
OSI 7계층과 TCP/IP 4계층 (1) | 2022.11.22 |
---|