⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc3493.txt

📁 bind 9.3结合mysql数据库
💻 TXT
📖 第 1 页 / 共 5 页
字号:
Network Working Group                                        R. GilliganRequest for Comments: 3493                                Intransa, Inc.Obsoletes: 2553                                               S. ThomsonCategory: Informational                                            Cisco                                                                J. Bound                                                               J. McCann                                                         Hewlett-Packard                                                              W. Stevens                                                           February 2003               Basic Socket Interface Extensions for IPv6Status of this Memo   This memo provides information for the Internet community.  It does   not specify an Internet standard of any kind.  Distribution of this   memo is unlimited.Copyright Notice   Copyright (C) The Internet Society (2003).  All Rights Reserved.Abstract   The de facto standard Application Program Interface (API) for TCP/IP   applications is the "sockets" interface.  Although this API was   developed for Unix in the early 1980s it has also been implemented on   a wide variety of non-Unix systems.  TCP/IP applications written   using the sockets API have in the past enjoyed a high degree of   portability and we would like the same portability with IPv6   applications.  But changes are required to the sockets API to support   IPv6 and this memo describes these changes.  These include a new   socket address structure to carry IPv6 addresses, new address   conversion functions, and some new socket options.  These extensions   are designed to provide access to the basic IPv6 features required by   TCP and UDP applications, including multicasting, while introducing a   minimum of change into the system and providing complete   compatibility for existing IPv4 applications.  Additional extensions   for advanced IPv6 features (raw sockets and access to the IPv6   extension headers) are defined in another document.Gilligan, et al.             Informational                      [Page 1]RFC 3493       Basic Socket Interface Extensions for IPv6  February 2003Table of Contents   1.  Introduction................................................3   2.  Design Considerations.......................................4       2.1  What Needs to be Changed...............................4       2.2  Data Types.............................................6       2.3  Headers................................................6       2.4  Structures.............................................6   3.  Socket Interface............................................6       3.1  IPv6 Address Family and Protocol Family................6       3.2  IPv6 Address Structure.................................7       3.3  Socket Address Structure for 4.3BSD-Based Systems......7       3.4  Socket Address Structure for 4.4BSD-Based Systems......9       3.5  The Socket Functions...................................9       3.6  Compatibility with IPv4 Applications..................10       3.7  Compatibility with IPv4 Nodes.........................11       3.8  IPv6 Wildcard Address.................................11       3.9  IPv6 Loopback Address.................................13       3.10 Portability Additions.................................14   4.  Interface Identification...................................16       4.1  Name-to-Index.........................................17       4.2  Index-to-Name.........................................17       4.3  Return All Interface Names and Indexes................18       4.4  Free Memory...........................................18   5.  Socket Options.............................................18       5.1  Unicast Hop Limit.....................................19       5.2  Sending and Receiving Multicast Packets...............19       5.3  IPV6_V6ONLY option for AF_INET6 Sockets...............22   6.  Library Functions..........................................22       6.1  Protocol-Independent Nodename and            Service Name Translation..............................23       6.2  Socket Address Structure to Node Name            and Service Name......................................28       6.3  Address Conversion Functions..........................31       6.4  Address Testing Macros................................33   7.  Summary of New Definitions.................................33   8.  Security Considerations....................................35   9.  Changes from RFC 2553......................................35   10. Acknowledgments............................................36   11. References.................................................37   12. Authors' Addresses.........................................38   13. Full Copyright Statement...................................39Gilligan, et al.             Informational                      [Page 2]RFC 3493       Basic Socket Interface Extensions for IPv6  February 20031. Introduction   While IPv4 addresses are 32 bits long, IPv6 addresses are 128 bits   long.  The socket interface makes the size of an IP address quite   visible to an application; virtually all TCP/IP applications for   BSD-based systems have knowledge of the size of an IP address.  Those   parts of the API that expose the addresses must be changed to   accommodate the larger IPv6 address size.  IPv6 also introduces new   features, some of which must be made visible to applications via the   API.  This memo defines a set of extensions to the socket interface   to support the larger address size and new features of IPv6.  It   defines "basic" extensions that are of use to a broad range of   applications.  A companion document, the "advanced" API [4], covers   extensions that are of use to more specialized applications, examples   of which include routing daemons, and the "ping" and "traceroute"   utilities.   The development of this API was started in 1994 in the IETF IPng   working group.  The API has evolved over the years, published first   in RFC 2133, then again in RFC 2553, and reaching its final form in   this document.   As the API matured and stabilized, it was incorporated into the Open   Group's Networking Services (XNS) specification, issue 5.2, which was   subsequently incorporated into a joint Open Group/IEEE/ISO standard   [3].   Effort has been made to ensure that this document and [3] contain the   same information with regard to the API definitions.  However, the   reader should note that this document is for informational purposes   only, and that the official standard specification of the sockets API   is [3].   It is expected that any future standardization work on this API would   be done by the Open Group Base Working Group [6].   It should also be noted that this document describes only those   portions of the API needed for IPv4 and IPv6 communications.  Other   potential uses of the API, for example the use of getaddrinfo() and   getnameinfo() with the AF_UNIX address family, are beyond the scope   of this document.Gilligan, et al.             Informational                      [Page 3]RFC 3493       Basic Socket Interface Extensions for IPv6  February 20032. Design Considerations   There are a number of important considerations in designing changes   to this well-worn API:   -  The API changes should provide both source and binary      compatibility for programs written to the original API.  That is,      existing program binaries should continue to operate when run on a      system supporting the new API.  In addition, existing applications      that are re-compiled and run on a system supporting the new API      should continue to operate.  Simply put, the API changes for IPv6      should not break existing programs.  An additional mechanism for      implementations to verify this is to verify the new symbols are      protected by Feature Test Macros as described in [3].  (Such      Feature Test Macros are not defined by this RFC.)   -  The changes to the API should be as small as possible in order to      simplify the task of converting existing IPv4 applications to      IPv6.   -  Where possible, applications should be able to use this API to      interoperate with both IPv6 and IPv4 hosts.  Applications should      not need to know which type of host they are communicating with.   -  IPv6 addresses carried in data structures should be 64-bit      aligned.  This is necessary in order to obtain optimum performance      on 64-bit machine architectures.   Because of the importance of providing IPv4 compatibility in the API,   these extensions are explicitly designed to operate on machines that   provide complete support for both IPv4 and IPv6.  A subset of this   API could probably be designed for operation on systems that support   only IPv6.  However, this is not addressed in this memo.2.1 What Needs to be Changed   The socket interface API consists of a few distinct components:   -  Core socket functions.   -  Address data structures.   -  Name-to-address translation functions.   -  Address conversion functions.Gilligan, et al.             Informational                      [Page 4]RFC 3493       Basic Socket Interface Extensions for IPv6  February 2003   The core socket functions -- those functions that deal with such   things as setting up and tearing down TCP connections, and sending   and receiving UDP packets -- were designed to be transport   independent.  Where protocol addresses are passed as function   arguments, they are carried via opaque pointers.  A protocol-specific   address data structure is defined for each protocol that the socket   functions support.  Applications must cast pointers to these   protocol-specific address structures into pointers to the generic   "sockaddr" address structure when using the socket functions.  These   functions need not change for IPv6, but a new IPv6-specific address   data structure is needed.   The "sockaddr_in" structure is the protocol-specific data structure   for IPv4.  This data structure actually includes 8-octets of unused   space, and it is tempting to try to use this space to adapt the   sockaddr_in structure to IPv6.  Unfortunately, the sockaddr_in   structure is not large enough to hold the 16-octet IPv6 address as   well as the other information (address family and port number) that   is needed.  So a new address data structure must be defined for IPv6.   IPv6 addresses are scoped [2] so they could be link-local, site,   organization, global, or other scopes at this time undefined.  To   support applications that want to be able to identify a set of   interfaces for a specific scope, the IPv6 sockaddr_in structure must   support a field that can be used by an implementation to identify a   set of interfaces identifying the scope for an IPv6 address.   The IPv4 name-to-address translation functions in the socket   interface are gethostbyname() and gethostbyaddr().  These are left as   is, and new functions are defined which support both IPv4 and IPv6.   The IPv4 address conversion functions -- inet_ntoa() and inet_addr()   -- convert IPv4 addresses between binary and printable form.  These   functions are quite specific to 32-bit IPv4 addresses.  We have   designed two analogous functions that convert both IPv4 and IPv6   addresses, and carry an address type parameter so that they can be   extended to other protocol families as well.   Finally, a few miscellaneous features are needed to support IPv6.  A   new interface is needed to support the IPv6 hop limit header field.   New socket options are needed to control the sending and receiving of   IPv6 multicast packets.   The socket interface will be enhanced in the future to provide access   to other IPv6 features.  Some of these extensions are described in   [4].Gilligan, et al.             Informational                      [Page 5]RFC 3493       Basic Socket Interface Extensions for IPv6  February 20032.2 Data Types   The data types of the structure elements given in this memo are   intended to track the relevant standards.  uintN_t means an unsigned   integer of exactly N bits (e.g., uint16_t).  The sa_family_t and   in_port_t types are defined in [3].2.3 Headers   When function prototypes and structures are shown we show the headers   that must be #included to cause that item to be defined.2.4 Structures   When structures are described the members shown are the ones that   must appear in an implementation.  Additional, nonstandard members   may also be defined by an implementation.  As an additional   precaution nonstandard members could be verified by Feature Test   Macros as described in [3].  (Such Feature Test Macros are not   defined by this RFC.)   The ordering shown for the members of a structure is the recommended   ordering, given alignment considerations of multibyte members, but an   implementation may order the members differently.3. Socket Interface   This section specifies the socket interface changes for IPv6.3.1 IPv6 Address Family and Protocol Family   A new address family name, AF_INET6, is defined in <sys/socket.h>.   The AF_INET6 definition distinguishes between the original   sockaddr_in address data structure, and the new sockaddr_in6 data   structure.   A new protocol family name, PF_INET6, is defined in <sys/socket.h>.   Like most of the other protocol family names, this will usually be   defined to have the same value as the corresponding address family   name:      #define PF_INET6        AF_INET6   The AF_INET6 is used in the first argument to the socket() function   to indicate that an IPv6 socket is being created.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -