1. Host Configuration (DHCP)
- PC가 부팅 후 네트워크에 연결되면, 먼저 통신에 필요한 네트워크 파라미터를 할당 받아야 한다.
- 이 과정은 DHCP (Dynamic Host Configuration Protocol) 를 통해 자동으로 수행된다.
- DHCP Discover : 클라이언트가 네트워크에 DHCP 서버를 찾기 위해 브로드캐스트 메시지를 전송한다
- DHCP Offer : 라우터 (DHCP 서버)가 사용 가능한 IP 주소 및 기타 설정을 담아 클라이언트에 응답한다.
- DHCP Request : 클라이언트가 제인받은 주소를 사용하겠다고 서버에 요청한다.
- DHCP ACK : 서버가 요청을 최종 승인하고 IP 주소 임대를 확정한다.
- 이 결과를 클라이언트는 다음 정보를 획득한다
- 사설 IP 주소
- 서브넷 마스크
- 기본 게이트웨이 주소 (라우터의 사설 IP 주소)
- DNS 서버 주소
💡
게이트웨이와 라우터의 IP
- 게이트웨이는 '외부 네트워크로 나가는 관문'이며, 라우터는 공인 IP와 사설 IP를 모두 가진다.
- 사설 IP: 내부 네트워크(LAN) 쪽을 향하는 인터페이스의 주소. (e.g.,
192.168.0.1) - 공인 IP: 외부 인터넷(WAN) 쪽을 향하는 인터페이스의 주소. 이 주소는 ISP(인터넷 서비스 제공자)로부터 할당받는다. NAT 기술을 통해 내부 장치들이 이 공인 IP를 공유하여 인터넷에 접속한다.
- 사설 IP: 내부 네트워크(LAN) 쪽을 향하는 인터페이스의 주소. (e.g.,
- 로컬 네트워크(LAN)에 있는 장치가 외부 네트워크(인터넷)와 통신해야 할 때, 모든 트래픽이 거쳐 나가는 지점
- 이 역할은 라우터가 수행하므로, 로컬 네트워크 장치들의 기본 게이트웨이 주소는 라우터의 사설 IP 주소
2. DNS (Domain Name System) Resolution
- 사용자가 브라우저에 naver.com 을 입력하면, OS는 이 도메인 이름에 매핑된 IP 주소를 찾아야 한다.
- 로컬 캐시 (브라우저, OS)를 먼저 확인한다
- 캐시에 정보가 없으면, DHCP로 할당 받은 DNS 서버에 naver.com의 IP 주소를 묻는 재귀적 쿼리를 전송한다.
- DNS 서버는 naver.com의 A 레코드를 찾아 해당 공인 IP 주소를 클라이언트에 반환한다.
💡
DNS 서버
- 전 세계에 13개의 루트 DNS 서버 클러스터를 포함하여 수많은 실제 DNS 서버가 24시간 동작하며 인터넷 통신을 가능하게 한다.
- DNS 서버는 한 곳에 있는 단일 서버가 아니라, 전 세계에 분산된 계층적 구조(hierarchical structure)를 가진다.
전체 구조
재귀 리졸버
- 클라이언트의 모든 DNS 요청을 받아 처리하는 유일한 창구
- 이 서버는 자체적으로 정보를 가지고 있지 않지만, 정보를 찾기 위해 아래의 계층 구조를 가진 서버들에게 대신 요청을 한다.
- KT, SKT 같은 ISP나 Google(
8.8.8.8), Cloudflare(1.1.1.1)가 운영하는 서버
권한 서버 계층
- 실제 도메인 정보를 가지고 있는 서버들로, Root → TLD → Authoritative 순서의 명확한 피라미드 구조를 가진다.
DNS 계층 관계 (Top-Down)
1. 루트 DNS 서버 (Root DNS Server)
- 역할: DNS 계층 구조의 최상위 정점. 인터넷의 모든 도메인 조회가 시작되는 출발점입니다.
- 기능:
naver.com의 IP 주소를 직접 알려주진 못하지만,.com을 담당하는 TLD 서버가 어디에 있는지 알려준다.
2. TLD 서버 (Top-Level Domain Server)
- 역할: 루트 서버 바로 아래 계층으로,
.com,.net,.kr같은 최상위 도메인을 관리한다. - 기능:
.comTLD 서버는naver.com의 IP 주소를 직접 알려주진 못하지만,naver.com도메인 정보를 최종적으로 관리하는 권한 네임 서버가 어디에 있는지 알려준다.
3. 권한 네임 서버 (Authoritative Name Server)
- 역할: DNS 계층 구조의 가장 아래에 있으며, 실제 도메인과 IP 주소의 매핑 정보(A 레코드 등)를 보유하고 있는 최종 서버
- 기능:
naver.com의 IP 주소가223.130.195.95라는 최종적인 답변을 해줄 수 있는 유일한 서버
쿼리 흐름으로 본 관계
- PC → 재귀 리졸버: "IP 주소 좀 찾아줘."
- 재귀 리졸버 → 루트 서버: ".com TLD 서버 주소 알려줘."
- 재귀 리졸버 → .com TLD 서버: "naver.com 권한 네임 서버 주소 알려줘."
- 재귀 리졸버 → naver.com 권한 네임 서버: “IP 주소 뭐야?"
- 권한 네임 서버 → 재귀 리졸버: "그거 223.130.195.95 야."
- 재귀 리졸버 → PC: "찾았어! 223.130.195.95 야."
💡
DNS 레코드 (DNS Records) 종류
- A 레코드 (Address Record)
가장 기본적인 레코드로, 특정 도메인 이름(호스트명)을 IPv4 주소에 매핑한다.
www.example.com IN A 192.0.2.1 - AAAA 레코드 (Quad A Record)
A 레코드의 IPv6 버전이다. 도메인 이름을 IPv6 주소에 매핑한다.
www.example.com IN AAAA 2001:db8::1 - CNAME 레코드 (Canonical Name Record)
특정 도메인 이름을 다른 도메인 이름(별칭)으로 연결한다. 최종적으로는 연결된 도메인의 A 레코드를 따라가게 된다.
www.example.com IN CNAME example.com - MX 레코드 (Mail Exchange Record)
해당 도메인의 이메일을 처리하는 메일 서버를 지정한다. 우선순위(priority) 값을 함께 지정하여 여러 메일 서버를 둘 수 있다.
example.com IN MX 10 mail.example.com - NS 레코드 (Name Server Record)
해당 도메인의 네임서버가 무엇인지를 명시하는 레코드이다. DNS 계층 구조에서 관리 위임을 위해 사용된다.
example.com IN NS ns1.example.com - TXT 레코드 (Text Record) 도메인에 대한 임의의 텍스트 정보를 저장한다. 주로 도메인 소유권 인증, 이메일 보안을 위한 SPF, DKIM 정책 등을 명시하는 데 사용된다.
3. TCP Connection Establishment
- HTTP 통신에 앞서, 신뢰성 있는 데이터 전송을 위해 클라이언트와 서버 간의 TCP 연결을 수립한다.
- 이 과정은 3-way handshake를 통해 이루어진다.
- Client → Server : 접속을 요청하는 SYN 패킷을 전송한다.
- Server → Client : 요청을 수락하며, 클라이언트의 SYN에 대한 ACK와 서버 자신의 SYN을 함께 전송한다.
- Client → Server : 서버의 SYN을 확인했다는 ACK 전송한다.
- 이 과정이 완료되면 양단 간에 소켓 (Socket)이 생성되고, 데이터 전송이 가능한 상태가 된다.
- HTTPS의 경우 이어서 TLS/SSL 핸드셰이크가 진행된다.
4. HTTP Request & Encapsulation
- TCP 연결이 수립되면, 브라우저는 애플리케이션 계층에서 HTTP Request 메시지를 생성한다.
GET / HTTP/1.1
Host: naver.com
...
- 이 데이터는 TCP/IP 스택을 따라 내려가면서 각 계층의 헤더가 붙는 캡슐화(Encapsulation) 과정을 거친다.
- Transport Layer
- HTTP 메시지는 TCP 세그먼트로 캡슐화된다.
- 헤더에는 출발지 포트(e.g.,
51000)와 목적지 포트(80or443) 정보가 포함된다.
- Network Layer
- TCP 세그먼트는 IP 패킷으로 캡슐화된다.
- 헤더에는 출발지 IP(사설 IP)와 목적지 IP(네이버 공인 IP)가 포함된다.
- Data Link Layer
- IP 패킷은 이더넷 프레임으로 캡슐화된다.
- 헤더에는 출발지 MAC 주소(PC의 NIC)와 목적지 MAC 주소(게이트웨이의 MAC)가 포함된다. (게이트웨이의 MAC 주소는 ARP를 통해 알아낸다.)
- Transport Layer
5. NAT & Routing
- 프레임은 기본 게이트웨이(라우터)로 전송된다.
- 라우터는 프레임을 수신하여 IP 패킷을 확인한 후 NAT(Network Address Translation)를 수행한다
- 라우터는 IP 패킷의 출발지 주소를 PC의 사설 IP에서 자신의 공인 IP로 변경한다.
- 동시에 여러 내부 호스트를 구분하기 위해 출발지 포트 번호도 임의의 다른 포트로 변경(PAT: Port Address Translation)하고, 이 매핑 정보를 NAT 테이블에 기록합니다.
192.168.0.10:51000 <-> [라우터 공인 IP]:62000
- 수정된 패킷은 라우팅 테이블에 따라 인터넷상의 다음 홉(hop)으로 포워딩되며, 여러 라우터를 거쳐 최종 목적지인 네이버 서버에 도달한다.
6. Server Response & Return Path
- 네이버 서버는 요청 패킷을 역캡슐화(Decapsulation)하여 HTTP 요청을 처리하고, HTML 문서가 포함된 HTTP Response를 생성한다.
- 응답 패킷은 다시 캡슐화 과정을 거친다.
- 이때 출발지 IP는 네이버 서버, 목적지 IP는 라우터의 공인 IP가 된다
- 패킷은 인터넷을 통해 다시 클라이언트의 라우터로 돌아온다
- 라우터는 수신된 패킷의 목적지 포트(
62000)를 확인하고, NAT 테이블을 참조하여 이 패킷이 원래192.168.0.10:51000에서 온 요청에 대한 응답임을 파악한다 - 라우터는 패킷의 목적지 IP와 포트를 다시 원래의 사설 IP와 포트로 수정한 후, 내부 네트워크를 통해 해당 PC로 전달한다