* Simple DNS Client - 컴퓨터네트워크(3학년 1학기) 2차 설계 과제
* 개발 언어 : C
* 개발 환경 : Linux / vi editor
* 개발 인원 : 2 (with 대호)


1. 문제 정의
  Internet service application의 가장 기본 기능에 해당하는 name resolving process를 실제 구현해 봄으로써 네트워크 프로토콜의 이해도를 높인다.

2. 요구사항 및 기능명세
  Internet RFC 1035에 근거하여, 프로그램 실행 명령어에 주어진 DNS resource type에 대한 query를 실행하고 그 결과를 Output 파일에 출력한다.
  A. 기능 요구 사항
    * 입력된 name server에 접속하여 제시된 query를 전송한다.
    * 기본적으로 query의 RD (recursion desired)를 1로 설정한다 (recursion 요청)
    * query의 종류는 A, MX, PTR, NS만 구현한다.
    * Server로부터 response를 수신하면 이를 해석하여 output file에 출력한다.
    * RR의 종류를 구별하기 위해 query한 name과 RR의 종류를 출력한다.
    * header는 각 field 별로 그 값을 해석하여 기록한다.
    * response의 answer에 해당하는 record가 있는 경우 이를 해석하여 출력
    * answer record가 없는 경우는, 바로 authority record를 해석하여 출력
    * authority record가 없는 경우는, additional record가 있으면 이를 해석하여 출력
    * 각 record를 해석하여 출력할 때는, type과 rdata의 내용을 해석한 것과 ttl을 출력한다.
  B. 입력
    * 사용자는 “실행파일명 ‘domain name server’ ‘query key’ ‘query type’”을 입력하여 프로그램을 실행한다.
       예) SimpleDNS.exe 202.31.128.2 daum.net MX
    * daum.net에 대한 MX record를 검색한 결과를 query하라는 것을 나타낸다.
  C. 출력 (Output file) 
    * output file의 이름은 학생의 학번이고 실행할 때마다 결과는 계속 덧붙인다.
    * Header, answer record, authority, additional records의 name, type, rdata, ttl을 개별 record마다 한 line을
     할당하여 기록한다. Record 종류별로 첫 line에 record의 종류를 표시한다.

시스템구조도

:: 구조체

펴기..



3. 실행 예시
-. DNS_Client 202.31.128.2 www.daum.net MX

 RFC 1035에 기술된 내용과 캡처한 DNS 패킷을 분석하는 작업, 응답 패킷을 포맷에 맞게 추출해내는 작업을 하는데 상당한 난이도가 있었다.  비트 단위로 변수를 사용하는 것과 패킷 자체에서 메시지를 압축하는 기법에 대해서 새롭게 알 수 있었고, 서버에서는 이 패킷 데이터를 어떤 형식으로 클라이언트들에게 보내는지에 대해서 궁금증이 생겼다.

크리에이티브 커먼즈 라이센스
Creative Commons License
2008/06/14 13:46 2008/06/14 13:46

이 글에는 트랙백을 보낼 수 없습니다

  1. 비밀방문자
    2009/10/11 23:27
    관리자만 볼 수 있는 댓글입니다.
  2. v히노v
    2009/10/12 12:13
    소스코드보다는
    RFC문서를 직접 찾아 보는 게 공부에 도움될거라 생각됩니다 ^^
Leave a Comment
[로그인][오픈아이디란?]
1 ... 67 68 69 70 71 72 73 74 75 ... 78