DNS

2025. 5. 13. 23:39·Dev Trivia
728x90

DNS (Domain Name System)

DNS는 애플리케이션 계층 프로토콜로, 인터넷에서 도메인 이름을 IP 주소로 변환하는 시스템

웹사이트 주소를 입력할 때, DNS는 그 도메인 이름을 컴퓨터가 이해할 수 있는 숫자 형태인 IP 주소로 변환

EX) 도메인인 이름: www.example.com 👉  IP주소: 93.184.216.34

역할

 

  • 도메인 이름을 IP 주소로 변환하여 브라우저가 서버에 접속할 수 있게 함
  • 인터넷 자원의 위치를 쉽게 찾을 수 있도록 함 (사람들이 기억하기 쉬운 이름을 사용)

 

TCP와 UDP 중 어떤 것을 사용하는가?

DNS는 기본적으로 UDP를 사용, 일부 경우에 따라 TCP도 사용됨

UDP (User Datagram Protocol) 사용

  • 빠르고 간단한 요청/응답을 처리하는 데 적합하기 때문에 기본적으로 DNS질의는 UDP를 사용함
  • DNS는 짧은 메시지를 처리하며, 연결을 설정할 필요가 없고 빠른 응답을 제공
  • 기본 포트: UDP 53번 포트

TCP (Transmission Control Protocol) 사용

  • 큰 응답 메시지(예: 많은 레코드나 데이터를 반환하는 경우)에 대해서는 UDP에서 처리할 수 없는 경우 TCP로 전환
  • EX) DNS 응답이 512바이트를 초과하는 경우, 클라이언트는 TCP를 통해 DNS 서버와 통신
  • 기본 포트: TCP 53번 포트

"www.github.com" 을 브라우저에 입력하면? 

이 과정은 DNS 요청부터 웹 서버 응답까지 이루어짐

  1. 브라우저가 URL을 입력
    1. 사용자가 **www.github.com**을 브라우저에 입력하고 엔터를 칩니다.
    2. 브라우저는 URL 파싱을 통해 해당 주소가 HTTP/HTTPS로 시작하는지 확인합니다.
    3. HTTPS는 보안 연결을 의미하며, 브라우저는 먼저 DNS 요청을 통해 해당 도메인의 IP 주소를 찾습니다.
  2. DNS 요청
    • 브라우저는 **DNS 리졸버(Resolver)**에 **www.github.com**에 대한 IP 주소를 요청합니다.
    • 이때 브라우저가 DNS 캐시를 가지고 있다면, 바로 캐시된 IP 주소를 사용할 수 있습니다. 없다면, DNS 요청이 로컬 DNS 서버로 전송됩니다.
  3. DNS 서버와의 상호작용
    • 로컬 DNS 서버는 **www.github.com**에 대한 IP 주소를 찾기 위해, DNS 루트 서버부터 시작하여 최상위 도메인(TLD) 서버(예: .com), 그 후 권한 있는 DNS 서버(www.github.com을 관리하는 서버)로 순차적으로 요청을 보냅니다.
    • DNS 서버가 **www.github.com**에 대한 IP 주소를 찾으면, 그 결과를 브라우저에 반환합니다.
  4. 서버의 IP 주소 확인
    • 예를 들어, DNS 서버가 192.30.255.113과 같은 GitHub의 IP 주소를 반환합니다.
    • 브라우저는 이제 GitHub 서버의 IP 주소를 알고 있으므로, 해당 주소로 TCP 연결을 시작합니다.
  5. TCP 연결을 위한 3-way 핸드셰이크 (3단계 연결 과정)
    • 브라우저는 GitHub 서버의 IP 주소로 TCP 연결 요청을 보냅니다.
    • 이 과정은 3-way 핸드셰이크로 이루어집니다:
      1. SYN: 브라우저는 GitHub 서버에 SYN 패킷을 보내 연결 시작을 요청합니다.
      2. SYN-ACK: GitHub 서버는 SYN-ACK 패킷을 응답하여 연결을 수락합니다.
      3. ACK: 브라우저는 ACK 패킷을 보내 연결을 확립합니다.
    • 이렇게 TCP 연결이 완성됩니다.
  6. TLS/SSL 핸드셰이크 (HTTPS 연결 시)
    • HTTP/HTTPS는 보안 연결을 위해 TLS/SSL 핸드셰이크를 사용합니다. 이 과정은 HTTPS가 안전하게 데이터를 암호화하고 무결성을 보장할 수 있도록 합니다.
    1. 클라이언트 Hello: 브라우저는 GitHub 서버에 TLS ClientHello 메시지를 보내, 지원하는 암호화 알고리즘, 세션 ID 등을 포함하여 서버에 TLS 설정 요청을 합니다.
    2. 서버 Hello: GitHub 서버는 TLS ServerHello 메시지를 보내, 서버가 선택한 암호화 알고리즘과 공개 키 등을 전송합니다.
    3. 서버 인증서 전송: GitHub 서버는 서버 인증서(SSL 인증서)를 브라우저로 전송하여, 서버의 신뢰성을 인증합니다.
    4. 키 교환: 클라이언트와 서버는 세션 키를 안전하게 교환합니다. 일반적으로 디피-헬만(Diffie-Hellman) 키 교환 알고리즘을 사용합니다.
    5. 암호화된 통신 시작: 이 과정을 마친 후, 클라이언트와 서버는 대칭키를 사용하여 암호화된 통신을 시작합니다.
  7. HTTP 요청 전송
    • 이제 브라우저는 HTTPS 연결을 통해 GitHub 서버에 HTTP 요청을 보냅니다.
    • 이 요청은 GET 메서드로 웹 페이지나 리소스를 요청하는 내용이 포함됩니다.
    • 예를 들어, / (홈페이지 요청) 또는 /index.html와 같은 리소스를 요청할 수 있습니다.
  8. GitHub 서버의 응답
    • GitHub 서버는 HTTP 응답을 반환합니다. 응답에는 HTML 파일, CSS 파일, JavaScript 파일, 이미지 등 다양한 리소스가 포함될 수 있습니다.
    • 서버는 웹 페이지의 HTML과 필요한 스타일 시트(CSS), 스크립트 파일(JavaScript) 등을 전송합니다.
    • 서버는 HTTP 응답에 200 OK와 함께 웹 리소스를 반환하거나, 페이지가 없으면 404 Not Found와 같은 오류 코드를 반환할 수 있습니다.
  9. 브라우저가 응답 처리
    • 브라우저는 받은 HTML, CSS, JavaScript 등을 해석하여 웹 페이지를 렌더링합니다.
    • 만약 추가적인 리소스(이미지, 폰트 등)를 로드해야 한다면, 추가 HTTP 요청을 보내어 필요한 자원을 받습니다.
  10. 연결 종료 (TCP)
    • 모든 요청과 응답이 완료되면, 브라우저와 GitHub 서버 간의 TCP 연결은 FIN 패킷을 통해 종료됩니다.
    • 4-way 핸드셰이크를 통해 연결이 닫히며, 서버와 브라우저는 연결을 종료합니다.
728x90
'Dev Trivia' 카테고리의 다른 글
  • Domain 구현 시 Wrapper 타입 사용 이유
  • FrontController
  • Comparable vs Comparator
  • [HTML] Attribute vs Property
0woy
0woy
Algorithm, CS, Web 등 배운 내용을 기록합니다.
  • 0woy
    0woy dev
    0woy
  • 전체
    오늘
    어제
  • 🌐 LANGUAGE
    • 분류 전체보기 (80)
      • Backend (21)
        • JAVA (7)
        • DB (11)
        • Spring (1)
        • Spring Security (2)
      • Computer Science (22)
        • 네트워크 (9)
        • 운영체제 (5)
        • 보안 (7)
      • Frontend (15)
        • HTML5 (1)
        • CSS (1)
        • JS (4)
        • Vue 3 (9)
      • PS (16)
        • LeetCode (2)
        • Baekjoon (1)
        • Programmers (1)
        • 알고리즘 (12)
      • Dev Trivia (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Props
    https
    트리
    JDBC
    java
    select
    RDB
    속성
    Filter
    set
    security
    leetcode
    Graph
    Vue3
    대칭키
    tcp
    function
    Spring
    그래프
    dfs
    PreparedStatement
    DP
    BFS
    가용성
    JS
    비밀키
    공개키
    shortestpath
    javascript
    CA
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
0woy
DNS
상단으로

티스토리툴바