- 네트워크 상에서 호스트를 식별할 수 있는 방법 중 하나인 호스트 네임
- 호스트 네임을 관리할 수 있는 체계: DNS
- 자원이란 무엇인지, 네트워크 상에서 자원을 어떻게 식별할 수 있는지
메시지를 주고 받기 위해서는 두 가지가 필요하다.
- 메시지를 주고받는 송수신지 파악 - IP 주소, 도메인 네임
- 송수신하고자 하는 정보 파악 - 자원
자원을 식별할 수 있는 방법은 여러 가지가 있는데, 그 중 대표적으로 활용되는 자원 식별 방법에는 URL이 있다.
① 송수신지 파악
- 통신하고자 하는 모든 호스트의 IP 주소를 기억하기 어렵다. (ex. 전화번호부)
- IP 주소도 언제든지 바뀔 수도 있다. (동적 IP)
- 그래서 상대 호스트를 특정할 때 도메인 네임을 사용할 수 있다. (ex. 전화번호에 대응되는 사용자 이름)
- 도메인 네임은 네임 서버(DNS 서버)에서 관리하여 관리하기 편하다. (ex. 공용 전화번호부)
- 개인 전화번호부와 같이 hosts 파일에서 도메인 네임과 IP 주소의 대응 관계를 직접 가지고 있을 수 있다.

네임서버가 도메인 네임을 어떻게 관리하는지는 도메인 네임의 구조를 파악하며 확인할 수 있다. 도메인 네임은 점을 기준으로 계층적으로 분류되며, 하나의 도메인 네임 마지막에는 항상 점이 있다.
- 루트 도메인(root domain)
- 최상위 도메인 (TLD; Top-Level Domain)
- 2단계 도메인, 3단계 도메인, 4단계 도메인 ...


전체 주소 도메인 네임(FQDN; Fully-Qualified Domain Name)
- 전체 도메인 계층을 모두 포함하는 도메인 네임
- FQDN까지 알면 비로소 하나의 호스트를 식별할 수 있게 된다
'www.example.com.' 의 전체 주소가 FQDN이 된다.
계층적 도메인 네임
- 네임서버 또한 계층적으로 관리된다
- 네임 서버는 전 세계 여러 군데 분산되어 위치한다 (부하 분산, 가용성 높이기 위해)
- 이렇게 계층적이고 분산된 도메인 네임에 대한 관리 체계가 DNS
- 주요 네임 서버의 유형: 로컬 네임 서버, 루트 네임 서버, TLD(최상위 도메인) 네임 서버, 책인 네임 서버
DNS (Domain Name System)
- 계층적이고 분산된 도메인 네임에 대한 관리 체계
- 응용 계층의 프로토콜을 지칭
그리고 도메인 네임을 풀이(resolve)한다고 하는 것은 도메인 네임에 대응하는 IP 주소를 알아내는 과정과 같다. 즉 도메인 네임의 계층적 구조를 파악하여 계층에 해당하는 네임 서버에 IP 주소를 요청하는 것이다.




도메인 리졸빙을 하는 방법에는 두 가지가 있다.
- 재귀적 질의(recursive query)
- 클라이언트 → 로컬 네임 서버 → 루트 네임 서버 → TLD 네임 서버 → 책임 네임 서버에게 질의
- 최종 응답 결과를 역순으로 전달
- 반복적 질의(iterative query)
- 네임 서버에 일일이 질의-응답 반복
- 최종 응답 결과를 클라이언트에게 전달
최종적으로 IP 주소를 반환해 줄 수 있는 네임 서버는 책임 네임 서버이다. (authoritative name server)

하나의 도메인 네임에 대해서 리졸빙해야 하는 단계는 위와 같이 너무 많다. 이렇게 되면 루트 네임 서버의 부하가 많게 되는데 DNS 캐시를 적극 활용하면 이를 보완할 수 있다.
DNS 캐시 (DNS cache)
- 네임 서버들이 기존에 응답받은 결과를 임시로 저장했다가 추후 같은 질의에 이를 활용
- DNS 캐시를 저장하는 용도로만 사용되는 서버도 있음
- DNS 캐시를 활용하면 더 짧은 시간 안에 원하는 IP 주소를 얻어낼 수 있음
- DNS 캐시는 영원히 남아있는 것은 아님
- 임시 저장된 값은 TTL 값과 함께 저장
대부분의 경우에는 로컬 네임 서버 선에서 캐시된다고 한다.
② 자원 식별
자원: 네트워크 상의 메시지를 통해 주고받는 대상, HTTP가 요청하는 대상
자원을 식별할 수 있는 정보: URI (Uniform Resource Identifier)
- URL (Uniform Resource Locator): 위치 기반 자원 식별
- URN (Uniform Resource Name): 이름 기반 자원 식별
오늘날 인터넷 환경에서 자원 식별에 URL을 더 많이 사용한다.
URL
- 위치를 기반으로 자원을 식별하는데 자원의 위치는 언제든 변할 수 있음
- 즉, 자원의 위치가 변경되면 기존 URL로는 자원을 식별할 수 없음
- URL의 구조
- scheme
- authority
- path
- query
- fragment

URN
- 자원에 고유한 이름을 붙이는 이름 기반 식별자이기에 자원의 위치와 무관하게 자원을 식별
- URL만큼 널리 채택된 방식은 아님
URL 구조
ⓛ scheme
- URL의 첫 부분으로 자원에 접근하는 방법을 의미
- 일반적으로 사용할 프로토콜이 명시 ex. http://, https://
② authority
- 호스트를 특정할 수 있는 정보, 이를테면 IP 주소 혹은 도메인 네임이 명시
- 콜론 뒤에 포트 번호를 덧붙일 수도 있음
③ path
- 자원이 위치한 경로가 명시
- 자원의 위치는 슬래시를 기준으로 계층적으로 표현되고, 최상위 경로 또한 슬래시로 표현
- ex. https://datatracker.ietf.org/doc/html/rfc3986#section-3
④ query
- 쿼리 문자열(query string), 쿼리 파라미터(query parameter)
- 물음표로 시작되는 <키, 값> 형태의 데이터
- 앰퍼샌드(&)로 여러 쿼리 문자열을 덧붙일 수 있음

⑤ fragment
- 자원의 한 조각을 가리키기 위한 정보
- HTML 파일과 같은 자원에서 특정 부분을 가리키기 위해 사용
'network' 카테고리의 다른 글
| [network] 혼자 공부하는 네트워크 05-2 HTTP (0) | 2025.01.13 |
|---|---|
| [network] 혼자 공부하는 네트워크 05-1 추가: DNS 레코드 타입 (0) | 2025.01.13 |
| [network] 혼자 공부하는 네트워크 4-3 ECN: 명시적 혼잡 알림 (0) | 2025.01.06 |
| [network] 혼자 공부하는 네트워크 04-3 TCP의 오류, 흐름, 혼잡 제어 (0) | 2025.01.06 |
| [network] 혼자 공부하는 네트워크 04-2 TCP와 UDP (0) | 2025.01.06 |