130 likes | 254 Views
Advanced UNIX programming. Fall 2002 Instructor: Ashok Srinivasan Lecture 25. Acknowledgements: The syllabus and power point presentations are modified versions of those by T. Baker and X. Yuan. Announcements. Reading assignment Chapter 9 Sections 9.1 to 9.9 Midterm Monday
E N D
Advanced UNIX programming Fall 2002 Instructor: Ashok Srinivasan Lecture 25 Acknowledgements: The syllabus and power point presentations are modified versions of those by T. Baker and X. Yuan
Announcements • Reading assignment • Chapter 9 • Sections 9.1 to 9.9 • Midterm Monday • Clarifications on project and HW3 • Midterm review
Week 9 Topics • Socket options • getsockopt, setsockopt • fcntl • ioctl • Introduction to UDP • TCP vs UDP • UDP interface
Week 9 Topics ... continued • Name and address conversions • Domain name system • gethostbyname • gethostbyaddr • uname • gethostname • getservbyname • getservbyport
Name and address conversions • Names are easier to use • Names add a layer of indirection • Numeric addresses can be changed without modifying the name • A program can be more portable by using a name • The mapping between hostnames and IP addresses is done by the domain name system (DNS)
Domain name system • Mapping between names and addresses • xi.cs.fsu.edu <--> 128.186.121.41 • References • See http://www.internic.net/faqs/authoritative-dns.html for information on • DNS organization • Why they should be the sole authority!
Domain name system ... continued • Hierarchical naming scheme • Name space partitioned into subdomains • Top level of domains • .com, .edu, .gov, .org, .us, .ca, .in, etc • Each domain can have subdomains • Distributed delegation of naming authority • Each domain has the authority to allow names within that domain • Naming follows organization boundary not physical network boundary
Resource records • Each server keeps resource records (RRs) • Information • IP address, record type, name, etc • Some relevant RR types • A : Maps a hostname to an IPv4 address • AAAA: Maps a hostname to an IPv6 address • PTR: Pointer records, map IP addresses to hostnames • MX: Mail exchanger for a host • CNAME: Canonical name • Used to assign CNAME records for common services
Name servers • Name server • When a name server receives a DNS request, if the server is the authority for the name, it finds the resource record and replies • Otherwise it recursively asks the next level • Example: gethostbyname(“www.cs.yale.edu”) xi.cs.fsu.edu ---> cs.fsu.edu --> edu --> yale.edu -->cs.yale.edu -->yale.edu-->edu -->cs.fsu.edu-->xi.cs.fsu.edu • Optimizations • Replication and caching
gethostbyname #include <netdb.h> struct hostent *gethostbyname(const char *hostname) struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; }; • This function queries A or AAAA records
gethostbyaddr #include <netdb.h> struct hostent *gethostbyaddr(const char *addr, size_t len, int family) • addr is a pointer to an in_addr structure • len = 4 for IPv4 and 16 for IPv6 • This function queries PTR records • See example1.c and example2.c • These two system calls incur significant communication overhead • You can observe this in example1a.c
uname and gethostbyname • Information on name, os, and hardware • #include <sys/utsname.h> int uname (struct utsname *name) struct utsname { char sysname[_UTS_NAMESIZE]; char nodename[_UTS_NODESIZE]; char release[_UTS_NAMESIZE]; char version[_UTS_NAMESIZE]; char machine[_UTS_NAMESIZE]; } • See example2.c • gethostbyname can be used to get host name
getservbyname and getservbyport • Get service information • Not querying the DNS, but a system specific file, for example /etc/services #include <netdb.h> struct servent *getservbyname(const char *servname, const char *protoname); struct servent *getservbyport(int port, const char*protoname); struct servent { char *s_name; char** s_aliases; int s_port; char *s_proto; } • See example3.c and example4.c