주소창에 주소를 입력하였을때 일어나는 과정을 알아보자.
브라우저에 naver.com과 같은 웹 주소(URL)를 입력했을 때, 네트워크 상에서 일어나는 과정은 여러 단계에 걸쳐 일어납니다. 이를 DNS 요청, TCP/IP 연결 설정, HTTP 요청 및 응답 처리의 네 가지 주요 단계로 나누어 설명할 수 있습니다.
1. DNS 조회 (Domain Name System Lookup)
브라우저에 naver.com을 입력하면 가장 먼저 해당 도메인 이름을 IP 주소로 변환해야 합니다. 도메인 이름은 사람이 읽을 수 있는 주소이지만, 네트워크는 IP 주소로 통신하므로 이를 변환하는 작업이 필요합니다.
과정:
- 브라우저는 로컬 DNS 캐시(브라우저나 운영체제에 저장된 정보)에서 naver.com의 IP 주소를 먼저 확인합니다.
- 캐시에 정보가 없다면, 브라우저는 DNS 서버에 요청을 보냅니다. 이 DNS 서버는 일반적으로 ISP(인터넷 서비스 제공자)나 설정된 외부 DNS 서버입니다.
- DNS 서버는 naver.com 도메인에 대한 IP 주소(예: 223.130.195.200)를 찾아서 브라우저에 반환합니다.
2. TCP 연결 설정 (3-Way Handshake)
IP 주소를 받은 브라우저는 해당 IP 주소와 통신을 시작하기 위해 TCP 연결을 설정해야 합니다. 이 단계는 클라이언트(브라우저)와 서버(naver.com) 간에 안정적인 연결을 수립하는 단계로, 3-Way Handshake라는 과정을 거칩니다.
과정:
- SYN (Synchronize): 클라이언트는 서버에 연결 요청을 보내기 위해 SYN 패킷을 보냅니다.
- SYN-ACK (Synchronize-Acknowledgment): 서버는 이 요청을 수락하고, 응답으로 SYN-ACK 패킷을 보냅니다.
- ACK (Acknowledgment): 클라이언트는 이 응답을 확인하고 ACK 패킷을 다시 서버로 보냅니다.
- TCP 연결 완료: 이 과정을 통해 클라이언트와 서버 간의 통신이 가능한 상태가 됩니다.
3. HTTP/HTTPS 요청 (Request)
TCP 연결이 설정되면, 브라우저는 HTTP 또는 HTTPS 프로토콜을 사용하여 웹 서버에 웹 페이지를 요청합니다. 최근 대부분의 웹사이트는 **HTTPS(HTTP Secure)**를 사용하여 암호화된 통신을 합니다. 이를 위해 추가적인 SSL/TLS 핸드셰이크가 일어납니다.
과정:
- HTTPS 핸드셰이크 (SSL/TLS Handshake, HTTPS의 경우):
- 클라이언트와 서버는 암호화된 통신을 위해 SSL/TLS 프로토콜을 사용하여 보안 연결을 설정합니다.
- 이 과정에서 서버는 자신의 SSL 인증서를 브라우저에 보내고, 브라우저는 이를 검증한 후 세션 암호를 설정합니다.
- 세션 암호가 설정되면, 클라이언트와 서버 간의 통신은 암호화됩니다.
- HTTP 요청:
- 브라우저는 서버에 요청을 보냅니다. 여기서 중요한 요청 헤더와 메서드가 포함됩니다. 예를 들어, 브라우저는 다음과 같은 정보를 포함하여 서버에 GET 요청을 보냅니다:
- GET / HTTP/1.1 (웹 페이지 요청)
- Host: naver.com (서버 도메인)
- User-Agent: 브라우저 및 운영체제 정보
- 추가적으로 쿠키, 캐시 정보 등을 전송할 수 있습니다.
- 브라우저는 서버에 요청을 보냅니다. 여기서 중요한 요청 헤더와 메서드가 포함됩니다. 예를 들어, 브라우저는 다음과 같은 정보를 포함하여 서버에 GET 요청을 보냅니다:
4. 서버 응답 및 렌더링
서버는 클라이언트의 요청을 처리하고, 응답으로 웹 페이지의 HTML, CSS, JavaScript 및 기타 리소스를 반환합니다.
과정:
- HTTP 응답:
- 서버는 클라이언트에게 HTTP 응답 코드(예: 200 OK, 404 Not Found)와 함께 HTML 문서, 이미지, CSS, 자바스크립트 파일 등 웹 페이지를 구성하는 리소스를 전송합니다.
- 브라우저 렌더링:
- 브라우저는 받은 HTML 문서를 해석하고, 페이지를 렌더링합니다. 이 과정에서 CSS 파일을 로드하여 스타일을 적용하고, 자바스크립트 파일을 실행하여 동적 요소를 처리합니다.
- 서버에서 추가적인 리소스(이미지, 폰트, 비디오 등)가 필요하면 해당 리소스에 대한 추가 요청을 보냅니다.
- 캐싱과 최적화:
- 브라우저는 로딩 속도를 개선하기 위해 캐시된 데이터를 활용할 수 있으며, 서버는 효율적인 리소스 제공을 위해 Content-Encoding, Expires, Cache-Control과 같은 헤더를 통해 리소스 캐싱을 제어합니다.
5. 연결 종료 및 유지
웹 페이지 로드가 완료되면 TCP 연결은 보통 닫히거나, 재사용을 위해 유지될 수 있습니다.
- TCP 연결 종료: 브라우저와 서버 간의 통신이 끝나면 FIN 패킷을 주고받으며 TCP 연결을 종료합니다.
- Keep-Alive: 최신 웹 서버와 브라우저는 TCP 연결을 유지하여, 같은 서버에 대한 추가 요청이 있을 때 다시 연결 설정을 하지 않고도 더 빠르게 통신할 수 있게 합니다.
요약
- DNS 조회: 도메인 이름(naver.com)을 IP 주소로 변환합니다.
- TCP 연결 설정: 클라이언트와 서버 간 안정적인 통신을 위해 TCP 3-Way Handshake를 수행합니다.
- HTTP/HTTPS 요청: 브라우저가 서버에 HTTP 또는 HTTPS 요청을 보내고, SSL/TLS 핸드셰이크가 수행됩니다.
- 서버 응답 및 렌더링: 서버가 HTML 및 리소스 파일을 응답하고, 브라우저가 이를 렌더링하여 페이지를 표시합니다.
- 연결 종료: 통신이 끝나면 TCP 연결을 종료하거나 유지합니다.
이 과정을 통해 웹 브라우저에 입력한 주소의 웹 페이지가 표시됩니다.
추가 꼬리 질문
1. DNS 서버는 어떻게 IP 주소를 찾나요?
DNS 서버는 계층 구조로 이루어진 분산 데이터베이스에서 도메인 이름을 IP 주소로 변환합니다. 브라우저가 DNS 서버에 naver.com에 대한 IP 주소를 요청하면, 이 과정에서 계층적 DNS 서버 구조가 사용됩니다.
과정:
- 로컬 캐시 확인: 먼저 브라우저나 운영체제에서 naver.com의 IP 주소가 캐시되어 있는지 확인합니다.
- 리졸버(Resolver) 서버: 캐시가 없다면, 로컬 DNS 서버(리졸버 서버)에 요청이 전송됩니다.
- 루트 DNS 서버: 리졸버 서버가 IP 주소를 모를 경우, 루트 DNS 서버(전 세계에 13개의 루트 서버 그룹)가 요청을 받습니다. 루트 서버는 요청을 .com의 최상위 도메인(TLD) 서버로 넘깁니다.
- TLD 서버: .com TLD 서버는 naver.com 도메인을 관리하는 권한이 있는 DNS 서버 정보를 반환합니다.
- 권한 있는 DNS 서버: 리졸버는 naver.com을 관리하는 권한이 있는 DNS 서버에 요청을 보내고, 이 서버는 naver.com의 실제 IP 주소를 반환합니다.
이후 리졸버는 IP 주소를 클라이언트에 전달하고, 해당 정보를 캐시에 저장합니다.
2. DNS 캐시의 역할은 무엇인가요?
DNS 캐시는 최근 조회한 도메인 이름에 대한 IP 주소를 저장하여, 동일한 도메인에 대한 후속 요청이 있을 때 DNS 서버로 다시 쿼리를 보내지 않도록 합니다. 캐시는 네트워크 트래픽을 줄이고 웹사이트 로딩 속도를 크게 향상시킬 수 있습니다.
캐시는 브라우저, 운영체제, ISP의 DNS 서버에 각각 저장될 수 있습니다.
캐시의 주요 역할:
- 트래픽 감소: 매번 DNS 서버에 쿼리를 보내는 대신 캐시에서 주소를 가져옴으로써 트래픽을 줄일 수 있습니다.
- 속도 향상: 캐시된 정보를 이용해 더 빠르게 IP 주소를 찾기 때문에 웹 페이지 로딩 시간이 짧아집니다.
3. DNS 레코드의 종류는 무엇인가요?
DNS는 다양한 레코드 유형을 사용하여 도메인 이름과 관련된 정보를 관리합니다. 주요 레코드 유형은 다음과 같습니다:
- A 레코드 (Address Record): 도메인 이름을 IPv4 주소로 변환합니다. 예: naver.com -> 223.130.195.200
- AAAA 레코드: 도메인 이름을 IPv6 주소로 변환합니다.
- CNAME 레코드 (Canonical Name): 하나의 도메인 이름을 다른 도메인 이름으로 연결하는 별칭 레코드입니다. 예: blog.naver.com -> naver.com
- MX 레코드 (Mail Exchange): 이메일 서버 주소를 지정합니다. 메일을 받을 서버를 지정하는데 사용됩니다.
- TXT 레코드: 도메인과 관련된 텍스트 정보를 저장하는 레코드입니다. 주로 인증 및 보안(예: SPF, DKIM)과 관련하여 사용됩니다.
- NS 레코드 (Name Server): 도메인을 관리하는 네임 서버를 지정합니다.
4. 3-Way Handshake 과정에서 패킷 손실이 발생하면 어떻게 처리되나요?
TCP 연결을 설정하는 3-Way Handshake 중에 패킷 손실이 발생하면 TCP는 재전송 메커니즘을 사용하여 패킷을 다시 전송합니다. TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 다음과 같은 과정을 거칩니다.
과정:
- SYN 패킷 손실: 클라이언트가 보낸 SYN 패킷이 손실되면, 클라이언트는 일정 시간이 지나도 서버로부터 SYN-ACK 응답이 오지 않으면 SYN 패킷을 다시 전송합니다. TCP는 재전송 타이머에 기반하여 이를 반복합니다.
- SYN-ACK 패킷 손실: 서버가 보낸 SYN-ACK 패킷이 손실되면, 클라이언트는 응답이 없을 경우 최초의 SYN 패킷을 재전송하고, 서버는 이에 다시 SYN-ACK 패킷을 보냅니다.
- ACK 패킷 손실: 클라이언트의 ACK 패킷이 손실되면, 서버는 ACK를 기다리다가 재전송 요청을 하지 않고 클라이언트의 재전송 패킷을 기다립니다. 그러나 3-Way Handshake는 클라이언트와 서버가 재전송 메커니즘을 통해 통신을 완료할 수 있습니다.
5. TCP와 UDP의 차이점은 무엇인가요?
TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)는 둘 다 인터넷에서 데이터를 전송하는 프로토콜이지만, 다음과 같은 차이점이 있습니다:
- 연결 방식:
- TCP는 연결 지향 프로토콜로, 통신을 시작하기 전에 3-Way Handshake로 연결을 설정하고, 통신이 끝나면 연결을 종료합니다.
- UDP는 비연결형 프로토콜로, 연결 설정 과정 없이 데이터를 바로 전송합니다.
- 신뢰성:
- TCP는 신뢰성 있는 데이터 전송을 보장하기 위해 패킷 재전송, 패킷 순서 보장, 흐름 제어, 혼잡 제어 등의 메커니즘을 제공합니다.
- UDP는 신뢰성 보장을 하지 않으며, 패킷이 손실되거나 순서가 어긋나더라도 재전송을 하지 않습니다.
- 속도:
- TCP는 신뢰성을 보장하기 때문에 속도가 느릴 수 있습니다.
- UDP는 추가적인 오류 검증이나 연결 설정 없이 데이터를 전송하므로 속도가 빠릅니다.
- 용도:
- TCP는 웹 브라우징(HTTP, HTTPS), 이메일(SMTP), 파일 전송(FTP)과 같이 신뢰성이 중요한 애플리케이션에 사용됩니다.
- UDP는 실시간 스트리밍, 온라인 게임, VoIP와 같이 빠른 전송이 중요한 애플리케이션에 주로 사용됩니다.
6. TCP 연결 종료 과정(4-Way Handshake)은 어떻게 동작하나요?
TCP 연결 종료 과정은 4-Way Handshake로 이루어집니다. 클라이언트나 서버 중 한쪽이 연결을 종료하기를 원할 때, 다음 과정을 통해 통신을 종료합니다.
과정:
- FIN: 연결을 종료하려는 측(클라이언트 또는 서버)이 상대방에게 FIN(종료 요청) 패킷을 보냅니다.
- ACK: 상대방은 FIN 패킷을 받으면 ACK 패킷을 보내 종료 요청을 확인합니다. 이때 상대방은 여전히 데이터를 전송할 수 있습니다.
- FIN: 상대방도 전송이 완료되면, FIN 패킷을 다시 연결 종료를 요청합니다.
- ACK: 첫 번째 측이 ACK 패킷을 보내 연결을 종료합니다.
이 과정을 통해 양측이 데이터를 모두 전송하고, 통신이 안전하게 종료됩니다.
'게임 서버' 카테고리의 다른 글
TCP/UDP 그리고 3way handshake (1) | 2024.10.07 |
---|---|
라우터란 무엇인가 (0) | 2024.10.04 |
IP 의 개념 (0) | 2024.10.04 |
HTTP 와 TCP 웹소 (0) | 2024.09.27 |
OSI 7계층 과 TCP/IP 4계층 (0) | 2024.08.28 |