인터넷 호스트의 식별
-호스트 이름(hostname): https://www.google.co.kr/ 등과 같이 사람들에게 사용된다.
-IP 주소: 32비트 계층 구조를 가진다.
127.0.0.1과 같이 각 바이트를 0~255의 십진수로 표현하고, 각 바이트를 점으로 구분한다.
DNS(Domain Name System)
DNS는 호스트 이름을 IP 주소로 변환하거나 그 반대의 역할을 해주는 분산 데이터베이스이다. DNS 서버들의 계층구조로 이루어져 있으며, 호스트가 분산 데이터베이스로 질의가 가능하도록 하는 애플리케이션 계층 프로토콜이다.
- 호스트 에일리어싱(host aliasing): 호스트는 호스트 별명을 가질 수 있는데, 복잡한 호스트 이름을 기억하기 쉽도록 한다. 원래의 호스트 이름은 정식 호스트 이름(canonical hostname)이라 한다.
- 메일 서버 에일리어싱(mail server aliasing): 사용자가 제공한 메일 서버의 호스트 이름이 정식 호스트 이름이 아닐 수 있다. 정식 호스트 이름을 얻기 위해 DNS가 수행될 수도 있다.
- 부하 분산 (load distribution): 사용자가 많이 접속하는 사이트는 여러 서버에 중복되어 존재하고, 각 서버는 다른 IP 주소를 갖게 된다. 따라서 호스트 이름은 하나지만 IP 주소는 여러개를 가질 수 있다.
DNS의 반복적 질의
호스트가 Local DNS Server에 질의하면, Local DNS Server는 Root DNS Server에게 전달한다. Root DNS Server는 로컬 DNS 서버에게 TLD 서버의 IP 주소 목록을 보낸다. 로컬 DNS 서버는 TLD 서버에게 질의를 보내고, TLD 서버는 해당 주소에 대한 책임 DNS 서버의 IP 주소를 보낸다. 로컬 서버는 마지막으로 책임 DNS 서버에게 질의를 보내면, 책임 DNS 서버는 호스트가 원하는 IP 주소를 보낸다. 로컬 DNS 서버는 호스트에게 이를 전달한다.
DNS 상에서의 재귀적 질의
호스트가 Local DNS Server에 질의하면, Local DNS Server는 Root DNS Server에게 전달한다. 루트 DNS 서버는 TLD 서버에게, TLD 서버는 책임 서버에게 각각 질의하여 응답을 얻어낸다. 응답을 얻어낸 루트 DNS 서버는 로컬 DNS 서버에게 전달하고, 로컬 DNS 서버는 호스트에게 IP 주소를 보낸다.
DNS 캐싱
로컬 DNS 서버에서 호스트 이름에 대한 IP 주소 응답을 저장한다면 DNS 질의를 줄일 수 있다. 호스트 이름과 IP 주소를 저장한 쌍은 미리 정해놓은 TTL(Time To Live) 시간 이후에 삭제된다.
주로 TLD 서버의 IP 주소들을 로컬 DNS 서버에 저장해놓는데, 이는 루트 서버로의 질의(트래픽)을 줄이게 한다.
DNS 레코드
DNS 서버들은 호스트 이름과 IP 주소를 저장하기 위한 자원 레코드(resource record, RR)을 가진다.
자원 레코드는 다음과 같이 4개의 필드로 이루어져 있다.
(Name, Value, Type, TTL)
TTL은 해당 레코드가 살아 있는 기간이다. TTL이 지나면 레코드가 제거된다.
Name과 value의 의미는 Type에 따라 달라진다.
- Type=A
- name은 호스트 이름이다.
- value는 호스트 이름에 대한 IP 주소이다.
- Type=NS
- name은 도메인이다.
- value는 해당 도메인의 책임 서버의 호스트 이름이다.
- Type=CNAME
- name은 canonical name에 대한 별칭이다.
- value는 canonical name이다.
- Type=MX
- name은 별칭 호스트 이름이다.
- value는 해당 별칭 호스트 이름을 갖는 메일 서버의 이름이다.
DNS 프로토콜 메시지
DNS 질의 메시지와 응답 메시지는 같은 형식을 가지며, 다음과 같다.
질의를 식별하는 식별자 (16비트) | 플래그 |
질문의 수 | 답변 RR(Resource Record)의 수 |
추가 RR의 수 | 추가 RR의 수 |
질문 영역 | |
답변 영역 | |
책임 영역 | |
추가 정보 영역 |
헤더 영역: 식별자부터 추가 RR의 수까지 해당하는 첫 12바이트.
플래그 필드에는 여러 플래그가 있고, 다음을 각각 1비트씩 표현한다.
- 질의(0)인지 응답(1)인지 표현한다.
- DNS 서버가 질의 이름에 대해 레코드를 갖고 있지 않을 때 재귀적 질의를 수행할 지에 대한 여부
- DNS 서버가 재귀 질의를 지원하는지에 대한 여부
- DNS 서버가 질의 이름에 대해 책임 서버인지에 대한 여부
질문 영역: 질의되는 이름, 질문 타입등이 저장된다.
답변 영역: 질의에 대한 응답 RR이 저장된다.
책임 영역: 책임 서버에 대한 RR이 저장된다.
'네트워크' 카테고리의 다른 글
(9) Go-Back-N과 Selective Repeat (0) | 2024.04.15 |
---|---|
(8) Reliable Data Transfer Protocol(rdt) (0) | 2024.04.12 |
(5) E-mail (0) | 2024.03.31 |
(4) HTTP 메시지 포맷, 쿠키와 웹 캐시, HTTP/2 (0) | 2024.03.05 |
(3) TCP와 UDP, HTTP (0) | 2024.02.21 |