오래 못 할 짓 하지 않기
[ 네트워크 ] 7. Application layer : DNS 본문
DNS
Domain Name System
사람을 식별하기 위해서는
- 주민등록번호
- 이름
- 기타 등등
이 필요하다.
그렇다면 인터넷을 통해 Host와 Router를 식별하기 위해서는 어떻게 해야할까?
➡️ IP 주소 / Port num / Name 등등이 필요하다.
이를 위해 우리는 DNS 라는 시스템을 이용한다.
📌 특징
1. 서버들의 계층구조로 구현된 분산 데이터 베이스
2. DB ↔️ 호스트 간 소통할 수 있는 Application Protocol
- 분산하는 이유
1 ) Single point of Failure
= 중앙 DNS가 터지면 아무것도 안 됨
2) Traffic volume
3) Distance Centralized database
4) 유지/보수
📌 작동 방식
- 한 유저가 www.abc.edu로 들어가려고 한다.
1. DNS application 을 통해 DNS 클라이언트로 호출
2. Browser 가 Hostname (www.abc.edu)을 가져오고 DNS 서버에 보낸다.
3. DNS 서버에서 Hostname 관련 쿼리를 받는다.
4. 해당 Hostname에 대한 IP 주소가 있으면 그에 응답한다.
DNS 분산/구조
주소가 날라오면 Root DNS 서버에 가장 먼저 요청 ➡️ 그와 관련된 집합 A를 받는다.
> A에서 내가 찾으려고 하는 주소 TLD(Top Level Domain ) 를 요청 ➡️ 그와 관련된 B를 받는다.
> ... B에서 내가 찾으려고 하는 주소를 찾는다. ➡️ 존재한다면 해당 주소를 Client가 응답으로 받는다.
* root DNS 도메인은 ICANN 이라는 곳에서 관리한다.
TLD는 다음과 같이 General 로 있는 gTLD가 있고
국가를 식별해주는 ccTLD가 있다.
책임 서버
: 기관은 자신들의 DNS를 갖고있고, 이 기관은 Hostname -> IP를 매핑하는 DNS record를 제공한다.
DNS resolution
📌 Iterated query
ex) engineering.nyu.edu에서 gaia.cs.umass.edu로 요청
1. [ Local DNS Server ] 에 자신이 변환하려고 하는 HostName을 담아 Request
2. Local DNS Server ➡️ root DNS 서버에 전달.
3. root DNS 서버에서 .edu 받고 그에 대한 TLD 서버 주소 목록으로 응답 ➡️ Local DNS Server
4. (.edu를 받은) TLD 서버에 nyu.edu로 Request
5. TLD 서버에서 nyu.edu 를 받고, 그에 대한 Authoritative DNS 서버 주소로 응답 ➡️ Local DNS Server
6. Local DNS Server는 방금 받은 Authoritative DNS 서버로 Request
7. 최종 gaia.cs.umass.edu 의 IP 주소 응답
8. 해당 IP로 접속
- root , TLD , Authoritative Server끼리는 서로 Interaction 이 없고, Local DNS랑만 연결되어있다.
*엄밀히 따지면 5번에서는 책임 DNS서버가 아니라
책임서버와 TLD 서버 사이에 회사에서 만든 서버와 요청을 한 번씩 주고 받는다.
https://min-h-study-review.tistory.com/388
📌 Recursive query
- 여기에선 높은 계층 (= root DNS server)가 책임져야 하는 것들이 많다.
- root같이 중요한 정보를 담고있는 Server를 지키는 게 중요하기 때문에, Local DNS server가 움직이는 게 더 낫다.
예제)
답 ⬇️
DNS Caching
실제로는 위와 같이 DNS server에서 소통하는 과정을 줄이기 위해 Caching 을 사용한다.
따라서, Cache에 저장된 Hostname이라면, 로컬 DNS Server가 책임이 없는 Hostname이어도 주소를 제공할 수 있다.
- 하지만 Cache entries는 TTL (time to live)이 지나면 사라진다.
- TLD server들은 주로 Local DNS에 저장된다. ( 따라서, root name server는 거의 방문 안 함 )
DNS Record
: DNS는 Resource record를 저장하고 있는 분산형 DB이다.
Resource Record의 Format은 다음과 같다.
RR은 4가지 타입이 있고, 각 타입별로 Name, Value에 들어가는 값이 다르다. ( ttl은 모두 같음 )
📌Type A : ( { hostname } , { IP addr } , A , { ttl } )
- Name = hostname
- Value = IP address
📌Type NS : ( { domain } , { hostname } , NS , { ttl } )
- Name = domain
- Value = 해당 Domain에 대한 IP주소를 얻을 수 있는 hostname ( 아마 책임DNS 주소인 듯)
📌Type CNAME : ( { Alias name for canonical name } , { Alias name } , CNAME , { ttl } )
- Name = host의 별명 ( Alias name for canonical hostname )
- Value = 별명에 대한 정식 호스트 이름 ( Canonical name )
📌Type MX : ( { Mailserver Name } , A , { ttl } )
- Value = {value} 이름을 갖는 메일 서버의 정식 이름
DNS Protocol Message
Message의 헤더는 다음과 같다.
- ID : 16bit로 몇 개의 쿼리가 오는지 나타낸다.
- Flag
: 1) 해당 메시지가 쿼리(요청)인지 응답인지
2) Recursion Request를 해야하는지
3) Recursion Request가 가능한지
4) 책임 서버로서 IP를 담아서 보내주는지
그 아래 4개의 필드에서는
질문, 답변
책임 ,추가
에 대한 개수를 나타낸다
(출처)
한동대학교 고윤민교수님 - 네트워크
'3학년 2학기 > 네트워크 (Network)' 카테고리의 다른 글
[ 네트워크 ] 9. 비디오 스트리밍 (0) | 2024.09.26 |
---|---|
[ 네트워크 ] 8. P2P (0) | 2024.09.23 |
[ ( 자습 ) 네트워크 ] 13. 라우팅 테이블 (0) | 2024.08.25 |
[ ( 자습 ) 네트워크 ] 12. IP 주소 분류 (0) | 2024.08.15 |
[ ( 자습 ) 네트워크 ] 11. 클래스리스 주소체계 / 서브네팅 (0) | 2024.08.15 |