1 / 13

Advanced UNIX programming

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

Télécharger la présentation

Advanced UNIX programming

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. 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

  2. Announcements • Reading assignment • Chapter 9 • Sections 9.1 to 9.9 • Midterm Monday • Clarifications on project and HW3 • Midterm review

  3. Week 9 Topics • Socket options • getsockopt, setsockopt • fcntl • ioctl • Introduction to UDP • TCP vs UDP • UDP interface

  4. Week 9 Topics ... continued • Name and address conversions • Domain name system • gethostbyname • gethostbyaddr • uname • gethostname • getservbyname • getservbyport

  5. 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)

  6. 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!

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

More Related