1 / 18

이름과 주소 변환

정보통신대학 컴퓨터 학과 2005220020 도희성. 이름과 주소 변환. Chap. 11. DNS 해결사 함수. 개요. 숫자로 표시 된 주소 호스트 주소 ( eg . 206.6.226.33) 서버 포트 ( eg . 메아리서버 포트 9877, 표준시각 포트 13) 이름으로 주소를 표시하자 이름이 기억하기 더 쉬움 숫자 주소는 변할 수 있음 ( 이름은 그렇지 않다 ) IPv6 에서 숫자 주소가 매우 길어진다 . 이름과 숫자를 변환하는 함수

abba
Download Presentation

이름과 주소 변환

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 정보통신대학 컴퓨터 학과2005220020 도희성 이름과 주소 변환 Chap. 11 DNS 해결사 함수

  2. 개요 • 숫자로 표시 된 주소 • 호스트 주소 (eg. 206.6.226.33) • 서버 포트 (eg. 메아리서버 포트 9877, 표준시각 포트 13) • 이름으로 주소를 표시하자 • 이름이 기억하기 더 쉬움 • 숫자 주소는 변할 수 있음(이름은 그렇지 않다) • IPv6에서 숫자 주소가 매우 길어진다. • 이름과 숫자를 변환하는 함수 • gethostbyname, gethostbyport - 호스트/IPv4 주소 間 • getservbyname, getservbyport – 서비스/port번호 間

  3. 영역 이름 시스템(DNS) • 호스트이름과 IP주소와의 대응 관계 찾기 위해 사용 • 호스트 이름의 종류 • 단순 형 • Solaris, freebsd • 한정 형(FQDN) • Unpbook.com • 기술적으로 절대 이름이라고 하며 반드시 마침표로 끝남. • 마지막 마침표는 생략 가능(흔히 생략 : naver.com. ) • 끝의 마침표는 해결사에게 한정적임. 즉 가능한 영역 목록을 찾을 필요가 없음을 알려 준다.

  4. 자원 기록 • DNS의 항목을 자원 기록( RR)이라고 함. • A • 호스트 이름을 32bit IPv4주소로 변환 • AAAA • Quad A – 32bit의 4배라서 • 128 bit IPv6 주소로 변환 • PTR • 지시자 기록 • IP주소를 호스트 이름으로 변환 • MX • 특정한 호스트에 대해 mail 교환기로 동작하도록 명시 • CNAME • 정규 이름 • ftp, www 같은 일반적인 서비스에 할당. • 실제 호스트이름 대신에 이 서비스 이름을 사용하면 서비스가 다른 호스트로 이동하더라도 상관하지 않음

  5. 자원기록(cont.) Free bsd IN A 12.106.32.254 IN AAAA 3ffe:b80:1f8d.1.a00:20ff:fea7:686b IN MX 5 freebsd.unpbook.com. IN MX 10 mailhost.unpbook.com. ftp IN CNAME linux.unpbook.com. www IN CNAME linux.unpbook.com.

  6. 해결사와 이름 서버 • 해결사 함수 • Application이 호스트 이름을 ip주소로 바꾸거나 ip주소를 호스트 이름으로 변환하기 위해 호출하는 함수 집합 • 종종 BIND라는 프로그램으로 이름 서버 가동 • Application들은 해결사 함수를 호출함으로써 DNS서버와 접촉 • 흔한 해결사 함수 • gethostbyname • gethostbyaddr

  7. DNS서버의 작동 순서 • Domain name의 구성 • Root domain – ‘.’ 으로 표시 (이 서버는 전세계에 13개) • Top Level Domain • Country Code Based TLD (국가 기반) • ‘.kr’, ‘.jp’ 등 • Global TLD (국가 초월) • ‘.com’, ‘.net’ • 이 아래에 하위 도메인이 앞에 붙어 나간다. • 이런 각 Domain들에게 각 Domain에 관한 이름 정보를 보관하고 실시간 질의에 응답하는 서버를 DNS서버라고 부른다.

  8. DNS서버의 작동 순서(cont.) • 사용자가 웹에서 URL 입력(eg. www.korea.ac.kr) • 자신의 DNS 서버에게 www.korea.ac.kr의 ip주소가 무엇인지 질의 • 질의 받은 DNS 서버는 루트 도메인 서버에게 질의 전달 • 정보 없다면 ‘.kr’domainname server 주소 리턴 • ‘.kr’ domain name server는 ‘.ac.kr’ name server 주소 리턴 • 이런 식으로 하위 name server들이 연결되고 최종적으로 www.korea.ac.kr의 ip주소 리턴 • 이 정보들은 각 시스템에 cache형태로 보관 다음 계속적인 질의는 바로 응답 가능

  9. gethostbyname함수 • 대부분의 응용에서는 주소 대신에 이름을 다루어야 한다. • 호스트를 이름으로 찾는 가장 기본적인 함수 • 성공하면 호스트에 대한 모든 IPv4 주소를 가지고 있는 hostent구조를 가리키는 지시자를 리턴 • IPv4만을 다루기 때문에 새로운 프로그램에서는 getaddrinfo의 사용을 권고한다.

  10. gethostbyname함수(cont.) #include <netdb.h> Structhostent *gethostbyname(const char *hostname); Structhostent{ Char *h_name; //official name of host Char **h_aliases; //pointer to array of pointers to alias names Inth_addrtype; // host address type : AF_INET Inth_length; //length of address : 4 Char **h_addr_list; //ptr to array of ptrs with IPv4 addrs }; • DNS 자원 기록에서의 A기록에 대한 질의를 수행한다. • IPv4 주소만을 돌려줄 수 있다. n. 별명, 가명

  11. gethostbyaddr함수 #include <netdb.h> Structhostent *gethostbyaddr(const char *addr, socklen_tlen, intfamily); • addr : ip주소, len : 구조의 크기(4이다), family : AF_INET • 이진 IPv4주소를 취하여 그 주소에 해당하는 호스트 이름을 찾으려 한다. • gethostbyname의 반대 역할. • getbyhostname에서 설명한 것과 같은 hostent구조에 대한 지시자를 돌려 준다.

  12. 참고 자료 • AIX • Advanced International eXecutive • 미국 IBM사가 개발하여 판매하고 있는 UNIX • BSD • Berkeley Software Distribution의 약어. • 1980년대 초반에 미국 캘리포니아 대학 버클리분교에서 개발한 유닉스 운영체제의 한 종류.

  13. getservbyname & getservbyport • 호스트와마찬가지로 서비스도 흔히 이름으로 알려짐. • 프로그램에서 포트 번호 대신에 이름으로 서비스를 참조하면 포트 번호가 바뀔 경우 /etc/services 파일의 한 줄만 변경하면 된다.

  14. getservbyname • 주어진 이름으로 서비스를 검색한다.(port를 얻는다) • Servname은 반드시 명시, protoname은 아니다. • 프로토콜은 udp와 tcp가 있는데 하나의 프로토콜만 지원하는 서비스가 있으므로 잘 알고 써야 함. Structservent{ char *s_name; char **s_aliases; ints_port; char *s_proto; } #include <netdb.h> Structservent *getservbyname(const char *servname, const char *protoname);

  15. getservbyname(cont.) • 함수의 전형적인 호출 structservent *sptr; sptr=getservbyname(“domain”, “udp”); //DNS using UDP sptr=getservbyname(“ftp”,”tcp”); //FTP using TCP sptr=getservbyname(“ftp”,NULL); //FTP using TCP sptr=getservbyname(“ftp”,”udp”); //this call will fail – ftp는 tcp만 지원하기 때문에

  16. getservbyport • 주어진 포트 번호와 프로토콜을 이용해서 서비스 검색 • 함수의 전형적인 호출 structservent *sptr; sptr=getservbyport(htons(53), “udp”); //DNS using UDP sptr=getservbyport(htons(21), “tcp”); //FTP using TCP sptr=getservbyport(htons(21), NULL); //FTP using TCP sptr=getservbyport(htons(21), “udp”); //this call will fail – udp에서 21번 포트 사용하는 서비스 없다. #include <netdb.h> Structservent *getservbynport(intport, const char *protoname);

  17. getaddrinfo함수 • gethostbyname과 gethostbyaddr함수는 IPv4만 지원한다. • IPv6 주소의 해결을 위한 결과는 getaddrinfo함수이다. • 이름을 주소로 그리고 서비스를 포트로 변환시킬 뿐 아니라 주소 목록 대신에 sockaddr구조를 돌려준다.

  18. -END-

More Related