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 conversionsName and address conversions –Domain name system –gethostbyname –gethostbyaddr –uname –gethostname –getservbyname –getservbyport
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) Name and address conversions
Mapping between names and addresses xi.cs.fsu.edu References –See dns.html for information on dns.html DNS organization Why they should be the sole authority! Domain name system
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 Domain name system... continued
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 Resource records
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(“ 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 Name servers
#include 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 gethostbyname
#include 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 gethostbyaddr
Information on name, os, and hardware #include 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 uname and gethostbyname
Get service information –Not querying the DNS, but a system specific file, for example /etc/services #include 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 getservbyname and getservbyport