CS/Network

[Network] 웹페이지 요청에 대한 처리

ummchicken 2023. 11. 8. 10:49

갑자기 급 궁금해져서 전공책을 뒤적거려 봤다.

(나의 마지막 발악이랄까)

 

 

 

 

그림 6.32는 학생 Bob이 학교의 이더넷 스위치에 랩톱을 연결하고 

웹 페이지(www.google.com)를 다운로드하는 것을 보여준다.

 

 

 

💡 이렇게 단순한 요청을 처리하는 데 많은 것들이 "아래에서" 진행되고 있다!

 

 

 

 

✔️ 시작하기: DHCP, UDP, IP 그리고 이더넷

 

그림 6.32처럼 Bob은 랩톱을 켠 후, 

학교 이더넷 스위치(학교 라우터에 연결되어 있음)에 연결되어 있는 이더넷 케이블에 연결한다.

(이 예제에서 학교 라우터는 ISP com-cast.net에 연결되어 있고, 

comcast.net은 이 학교에 DNS 서비스를 제공하며, 
DNS 서버는 학교 네트워크가 아닌 콤캐스트(Comcast) 네트워크에 있다.)

(DHCP 서버는 라우터에서 실행되고 있다고 가정하자)

 

 

 

🚨 Bob은 IP 주소 없이는 아무것도 할 수 없다!

→ 따라서 Bob이 네트워크 관련 처음으로 취하는 행동은 

로컬 DHCP 서버로부터 IP 주소를 획득하기 위해 DHCP 프로토콜을 실행하는 것이다.

 

 

 

 

 

1. Bob의 랩톱 운영체제는 DHCP 요청 메시지를 만들어, 

이 메시지를 목적지 포드 67(DHCP 서버)과 출발지 포트 68(DHCP 클라이언트)을 갖는 UDP 세그먼트에 넣는다.

 

이 UDP 세그먼트는 브로드캐스트 IP 목적지 주소(255.255.255.255)와

출발지 IP 주소 0.0.0.0(Bob의 랩톱 IP 주소가 없기 때문)을 갖는 IP 데이터그램에 들어간다.

 

 

 

 

2. DHCP 요청 메시지를 포함한 IP 데이터그램은 이더넷 프레임에 들어간다.

스위치에 연결된 모든 장치(DHCP 서버도 포함)에 이 프레임이 브로드캐스트 될 수 있도록 

이더넷 프레임의 목적지 MAC 주소는 FF:FF:FF:FF:FF:FF로 설정된다.

 

이 프레임의 출발지 MAC 주소는 Bob 랩톱의 MAC 주소인 00:16:D3:23:68:8A가 된다.

 

 

 

 

3. DHCP 요청 메시지를 포함한 브로드캐스트 이더넷 프레임은 Bob의 랩톱이 처음으로 이더넷 스위치에 전송한 프레임이다.

스위치는 프레임을 자신의 모든 출력 포트(라우터로 연결된 포트도 포함)로 브로드캐스트 한다.

 

 

 

 

4. 라우터는 MAC 주소 00:22:6B:45:1F:1B인 인터페이스로 DHCP 요청 메시지가 포함된 브로드캐스트 이더넷 프레임을 수신하고, 

이더넷 프레임으로부터 IP 데이터그램을 추출한다.

 

데이터그램의 브로드캐스트 IP 목적지 주소는 이 IP 데이터그램이 노드의 상위 계층 프로토콜에 의해서 처리되어야 함을 의미한다.

 

이렇게 함으로써 데이터그램의 페이로드(UDP 세그먼트)가 UDP로 역다중화되고, 

UDP 세그먼트로부터 DHCP 요청 메시지가 추출될 수 있다.

 

이제 DHCP 서버는 DHCP 요청 메시지를 갖게 된다.

 

 

 

 

5. 라우터에서 실행되고 있는 DHCP 서버가 CIDR 블록 69.85.2.0/24에 있는 IP 주소들을 할당할 수 있다고 가정하자.

이 예제의 경우, 학교에서 사용하는 모든 IP 주소는 콤캐스트 주소 블록 내에 있는 것들이다.

 

DHCP 서버가 Bob의 랩톱에게 주소 68.85.2.101을 할당했다고 가정하자.

DHCP 서버는 이 IP 주소와 DHCP 서버의 IP 주소(68.87.71.226), 

디폴트 게이트웨이 라우터의 IP 주소(68.85.2.1), 

서브넷 블록(68.85.2.0/24; "네트워크 마스크")을 포함하는 DHCP ACK 메시지를 만든다.

 

DHCP ACK 메시지는 UDP 세그먼트에 들어가고, UDP 세그먼트는 IP 데이터그램에 들어가며, 

IP 데이터그램은 이더넷 프레임에 들어간다.

 

이더넷 프레임은 출발지 MAC 주소로 라우터 인터페이스의 MAC 주소(00:22:6B:45:1F:1B)를, 

목적지 MAC 주소로 Bob 랩톱의 MAC 주소(00:16:D3:23:68:8A)를 갖는다.

 

 

 

 

6. DHCP ACK 메시지를 포함한 이더넷 프레임은 라우터에 의해서 스위치로 전송된다(유니캐스트).

 

스위치는 자가학습을 하며

이전에 Bob의 랩톱으로부터 이더넷 프레임(DHCP 요청 메시지를 포함)을 수신했기 때문에 

00:16:D3:23:68:8A를 목적지로 하는 프레임은 Bob의 랩톱으로 가는 출력 포트로만 전달되어야 한다는 것을 안다.

 

 

 

 

7. Bob의 랩톱은 DHCP ACK를 포함하는 이더넷 프레임을 수신한 후 

이더넷 프레임으로부터 IP 데이터그램을 추출하고, 

IP 데이터그램으로부터 UDP 세그먼트를 추출하며, 

UDP 세그먼트로부터 DHCP ACK 메시지를 추출한다.

 

Bob의 DHCP 클라이언트는 자신의 IP 주소와 DNS 서버의 IP 주소를 기록한다.

또한 IP 포워딩 테이블에 디폴트 게이트웨이의 주소를 저장한다.

 

Bob의 랩톱은 자신이 속한 서브넷 68.85.2.0/24의 외부를 목적지 주소로 하는 모든 데이터그램을 디폴트 게이트웨이로 보내게 된다.

이 시점에서 Bob의 랩톱은 자신의 네트워킹 구성요소들을 초기화하고, 

웹 페이지 가져오기(fetch)를 처리할 준비를 한다.

 

 

 

 

 

 

✔️  여전히 시작하기: DNS와 ARP

그림 한번 더 보기

 

 

Bob이 웹 브라우저에 URL로 www.google.com을 입력하면 

웹 브라우저에 구글 홈페이지가 출력되도록 하는 긴 이벤트들이 시작된다.

 

Bob의 웹 브라우저는 www.google.com로 HTTP 요청 메시지를 보내기 위해 

TCP 소켓을 생성하는 절차를 시작한다.

 

소켓을 생성하기 위해서 Bob의 랩톱은 www.google.com의 IP 주소를 알아야만 한다.

(DNS 프로토콜은 이름을 IP 주소로 변환해주는 서비스를 제공하는 데 사용된다.)

 

 

 

 

8. Bob 랩톱의 운영체제는 DNS 질의 메시지를 생성하며, 

이때 DNS 질의 메시지의 질문 부분(question section)에 "www.google.com"을 넣는다.

DNS 질의 메시지는 목적지 포트가 53(DNS 서버)인 UDP 세그먼트에 들어간다.

 

UDP 세그먼트는 목적지 IP 주소 68:87:71:226(단계 5의 DHCP ACK 메시지에 들어 있던 DNS 서버의 주소)과 

출발지 IP 주소 68:85:3:101인 IP 데이터그램에 들어간다.

 

 

 

 

9. Bob의 랩톱은 DNS 질의 메시지가 포함된 데이터그램을 이더넷 프레임에 넣는다.

이 프레임은 Bob의 학교 네트워크에 있는 게이트웨이 라우터(링크 계층에서 주소가 주어짐)로 보내진다.

 

Bob의 랩톱이 학교 게이트웨이 라우터의 IP 주소(68.85.2.1)를 단계 5의 DHCP ACK 메시지를 통해 알게 되기는 하지만, 

게이트웨이 라우터의 MAC 주소는 알 수 없다.

게이트웨이 라우터의 MAC 주소를 얻기 위해서 Bob의 랩톱은 ARP 프로토콜을 사용하게 된다.

 

 

 

 

10. Bob의 랩톱은 목표 IP 주소 68.85.2.1(디폴트 게이트웨이)을 포함한 ARP 질의 메시지를 생성하며, 

ARP 메시지는 브로드캐스트 목적지 주소(FF:FF:FF:FF:FF:FF)를 갖는 이더넷 프레임에 포함되어 스위치로 전송된다.

 

스위치는 게이트웨이 라우터를 포함한 모든 연결된 장치로 프레임을 전달한다.

 

 

 

 

11. 게이트웨이 라우터는 학교 네트워크로의 인터페이스를 통해 ARP 질의 메시지를 포함하고 있는 프레임을 수신하고, 

ARP 메시지로부터 목표 IP 주소 68.85.2.1을 찾아서 자신의 인터페이스 IP 주소와 일치하는 것을 알게 된다.

 

따라서 게이트웨이 라우터는 IP 주소 68.85.2.1에 대응하는 MAC 주소 00:22:6B:45:1F:1B를 포함한 

ARP 응답 메시지를 만든다.

 

ARP 응답 메시지를 목적지 주소 00:16:D3:23:68:8A(Bob의 랩톱)인 이더넷 프레임에 넣어서 스위치로 보내며, 

스위치는 프레임을 Bob의 랩톱으로 전달한다.

 

 

 

 

12. Bob의 랩톱은 ARP 응답 메시지가 포함된 프레임을 수신해서 

게이트웨이 라우터의 MAC 주소(00:22:6B:45:1F:1B)를 추출한다.

 

 

 

 

13. 이제(결국!) Bob의 랩톱은 게이트웨이 라우터의 MAC 주소로 DNS 질의 메시지가 포함된 이더넷 프레임을 보낼 수 있다.

 

💡 프레임의 목적지 주소가 00:22:6B:45:1F:1B(게이트웨이 라우터)인 반면, 

프레임에 포함된 IP 데이터그램의 IP 목적지 주소는 68.87.71.226(DNS 서버)인 점을 주목!

 

Bob의 랩톱은 프레임을 스위치로 보내고, 스위치는 프레임을 게이트웨이 라우터로 전달한다.

 

 

 

 

 

 

✔️ 여전히 시작하기: DNS 서버로의 인트라-도메인(Intra-Domain) 라우팅

그림 한번 더 보기

 

 

(글이 길어져서 2편으로 나눌까 하다 걍 한 번에 하기로 했다.)

 

 

14. 게이트웨이 라우터는 프레임을 받아서 DNS 질의가 포함된 IP 데이터그램을 추출한다.

 

라우터는 데이터그램의 목적지 주소(68.87.71.226)를 포워딩 테이블에서 찾아서 

데이터그램을 그림의 콤캐스트 네트워크의 좌측 상단 라우터로 보내야 한다는 것을 알게 된다.

 

학교 라우터를 좌측 상단의 콤캐스트 라우터로 연결해 주는 링크에 적합한 링크 계층 프레임에 IP 데이터그램을 넣은 후, 

프레임을 해당 링크로 전송한다.

 

 

 

 

15. 콤캐스트 네트워크의 좌측 상단 라우터는 프레임을 수신한 후,

IP 데이터그램을 추출해서 데이터그램의 목적지 주소(68.87.71.226)와

포워딩 테이블[인터넷의 인터-도메인(interdomain)라우팅 프로토콜BGP와, 

RIP, OSPF 또는 IS-IS와 같은 콤캐스트의 인트라-도메인(intra-domain) 라우팅 프로토콜에 의해서 결정됨]로부터 

데이터그램을 DNS 서버로 전달할 출력 인터페이스를 결정한다.

 

 

 

 

16. DNS 질의가 포함된 IP 데이터그램이 DNS 서버에 도착한다.

 

DNS 서버는 DNS 질의 메시지를 추출한 후, 

DNS 데이터베이스에서 이름 www.google.com을 찾아서

www.google.com에 해당하는 IP 주소(64.233.169.105)를 포함하는 DNS 자원 레코드(resource record)를 찾는다.

(DNS 서버에 이 DNS 자원 레코드가 현재 캐싱되어 있다고 가정한다.)

 

캐싱된 데이터는 구글콤(googlecom)에 대해 권위 DNS 서버가 준 것이다.

DNS 서버는 호스트 이름에 대한 IP 주소 정보를 포함하는 DNS 응답 메시지를 만들어서 

UDP 세그먼트에 넣은 후, UDP 세그먼트를 Bob의 랩톱(68.85.2.101)을 목적지로 하는 IP 데이터그램에 넣는다.

→ 이 데이터그램은 콤캐스트 네트워크를 통해 학교 라우터로 가서 이더넷 스위티를 통해 Bob의 랩톱으로 전달된다.

 

 

 

 

17. Bob의 랩톱은 DNS 메시지로부터 서버 www.google.com의 IP 주소를 추출한다.

 

💡 마침내!
많은 일을 수행한 후에 Bob의 랩톱은 이제서야 www.google.com 서버에 접속할 준비가 되었다!

 

 

 

 

 

 

 

✔️ 웹 클라이언트-서버 상호작용: TCP와 HTTP

그림 한번 더 보기

 

(이제 거의 다 왔다ㅋ;;)

 

18. 이제 Bob의 랩톱은 www.google.com의 주소를 갖게 됐으며, 

HTTP GET 메시지를 www.google.com으로 보내는데 사용할 TCP 소켓을 생성할 수 있다.

 

Bob이 TCP 소켓을 생성할 때 Bob 랩톱의 TCP는 www.google.com에 있는 TCP와 3-way-handshaking를 먼저 수행해야 한다.  

 

따라서 Bob의 랩톱은 먼저 목적지 포트 80(HTTP용)을 갖는 TCP SYN 세그먼트를 생성하고, 

TCP 세그먼트 목적지 IP 주소가 64.233.169.105(www.google.com)인 IP 데이터그램에 넣은 후, 

데이터그램을 목적지 MAC 주소가 00:22:6B:45:1F:1B(게이트웨이 라우터)인 프레임에 넣어서 

이 프레임을 스위치로 전송한다.

 

 

 

 

19. 학교 네트워크, 콤캐스트 네트워크, 구글 네트워크에 있는 라우터들은 

TCP SYN 세그먼트를 포함하고 있는 데이터그램을 위의 단계 4 ~ 16에서처럼 각 라우터의 포워딩 테이블을 사용해서 www.google.com  쪽으로 전달한다. 

 

콤캐스트와 구글 네트워크 사이의 도메인 간 링크상으로 패킷을 전달하는 데 사용되는 라우터의 포워딩 테이블 엔트리는 BGF 프로토콜에 의해서 결정된다.

 

 

 

 

20. 마침내, TCP SYN 세그먼트를 포함하고 있는 데이터그램이 www.google.com에 도착한다.

TCP SYN 메시지는 데이터그램으로부터 추출되어서 포트 80과 연관된 환영(welcome) 소켓으로 역다중화된다.

 

연결(connection) 소켓은 구글 HTTP 서버와 Bob 랩톱 사이의 TCP 연결을 위해서 생성된다.

TCP SYNACK 세그먼트를 생성해서 Bob의 랩톱을 목적지로 하는 데이터그램에 넣은 후 

www.google.com을 첫-홉 라우터로 연결해주는 링크에 적합한 링크 계층 프레임에 넣는다.

 

 

 

 

21. TCP SYNACK 세그먼트가 포함된 데이터그램은 구글, 콤캐스트, 학교 네트워크를 통해 Bob 랩톱의 이더넷 카드에 도착한다.

 

데이터그램은 단계 18에서 생성된 TCP 소켓으로 운영체제에서 역다중화된다.

(이 소켓은 연결된 상태가 된다.)

 

 

 

 

22. 💡 마침내! 이제 Bob 랩톱의 소켓은 바이트를 www.google.com로 보낼 준비가 됐으며, 

Bob의 브라우저는 가져올(fetched) URL이 포함된 HTTP GET 메시지를 생성한다.

 

HTTP GET 메시지를 소켓으로 보내며, 

이 HTTP GET 메시지는 TCP 세그먼트의 페이로드가 된다.

 

TCP 세그먼트를 데이터그램이 넣어서 보내면 단계 8 ~ 20에서처럼 www.google.com으로 전달된다.

 

 

 

 

23. www.google.com에 있는 HTTP 서버는 TCP 소켓으로부터 HTTP GET 메시지를 읽고, 

HTTP 응답 메시지를 생성하고 요청된 웹 페이지의 콘텐츠를 HTTP 응답 메시지의 body에 포함시켜서 TCP 소켓으로 보낸다.

 

 

 

 

24. HTTP 응답 메시지를 포함하고 있는 데이터그램은 구글, 콤캐스트, 학교 네트워크를 통해 전달되어 Bob의 랩톱에 도착한다.

 

Bob의 웹 브라우저 프로그램은 소켓에서 HTTP 응답 메시를 읽어서, 

HTTP 응답 메시지의 body로부터 웹 페이지에 대한 html을 추출한 후 

마침내! 웹 페이지를 출력한다!!!!!

 

 

 

 

 

 


 

 

이 포스팅은 "왜"보다는 "어떻게"에 더 집중했다.

 

 

 

 

 

 

 

 

 

 

참고: COMPUTER NETWORKING A TOP-DOWN APPROACH

 

 

 

 

 

'CS > Network' 카테고리의 다른 글

Blocking I/O & Non-Blocking I/O  (0) 2023.02.26
[Network] SSL / TLS HandShake  (0) 2023.02.16
TCP/IP 흐름제어 & 혼잡제어, TCP의 신뢰성 보장  (0) 2023.02.12
[Network] HTTP의 GET과 POST 비교  (0) 2023.01.18
[Network] HTTP & HTTPS  (0) 2023.01.17