cs - NETWROK - The process of making a request to the DNS server
CS 스터디 공부 목록
1. 웹사이트에 접속할 때 무슨 일이 일이 일어나는지 설명해 보세요.
- 웹사이트에 접속할 때 일어나는 일은 매우 복잡하면서도 흥미로운 과정입니다.
주소창에 URL을 입력하고 엔터를 누르는 순간부터 웹사이트가 우리 눈 앞에 나타나기까지 다음과 같은 단계들을 거칩니다:
- URL 입력: 웹 브라우저에 웹사이트의 URL(예: www.example.com)을 입력하면, 이 URL은 웹사이트의 위치를 가리키는 정보를 제공합니다.
- DNS 조회: URL의 도메인 이름(예: example.com)이 어떤 IP 주소에 대응하는지 알아내기 위해 DNS(Domain Name System) 조회가 이루어집니다. 이 과정은 앞선 질문에서 자세하게 설명드렸습니다.
- TCP 연결: 웹 브라우저는 해당 IP 주소로 TCP(Transmission Control Protocol) 연결을 시도합니다. 이 연결은 클라이언트(즉, 사용자의 컴퓨터나 스마트폰)와 서버 사이의 ‘핸드셰이크’ 과정을 거쳐 이루어집니다. 이 핸드셰이크는 양쪽이 서로 통신할 준비가 되었음을 확인하는 과정입니다.
- HTTP 요청: TCP 연결이 성공하면, 웹 브라우저는 HTTP(Hypertext Transfer Protocol) 요청을 서버에 보냅니다. 이 요청에는 “GET” 또는 “POST”와 같은 메소드 정보, 사용자의 브라우저 정보, 쿠키와 같은 추가 정보 등이 포함될 수 있습니다.
- 서버의 처리: 서버는 이 HTTP 요청을 받아서 필요한 작업을 수행합니다. 예를 들어, 웹사이트의 메인 페이지를 요청한 경우 서버는 해당 HTML 파일을 찾습니다. 또는 서버 측 스크립트를 실행하거나 데이터베이스 쿼리를 수행할 수도 있습니다.
- HTTP 응답: 서버는 처리 결과를 HTTP 응답으로 클라이언트에게 보냅니다. 이 응답은 웹사이트의 HTML, CSS, JavaScript 등의 코드를 포함하며, 상태 코드(예: 200은 성공, 404는 찾을 수 없음 등)와 함께 전송됩니다.
- 브라우저의 렌더링: 웹 브라우저는 받은 HTML, CSS, JavaScript 코드를 해석하여 웹사이트를 화면에 그립니다. 이 과정을 렌더링이라고 합니다.
- 사용자의 상호작용: 이제 사용자는 웹사이트와 상호작용할 수 있습니다. 링크를 클릭하거나 폼을 제출하는 등의 행동을 할 때마다, 브라우저는 새로운 HTTP 요청을 서버에 보내고 응답을 받아 렌더링하는 과정을 반복합니다.
- 이렇게 웹사이트에 접속할 때 일어나는 일은 매우 복잡하고 다양한 기술이 연결되어 있습니다. 이 과정을 이해하는 것은 웹이 어떻게 작동하는지를 이해하는 데 중요한 첫걸음이 될 수 있습니다.
2. DNS서버에 요청하는 과정을 자세하게 설명해 보세요.
- 인터넷에서 웹사이트를 방문하거나 이메일을 보내는 등의 작업을 수행할 때, 우리는 흔히 도메인 이름(예: www.google.com)을 사용합니다. 하지만 인터넷은 사실상 이 도메인 이름이 아닌 IP 주소를 기반으로 동작합니다.
- 이때 DNS(Domain Name System)가 중요한 역할을 합니다. DNS는 사실상 인터넷의 전화번호부라고 할 수 있으며, 도메인 이름을 해당 사이트의 IP 주소로 변환해 줍니다.
DNS 서버에 요청하는 과정은 다음과 같습니다:
- DNS 쿼리 시작: 브라우저나 애플리케이션에서 특정 웹사이트(예: www.example.com)에 접속하려고 하면, 먼저 컴퓨터나 스마트폰 등의 기기는 설정된 DNS 서버에 해당 도메인의 IP 주소에 대한 쿼리를 보냅니다.
- 로컬 DNS 캐시 확인: DNS 쿼리를 수행하기 전에, 장치는 일종의 캐시인 로컬 DNS를 먼저 확인합니다. 이전에 방문한 웹사이트의 IP 주소 정보가 이곳에 저장되어 있을 수 있으며, 이 경우 DNS 쿼리 과정을 생략하고 바로 해당 IP 주소로 접속합니다.
- 재귀적 DNS 서버 조회: 로컬 DNS 캐시에 원하는 정보가 없다면, DNS 서버에 요청이 전달됩니다. 이 서버는 일반적으로 인터넷 서비스 제공자(ISP) 또는 사용자가 설정한 서버(예: Google DNS, Cloudflare DNS 등)일 수 있습니다. 이 서버는 요청받은 도메인 이름에 대한 IP 주소를 알고 있다면 바로 응답합니다. 그렇지 않다면 다른 DNS 서버에 대한 쿼리를 수행합니다.
- 루트 DNS 서버로의 쿼리: DNS 서버가 원하는 정보를 모른다면, 루트 DNS 서버로 쿼리를 보냅니다. 루트 DNS 서버는 전 세계에 13개만 존재하며, 모든 도메인에 대한 정보를 가지고 있는 것은 아니지만, 어떤 DNS 서버가 해당 정보를 가지고 있는지 알려주는 역할을 합니다.
- TLD (Top-Level Domain) DNS 서버로의 쿼리: 루트 DNS 서버는 요청을 TLD DNS 서버로 전달합니다. TLD DNS 서버는 도메인 이름의 가장 오른쪽 부분(예: .com, .org, .net 등)을 관리합니다. 예를 들어, www.example.com이라는 도메인 이름의 경우 .com TLD 서버가 관련 정보를 가지고 있습니다.
- 권한있는 DNS 서버로의 쿼리: TLD DNS 서버는 해당 도메인 이름의 권한있는(즉, 해당 도메인의 정보를 갖고 있는) DNS 서버로 요청을 전달합니다.
- 응답의 반환: 권한있는 DNS 서버는 해당 도메인 이름에 대한 IP 주소를 찾아서 원래의 DNS 서버로 응답을 반환합니다. 그리고 이 DNS 서버는 이 정보를 사용자의 컴퓨터나 스마트폰 등으로 반환합니다.
- IP 주소를 사용한 연결: 이제 사용자의 기기는 웹사이트의 IP 주소를 알고 있으므로, 이 IP 주소를 사용하여 웹서버에 연결을 시도합니다.
- 이렇게 DNS 시스템은 우리가 알아볼 수 있는 도메인 이름을 컴퓨터나 다른 네트워크 장치가 이해할 수 있는 IP 주소로 변환하는 중요한 역할을 합니다.
3. 3-way handshake, 4-way handshake 과정을 설명해 보세요.
- TCP(Transmission Control Protocol)는 데이터 전송을 위해 연결을 설정하고 해제하는 과정에서 “3-way handshake”와 “4-way handshake”라는 메커니즘을 사용합니다.
- 이 두 과정은 연결의 시작과 끝을 관리하며, 데이터 전송의 신뢰성을 보장합니다.
3.1 3-way Handshake (연결 설정)
- YN (Synchronize sequence numbers): 클라이언트가 서버에 연결 요청을 하기 위해 SYN 패킷을 보냅니다. 이 패킷은 초기 시퀀스 번호를 가지고 있습니다.
- SYN + ACK (Acknowledgment): 서버가 클라이언트의 요청을 받으면, 클라이언트에게 SYN과 ACK 패킷을 동시에 보냅니다. 이 패킷은 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호를 확인하는 ACK 번호를 포함합니다.
- ACK (Acknowledgment): 클라이언트는 마지막으로 ACK 패킷을 보내 연결을 확립합니다. 이 ACK 번호는 서버의 시퀀스 번호를 확인합니다.
- 이 과정을 통해 클라이언트와 서버는 둘 다 데이터를 보낼 준비가 되었음을 확인하고, 연결이 성립됩니다.
3.2 4-way Handshake (연결 해제)
- FIN (Finish): 클라이언트가 더 이상 보낼 데이터가 없을 때, 서버에게 FIN 패킷을 보내 연결 종료를 요청합니다.
- ACK (Acknowledgment): 서버는 클라이언트의 요청을 받고, 잘 받았음을 알리는 ACK 패킷을 보냅니다. 이때 서버는 아직 보낼 데이터가 남아있을 수 있으므로, 연결을 바로 종료하지는 않습니다.
- FIN (Finish): 서버가 모든 데이터를 클라이언트에게 보내고 나면, 이제 서버에서 FIN 패킷을 보내 연결 종료를 요청합니다.
- ACK (Acknowledgment): 클라이언트는 마지막으로 ACK 패킷을 보내 연결을 완전히 종료합니다.
- 이렇게 3-way handshake와 4-way handshake 과정을 통해 TCP 연결은 신뢰성 있는 데이터 전송을 보장합니다.