-
12. 웹 페이지 요청에 대한 처리공부/컴퓨터 네트워크 2022. 6. 15. 17:01반응형
이 글은 Computer Networking: A Top-Down Approach 7th를 읽고 정리한 글입니다.
Link Layer까지 배우게 되면 마지막에 어떤 과정으로 작동을 하게 되는지 전체적으로 설명하는 부분이 나옵니다.
0. 상황 설명
학생 Bob이 학교의 이더넷 스위치에 노트북을 연결하고, 구글 웹 페이지를 다운로드하는 상황을 가정한다.
1. 처음 네트워크를 연결하면 DHCP 프로토콜을 실행하여 DHCP 서버로부터 IP 주소를 얻기
1) DHCP 요청 메시지를 만들어서 UDP 세그먼트에 넣는데, 아직 Bob의 IP 주소도 모르고, 서버의 IP 주소도 모르기 때문에 브로드캐스트를 할 수 있도록 한다. 이 세그먼트는 IP 데이터그램으로 캡슐화되고, 이후엔 이더넷 프레임으로 캡슐화된다.
2) Bob 노트북의 MAC주소는 노트북이 알고 있으므로 출발지 MAC주소는 Bob노트북의 MAC 주소, 목적지 MAC주소는 아직 모르므로 여기도 브로드캐스트를 할 수 있도록 FF:FF:FF:FF:FF:FF로 설정한다.
3) 프레임을 받은 스위치는 Bob의 MAC 주소와 인터페이스를 자가학습을 통해 스위치 테이블에 기록해두며 모든 포트로 브로드 캐스트를 한다. 이때 라우터가 브로드캐스트된 프레임을 받고, 이더넷 프레임에서 데이터그램으로 역캡슐화를 한 뒤, 데이터그램의 페이로드를 UDP로 역다중화한 뒤 DHCP 요청 메시지를 추출한다. 드디어 DHCP 서버가 DHCP 요청 메시지를 받았다.
4) 라우터에서 실행되는 DHCP 서버는 DHCP ACK 메시지(Bob 노트북에 할당할 IP 주소, DHCP 서버의 IP 주소, first-hop 라우터의 IP 주소, 네트워크 마스크)를 UDP 세그먼트 → IP 데이터그램 → 이더넷 프레임으로 캡슐화하여 Bob의 MAC주소로 보낸다.
5) 프레임을 받은 스위치는 자가학습을 통해 DHCP 서버의 MAC 주소를 저장하고, 이미 스위치 테이블에 기록된 Bob의 MAC 주소로 보낸다.
6) 프레임을 받은 Bob의 노트북은 이더넷 프레임 → IP 데이터그램 → UDP세그먼트로 역캡슐화를 하여 DHCP ACK을 추출한다. 그래서 Bob의 DHCP 클라이언트와 IP 포워딩 테이블은 DHCP ACK을 통해 받은 정보를 기록한다.
2. ARP 테이블과 DNS 주소
이제 Bob은 URL에 google.com을 입력해서 구글 홈페이지가 출력되도록 만드려고 한다.
이때 Bob의 웹브라우저는 HTTP 요청 메시지를 보내기 위해 TCP 소켓을 생성해야 하고, TCP 소켓을 생성하기 위해서는 구글 홈페이지의 IP 주소를 알아야하기 때문에 DNS 서버에 질의를 하려고 한다.
7) Bob의 노트북이 DNS 질의 메시지를 UDP 세그먼트로 캡슐화하고, local DNS 서버로 보내는 IP 데이터그램을 만들어서 이더넷 프레임으로 캡슐화한 후 first-hop router의 IP 주소로 보내려고한다. 하지만 라우터의 IP 주소는 알지만 MAC주소는 ARP 테이블에 기록되어 있지 않아서 ARP query 패킷부터 보내야한다.
8) ARP query 패킷을 스위치로 보내 브로드캐스팅을 하도록 만들고, first-hop 라우터가 프레임을 수신하면 Bob의 노트북에 보낼 ARP reply 패킷을 스위치로 다시 보낸다. 이때 스위치는 자가학습을 통해 first-hop 라우터로 보내는 경로를 스위치 테이블로 기록을 하게 된다.
9) Bob의 노트북은 ARP reply 패킷을 받아서 first-hop 라우터의 MAC 주소를 얻고, DNS 질의 메시지를 보내게 된다. 이때 질의 메시지의 MAC 주소는 first-hop router의 주소지만, IP 주소는 DNS 서버를 나타낸다.
3. DNS 서버를 통해 IP 주소 획득하기
10) 라우터가 프레임을 받으면 IP 데이터그램으로 역캡슐화를 하여 DNS 서버의 주소를 획득한다. 이후 포워딩 테이블에 DNS 서버의 주소를 찾아서 전송을 하게 된다. 여기서는 Intra AS의 라우팅 프로토콜(ex. BGP) 혹은 Inter AS의 라우팅 프로토콜(ex. OSPF, RIP)을 사용하여 패킷이 이동하게 된다.
11) 이렇게 패킷이 DNS 서버에 도착하게 되면 DNS RR(resource record)에서 google.com과 매칭하는 IP 주소를 찾는다. 이때 여기에 저장되어 있지 않으면 TLD DNS 서버에 질의를 하고, 거기에도 없으면 루트 DNS 서버에 질의를 해서 얻는다. 이후엔 DNS 응답 메시지를 만들어서 UDP 세그먼트 → IP 데이터그램 → 이더넷 프레임으로 다시 캡슐화를 하여 Bob의 노트북에 전송한다.
12) 이제 패킷을 받은 Bob의 노트북이 google.com 서버에 접속할 수 있게 된다.
4. 클라이언트 - 서버 상호작용
13) Bob의 노트북은 google.com의 IP 주소와 TCP 3-way handshake를 수행하려고 한다. 그래서 TCP SYN 세그먼트를 IP 주소가 구글의 IP 주소, MAC 주소는 first-hop router의 MAC 주소로 데이터그램을 만들고, 프레임으로 캡슐화를 해서 전송을한다.
14) 여기서도 10)과 같이 라우팅 프로토콜을 사용하여 구글 홈페이지 주소로 보낸다. 그렇게 구글 홈페이지에 SYN이 도착하게 되면 구글은 SYN ACK을 보내게 되며, 다시 Bob의 노트북이 ACK을 보내게 되어 3-way handshake를 완성시킨다.
15) Bob의 노트북은 HTTP GET 메시지를 소켓으로 보내고 TCP 세그먼트 → IP 데이터그램 → 이더넷 프레임으로 보낸다. HTTP 요청 메시지를 받은 구글 홈페이지는 HTTP 응답 메시지를 Bob의 노트북으로 보낸다.
16) 마침내 HTTP 요청 메시지를 받은 Bob의 노트북은 저기서 데이터를 추출하여 웹 페이지를 출력시킨다.
반응형'공부 > 컴퓨터 네트워크' 카테고리의 다른 글
[Network] HTTPS (2) 2024.05.21 [컴퓨터 네트워크] 목차 (0) 2022.06.15 11. 스위치 근거리 네트워크 (0) 2022.06.07 10. 링크 계층 (0) 2022.06.06 9. OSPF, BGP, SDN (0) 2022.06.03