웹 통신의 큰 흐름

갱두·2021년 10월 15일
0

📚 네트워크

목록 보기
3/15

우리가 크롬을 실행시켜서 주소창에 특정 URL 값을 입력시키면 ?

1. 브라우저

  1. url을 분석하여 DNS 서버로부터 IP 주소를 받아온 상황에서 웹 서버로의 통신 시작
  2. 웹 브라우저는 응용계층에서 HTTP 리퀘스트 메세지(해당 페이지에 대한 정보 요청)를 웹 서버에 보냄
  3. 메세지를 송신하기 위해 OS의 내부에 있는 프로토콜 스택을 호출

이 때 만들어진 메시지 전송은 브라우저가 직접 ❌
브라우저는 메시지를 네트워크에 송출하는 기능이 없으므로 OS에 의뢰하여 메세지를 전달한다.
단, OS에 송신을 의뢰할 때는 도메인명이 아니라 ip주소로 메세지를 받을 상대를 지정해야 하는데 이 과정에서 DNS서버를 조회해야 한다.

2. 프로토콜 스택, LAN 어댑터

✔️ 프로토콜 스택 : 운영체제에 내장된 네트워크 제어용 소프트웨어

  1. 프로토콜 스택이 브라우저로부터 메세지를 받는다.
  2. 브라우저로부터 받은 메세지를 패킷 속에 저장하고 수신처 주소 등의 제어 정보를 덧붙임
  3. 패킷을 LAN 어댑터에 남긴다.
  4. LAN 어댑터는 다음 hop의 MAC주소를 붙인 프레임을 전기 신호로 변환시킨다.
  5. 신호를 LAN 케이블에 송출시킨다.

프로토콜 스택은 통신 중 오류가 발생했을 때, 제어 정보를 사용하여 고쳐 보내거나, 각종 상황을 조절하는 등 다양한 역할을 하게 된다.
즉, 네트워크 세계의 비서 역할이라고 보면 됨. 우리가 비서한테 물건만 건네주면 비서가 알아서 받는 사람의 주소와 유의사항을 써주는 것.

3. 허브, 스위치, 라우터

  1. LAN 어댑터가 송신한 프레임은 스위칭 허브를 경유하여 인터넷 접속용 라우터에 도착함
  2. 라우터는 패킷을 통신사(프로바이더)에게 전달함
  3. 인터넷으로 들어옴

4. 액세스 회선, 프로바이더

  1. 패킷은 인터넷의 입구에 있는 액세스 회선에 의해 POP(Point of Presence, 통신사용 라우터)까지 운반됨.
  2. POP를 거쳐 인터넷의 핵심부로 들어옴
  3. 수 많은 고속 라우터들 사이로 패킷이 목적지를 향해 흘러감.

5. 방화벽, 캐시서버

  1. 패킷은 인터넷 핵심부를 통과하여 웹 서버측의 LAN에 도착함
  2. 기다리고 있던 방화벽이 도착한 패킷을 검사함
  3. 패킷이 웹 서버까지 가야하는지 여부를 판단하는 캐시 서버가 존재함.

액세스한 페이지의 데이터가 캐시 서버에 있으면 웹 서버에 의뢰하지 않고 바로 그 값을 읽을 수 있음.
페이지의 데이터 중에 다시 이용할 수 있는 것이 있으면 캐시 서버에 저장됨.

6. 웹 서버

  1. 패킷이 물리적인 웹 서버에 도착하면 웹 서버의 프로토콜 스택은 패킷을 추출하여 메세지를 복원하고 웹 서버 애플리케이션에 넘김.
  2. 메세지를 받은 웹 서버 애플리케이션은 요청 메세지에 따른 데이터를 응답 메세지에 넣어 클라이언트로 회송함.
  3. 왔던 방식대로 응답 메세지가 클라이언트에게 전달됨

📝 요약

브라우저가 URL에 적힌 값을 파싱해서 HTTP Request Message를 만들고 OS에 전송 요청
이 때 도메인으로 요청을 보낼 수 없으므로 DNS Lookup 을 수행

✔️ DNS Lookup ?
인터넷 도메인 이름을 사용하여 인터넷 주소를 알아내는 것
크롬의 경우 브라우저 -> hosts 파일 -> DNS 캐시의 순서로 도메인에 매칭되는 ip를 찾는데 일반적으로 설명하는 DNS Lookup은 루트 도메인 서버에서부터 서브 도메인 서버 순으로 찾게 됨

이 요청은 프로토콜 스택이라는 OS에 내장된 네트워크 제어용 소프트웨어에 의해 패킷에 담기고, 패킷에 제어 정보를 덧붙여 LAN 어댑터에 전송하고, LAN 어댑터는 이를 전기신호로 변환시켜 송출함.

패킷은 스위칭 허브 등을 경유하여 인터넷 접속용 라우터에서 ISP로 전달되고 인터넷으로 이동함.
액세스 회선에 의해 통신사용 라우터로 운반되고 인터넷의 핵심부로 전달됨. 고속 라우터들 사이로 목적지까지 패킷이 흘러들어가게 됨

핵심부를 통과한 패킷은 목적지의 LAN에 도착하고 방화벽이 패킷을 검사하고 캐시 서버로 보내서 웹 서버에 갈 필요가 있는지 검사함.

웹 서버에 도착한 패킷은 프로토콜 스택이 패킷을 추출하여 메세지를 복원하고 웹 서버 어플리케이션에 넘김. 애플리케이션은 요청에 대한 응답 데이터를 작성하여 클라이언트로 회송하고 이는 전달된 방식 그대로 전송됨.

출처 : https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network#dns-round-robin-%EB%B0%A9%EC%8B%9D
https://github.com/ksundong/backend-interview-question

profile
👩🏻‍💻🔥

0개의 댓글