DNS 캐시는 무엇입니까?
DNS 캐싱은 해결자, 운영 체제, 브라우저 및 응용 프로그램에 의해 DNS 쿼리 결과의 임시 저장입니다. DNS 조회가 수행되면, 결과는 기록의 TTL (Time To Live)에 의해 정의된 기간 동안 캐시되어, 같은 도메인에 대한 후속 요청을 허용하여 저자 서버 쿼리없이 즉시 응답 할 수 있습니다.
DNS 캐싱 매트릭스
캐싱없이, 모든 단일 웹 요청은 전체 DNS 조회를 필요로 할 것입니다 - 늦게 추가하고 대규모 DNS 트래픽을 생성. DNS 캐싱 제공:
- 꽃 응답 시간 : microseconds vs milliseconds에서 정당한 답변 반환
- Reduced Network 트래픽 : 권한 서버에 Fewer 쿼리
- Improved Resilience: 로컬 캐시는 DNS 서버가 일시적으로 접근할 수 없는 경우에도 답변을 제공합니다.
- Lower Server Load: 권한 서버는 몇몇 쿼리를 처리한다.
DNS 캐싱 작동 방법
캐싱 Hierarchy
DNS 캐싱은 여러 수준에서 발생합니다.
Browser Cache (seconds to minutes)
↓
OS Cache (seconds to minutes)
↓
Local Resolver Cache (minutes to hours)
↓
ISP Resolver Cache (minutes to hours)
↓
Authoritative Name Server (source of truth)
Cache 조회 과정
1. 사용자 요청 example.com
2. Browser 검사 캐시
3. , OS 체크 캐시
4. 놓친 경우, 해결자는 캐시
5. 놓친 경우, recursive query 서버
6. 결과 캐시 TTL 기반 각 수준에서
7. Response 반환 사용자
TTL 기반 만료
각 DNS 레코드에는 TTL 값이 포함되어 있습니다.
example.com. 300 IN A 203.0.113.50
^^^
TTL in seconds (5 minutes)
Caches는 300 초 동안이 레코드를 저장하고, 그 후에 그것을 삭제합니다. 다음 쿼리는 신선한 검색을 트리거합니다.
DNS 캐시 레이어
브라우저 캐시
현대 브라우저 캐시 DNS 결과는 독립적으로:
Chrome: 자체 DNS 캐시 사용 (chrome://net-internals/#dns) Firefox: 내부 캐시 유지 (대략:networking#dns) Safari: 시스템 해결자 사용전형적인 브라우저 캐시 TTL: 60 초 (DNS TTL의 무장)
운영 체계 캐시
Windows: DNS 클라이언트 서비스 캐시 결과# View cache
ipconfig /displaydns
# Flush cache
ipconfig /flushdns
macOS: mDNSResponder 핸들 캐싱
# Flush cache (macOS 10.15+)
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
리눅스 : 시스템별 Varies, 종종 시스템 해결
# Flush systemd-resolved cache
sudo systemd-resolve --flush-caches
# Check statistics
sudo systemd-resolve --statistics
Resolver 캐시
Recursive DNS 해결사 (ISP DNS, 8.8.8.8, 1.1.1.1)는 수백만 명의 사용자에게 큰 캐시를 유지합니다.
| 관련 제품 | 캐시 전략 |
|---|---|
| 구글 (8.8.8.8) | TTL, 글로벌 캐시를 존중 |
| (주)JXTOKEN0XZ | Respects TTL, 배포 |
| ISP 리필러 | 낮은 TTL을 무시 |
캐시 Behavior 예제
일반 작업
Query 1: example.com
→ Full lookup: 50ms
→ Cached for 300s (TTL)
Query 2: example.com (1 minute later)
→ Cache hit: 1ms
Query 3: example.com (10 minutes later)
→ Cache expired, full lookup: 50ms
→ Re-cached for 300s
DNS 기록 업데이트
Original: example.com → 203.0.113.50 (TTL: 300s)
Time: 10:00 - DNS updated to 203.0.113.51
Client queries at 10:02
→ Still cached: 203.0.113.50 (expires 10:05)
Client queries at 10:06
→ Cache expired, new lookup: 203.0.113.51
→ Cached until 10:11
TTL 전략과 캐싱
TTL 가치 선택
| 사용 사례 | 추천 TTL | 회사 소개 |
|---|---|---|
| 정적 인프라 | 3600-86400s (1-24 시간) | 거의 변화, DNS 부하를 감소 |
| 회사 소개 | 300-1800s (5-30 분) | 균형 성과 및 융통성 |
| Active 마이그레이션 | 60-300s (1-5 분) | 변화 중에 더 빠른 전파 |
| 짐 밸런싱 | 60-120s의 | 서버 변경 시 빠른 실패 |
Pre-Migration TTL 감소
DNS 변경을 계획할 때 모범 사례:
Day -7: example.com TTL 3600s (1 hour)
Day -2: Reduce to 300s (5 minutes)
Day 0: Make DNS change
→ Max 5 minute cache retention
Day +1: Restore TTL to 3600s
캐시 중독 및 보안
DNS 캐시 중독 공격
Attackers는 false DNS 레코드를 캐시에 주입하려고합니다.
1. Attacker Floods 해결사 가짜 응답
2. 1개의 경기가 끝나는 경우에, 그것은 캐시됩니다
3. 사용자는 합법적인 도메인에 대한 악성 IP를받습니다.
4. Cached 독은 많은 사용자에게 제공
보안 소송
DNSSEC : Cryptographically 서명된 기록은 중독을 방지합니다example.com. IN A 203.0.113.50
IN RRSIG A 8 2 300 ...
소스 포트 랜덤화 : forge에 대한 응답 찾기
0x20 인코딩 : 쿼리 보조 검증의 랜덤 케이스
Resolver Security: 평판형 해결사(Cloudflare, Google, Quad9) 사용
DNS 캐시 확인
Cache 내용 보기
윈도우:ipconfig /displaydns | more
macOS (무제한 정보):
sudo killall -INFO mDNSResponder
# Check Console.app for logs
리눅스 (시스템 해결):
sudo systemd-resolve --statistics
Cache Behavior 테스트
# First query (cache miss)
time dig example.com
# Immediate repeat (cache hit)
time dig example.com
# Compare times
Cache관련 문제
DNS 변경 후 이야기 캐시
Problem: 사용자를 위해 반영하지 않는 업데이트된 DNS 레코드 Solution :1. TTL에 대한 기대
2. 미래 변화의 앞에 TTL 감소
3. 로컬 캐시를 플러시하는 사용자
지나치게 공격적인 캐싱
일부 ISP는 TTL을 무시하고 더 이상 캐시 :
Problem: propagate에 시간/일 변경 Solution :- 낮은 TTLs 사용 (ISPs는 보통 300s를 최소한 존중합니다)
- 중요한 서비스에 대한 anycast DNS를 고려
- 문서 알려진 문제 ISP
부정 캐싱
실패한 조회 (NXDOMAIN)는 또한 시동됩니다:
Query: newsubdomain.example.com
Response: NXDOMAIN (does not exist)
Cached: 3600s (SOA minimum TTL)
Result: New subdomain won't resolve for 1 hour
Solution : 새로운 기록을 추가하기 전에 낮은 SOA 최소 TTL
DNS 캐시 제거
플러시
- 테스트 DNS는 즉시 변화
- 문제 해결 문제
- DNS 공급자 마이그레이션 후
- 선택된 캐시 중독
플러시 방법
윈도우:ipconfig /flushdns
마이크 :
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
리눅스 (시스템 해결):
sudo systemd-resolve --flush-caches
크롬:
Navigate to: chrome://net-internals/#dns
Click: "Clear host cache"
파이어 폭스 :
Toggle network.dnsCacheExpiration in about:config
Or restart browser
최고의 연습
1. 적절한 TTL 설정 : 밸런스 성능 및 변화 속도
2. 변경 전 Reduce TTL : DNS 업데이트 전에 낮은 TTL 2448 시간
3. Monitor 전파 : 글로벌 DNS 해결책을 확인하는 도구
4. 문서 동작 : 인프라의 캐싱 레이어를 이해
5. DNSSEC 사용: 캐시 중독에 대한 보호
6. 시험은 완전히 : DNS 변경은 성공을 선언하기 전에 예상대로 작동합니다.
7. Educate 사용자 **: 필요한 경우 캐시 플러싱에 대한 명확한 지침 제공
고급 캐싱 개념
공지사항
브라우저 및 해결자는 페이지에 대한 링크에 대한 DNS를 prefetch 할 수 있습니다 :
<!-- Hint to browser -->
<link rel="dns-prefetch" href="//cdn.example.com">
캐시 워밍
로드밸런서 및 CDNs는 중요한 레코드에 대한 캐시를 사전 판매 할 수 있습니다.
인기 카테고리
Anycast DNS 경로 쿼리에 가장 가까운 서버, 지리적으로 분산 된 캐시를 생성 최적의 성능.
DNS 캐싱은 인터넷 성능에 필수적이며 TTL을 올바르게 구성하는 것은 빠른 해상도 시간을 유지하면서 DNS 변경 propagate를 효율적으로 보장합니다.