One document matched: draft-huang-behave-rfc3338bis-00.txt
Behave B. Huang
Internet-Draft H. Deng
Obsoletes: 3338 (if approved) China Mobile
Intended status: Experimental T. Savolainen
Expires: April 22, 2010 Nokia
October 19, 2009
Dual Stack Hosts Using "Bump-in-the-API" (BIA)
draft-huang-behave-rfc3338bis-00
Status of this Memo
This Internet-Draft is submitted to IETF in full conformance with the
provisions of BCP 78 and BCP 79. This document may contain material
from IETF Documents or IETF Contributions published or made publicly
available before November 10, 2008. The person(s) controlling the
copyright in some of this material may not have granted the IETF
Trust the right to allow modifications of such material outside the
IETF Standards Process. Without obtaining an adequate license from
the person(s) controlling the copyright in such materials, this
document may not be modified outside the IETF Standards Process, and
derivative works of it may not be created outside the IETF Standards
Process, except to format it for publication as an RFC or to
translate it into languages other than English.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet-
Drafts.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt.
The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html.
Copyright Notice
Copyright (c) 2009 IETF Trust and the persons identified as the
document authors. All rights reserved.
Huang, et al. Expires April 22, 2010 [Page 1]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents in effect on the date of
publication of this document (http://trustee.ietf.org/license-info).
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document.
Abstract
This document describes the "Bump-In-the-API" (BIA) host based
protocol translation mechanism that allows applications supporting
only one IP address family to communicate with peers that are
reachable or supporting only the other address family.
This specification addresses scenarios where a host is provided dual
stack, IPv6 only or IPv4 only network connectivity. In the dual stack
network case, single address family applications in the host will
communicate directly with other hosts using the same address family.
In the case of IPv6 only network or IPv6 only destination, IPv4-
originated communications have to be be translated into IPv6. IPv6
communications may have to translated similarly to IPv4. Technically,
the BIS-enabled host resolves both IPv4 and IPv6 addresses of the
destination and behaves according to received responses.
Acknowledgement of previous work
This document is an update to and directly derivative from Seungyun
Lee, Myung-Ki Shin, Yong-Jin Kim, Alain Durand, and Erik Nordmark's
[RFC3338], which similarly provides a dual stack host means to
communicate with other IPv6 host using existing IPv4 appliations.The
original document was a product of the NGTRANS working group.
The changes in this document reflect three components:
1. Supporting IPv6 only network connections
2. Supporting IPv4 only network connections
3. Supporting Well Known Prefix
4. Removing Applicability and Disclaimer
The goal of this mechanism is the same as that of the Bump-in-the-
stack mechanism, but this mechanism provides the translation method
between the IPv4 APIs and IPv6 APIs. Thus, the goal is simply
achieved without IP header translation.
Huang, et al. Expires April 22, 2010 [Page 2]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Dual Stack Host Architecture Using BIA . . . . . . . . . . . . . 5
2.1 Function Mapper . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Name Resolver . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Address Mapper . . . . . . . . . . . . . . . . . . . . . . . 7
3. Behavior Examples -- dual stack network and IPv6 only peer . . . 8
3.1 Originator Behavior . . . . . . . . . . . . . . . . . . . . 8
3.2 Recipient Behavior . . . . . . . . . . . . . . . . . . . . 10
4. Behavior Examples -- IPv6 only network and dual-stack peer . . 11
4.1 Originator Behavior . . . . . . . . . . . . . . . . . . . 12
4.2 Recipient Behavior . . . . . . . . . . . . . . . . . . . . 14
5. Behavior Examples -- IPv4 only network and IPv4 only peer . . 14
5.1 Originator Behavior . . . . . . . . . . . . . . . . . . . 15
5.2 Recipient Behavior . . . . . . . . . . . . . . . . . . . . 17
6. Considerations . . . . . . . . . . . . . . . . . . . . . . . . 19
6.1 Socket API Conversion . . . . . . . . . . . . . . . . . . 19
6.2 ICMP Message Handling . . . . . . . . . . . . . . . . . . 19
6.3 IPv4 or IPv6 Address Pool and Mapping Table . . . . . . . 19
6.4 Internally Assigned IPv4 or IPv6 Addresses . . . . . . . . 19
6.5 Mismatch between DNS result(AAAA) and Peer Application . . 20
Version(v4) . . . . . . . . . . . . . . . . . . . . . . . . . 20
6.6 Implementation Issues . . . . . . . . . . . . . . . . . . 20
7. Limitations . . . . . . . . . . . . . . . . . . . . . . . . . 22
8. Security Considerations . . . . . . . . . . . . . . . . . . . 22
9. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 22
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 22
Appendix A : API list intercepted by BIA . . . . . . . . . . . . 25
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27
1. Introduction
RFC3338 [RFC3338] stated that there are few applications for IPv6
[IPV6] as compared with IPv4 [IPV4] in which a great number of
applications are available. In order to advance the transition
smoothly, it is highly desirable to make the availability of IPv6
applications increase to the same level as IPv4. Unfortunately,
however, this is expected to take a long time. Meanwhile, there are
scenarios where a dual stack host is connected to IPv6-only network
but it is running IPv4-only applications, or a host is running IPv6-
only applications while connected to IPv4-only network.
RFC3338 proposed a mechanism of dual stack hosts using the technique
called "Bump-in-the-API" [BIA] in the IP security area. The
technique inserts an API translator between the socket API module and
the TCP/IP module in the dual stack hosts, so that it translates the
Huang, et al. Expires April 22, 2010 [Page 3]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
IPv4 socket API function into IPv6 socket API function and vice
versa.
RFC2767 [BIS] specifies a host translation mechanism using a
technique called "Bump-in-the-Stack". It translates IPv4 into IPv6,
and vice versa using the IP conversion mechanism defined in [SIIT].
BIS allows hosts to communicate with other IPv6 hosts using existing
IPv4 applications. However, this approach is to use an API
translator which is inserted between the TCP/IP module and network
card driver, so that it has the same limitations as the [SIIT] based
IP header translation methods. In addition, its implementation is
dependent upon the network interface driver.
When IPv4 or IPv6 applications on the dual stack communicate with
other IPv6 or IPv4 hosts, the API translator detects the socket API
functions from IPv4 or IPv6 applications and invokes the IPv6 or IPv4
socket API functions to communicate with the IPv6 or IPv4 hosts, and
vice versa. In order to support communication between IPv4 or IPv6
applications and the target IPv6 or IPv4 hosts, pooled IPv4 or IPv6
addresses will be assigned through the name resolver in the API
translator. But the those IPv4 or IPv6 addresses never flow out from
them.
The network scenario specified in RFC3338 is a dual stack network.
where IPv4 communication can be transported independently of IPv6.
However, if the network provides only IPv6 transport, applications's
IPv4 packets have to be translated into IPv6. The opposite happens
when the network is IPv4-only and application is IPv6-only capable.
This specification assumes that host knows it is connected with a
dual stack network, IPv6-only network or IPv4-only network. The host
learns that from layer 2 or from results of layer 3 IP address
configuration mechanisms.
If the network which host is connecting with is IPv4 only network,
then host's IPv4 application will behave regularly, and it's IPv6
application's packets have to be translated into IPv4 packets.
If the network which host is connecting with is IPv6 only network,
then host's IPv6 application will behave reguarly, and it's IPv4
application's packets have to be translated into IPv6 in order to
communicate with IPv6 applications.
If the network which host is connecting with is dual stack network,
then host will behave as what RFC3338 originally described.
The scenario where destination peer is not reachable with the address
family a host is provisioned with is not covered by this document, as
Huang, et al. Expires April 22, 2010 [Page 4]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
that requires network based protocol translation solution. However,
the BIA technology can complement network based protocol translation
such as [NAT64] and [PNAT].
Moreover, since the translation is automatically carried out with
help of DNS protocol, most applications do not need to know whether
target hosts are IPv6 or IPv4 ones. That is, this allows hosts to
communicate with other IPv6 hosts using existing IPv4 applications
and other IPv4 hosts using existing IPv6 applications; thus it seems
as if peers are always dual stack hosts with applications for both
IPv4 and IPv6.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC 2119].
This document uses terms defined in [IPv6], [TRANS-MECH], [BIS]and
[BIA].
2. Dual Stack Host Architecture Using BIA
Figure 1 shows the architecture of the host in which BIA is
installed.
+----------------------------------------------+
| +-------------------+ +-------------------+ |
| | | | | |
| | IPv4 applications | | IPv6 applications | |
| | | | | |
| +-------------------+ +-------------------+ |
| +------------------------------------------+ |
| | Socket API (IPv4, IPv6) | |
| +------------------------------------------+ |
| +-[ API translator]------------------------+ |
| | +-----------+ +---------+ +------------+ | |
| | | Name | | Address | | Function | | |
| | | Resolver | | Mapper | | Mapper | | |
| | +-----------+ +---------+ +------------+ | |
| +------------------------------------------+ |
| +--------------------+ +-------------------+ |
| | | | | |
| | TCP(UDP)/IPv4 | | TCP(UDP)/IPv6 | |
| | | | | |
| +--------------------+ +-------------------+ |
+----------------------------------------------+
Figure 1 Architecture of the dual stack host using BIA
Huang, et al. Expires April 22, 2010 [Page 5]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Dual stack hosts defined in RFC2893 [TRANS-MECH] need applications,
TCP/IP modules and addresses for both IPv4 and IPv6. The proposed
hosts in this document have an API translator to communicate with
other IPv6 hosts using existing IPv4 applications, or communicate
with other IPv4 hosts using existing IPv4 applications. The API
translator consists of 3 modules, a name resolver, an address mapper
and a function mapper.
2.1 Function Mapper
It translates an IPv4 socket API function into an IPv6 socket API
function, and vice versa.
When detecting the IPv4 socket API functions from IPv4 applications,
it intercepts the function call and invokes new IPv6 socket API
functions which correspond to the IPv4 socket API functions. Those
IPv6 API functions are used to communicate with the target IPv6
hosts. When detecting the IPv6 socket API functions from the data
received from the IPv6 hosts, it works symmetrically in relation to
the previous case.
When detecting the IPv6 socket API functions from IPv6 applications,
it intercepts the function call and invokes new IPv4 socket API
functions which correspond to the IPv6 socket API functions. Those
IPv4 API functions are used to communicate with the target IPv4
hosts. When detecting the IPv4 socket API functions from the data
received from the IPv4 hosts, it works symmetrically in relation to
the previous case.
2.2 Name Resolver
It returns a proper answer in response to the IPv4 or IPv6
application's request.
When an IPv4 application tries to resolve names via the resolver
library (e.g. gethostbyname()), BIA intercept the function call and
instead call the IPv6 equivalent functions (e.g. getnameinfo()) that
will resolve both A and AAAA records.
If the AAAA record is available, it requests the address mapper to
assign an IPv4 address corresponding to the IPv6 address, then
creates the A record for the assigned IPv4 address, and returns the A
record to the application.
When an IPv6 application tries to resolve names via the resolver
library (e.g. getnameinfo()), BIA intercept the function call and
instead call the IPv4 equivalent functions (e.g. gethostbyname())
that will resolve both A and AAAA records.
Huang, et al. Expires April 22, 2010 [Page 6]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
If the A record is available, it requests the address mapper to
assign an IPv6 address corresponding to the IPv4 address, then
creates the AAAA record for the assigned IPv6 address, and returns
the AAAA record to the application.
2.3 Address Mapper
It internally maintains a table of the pairs of an IPv4 address and
an IPv6 address. The IPv4 addresses are assigned from an IPv4
address pool. It uses the unassigned IPv4 addresses
(e.g., 0.0.0.1 ~ 0.0.0.255).
When the name resolver or the function mapper requests it to assign
an IPv4 address corresponding to an IPv6 address, it selects and
returns an IPv4 address out of the pool, and registers a new entry
into the table dynamically. The registration occurs in the following
2 cases:
(1) When the name resolver gets only an 'AAAA' record for the target
host name and there is not a mapping entry for the IPv6 address.
(2) When the function mapper gets a socket API function call from the
data received and there is not a mapping entry for the IPv6
source address.
When the name resolver or the function mapper requests it to assign
an IPv6 address corresponding to an IPv4 address, it selects and
returns an IPv6 address out of the pool, and registers a new entry
into the table dynamically. The registration occurs in the following
2 cases:
(1) When the name resolver gets only an 'A' record for the target
host name and there is not a mapping entry for the IPv4 address.
(2) When the function mapper gets a socket API function call from the
data received and there is not a mapping entry for the IPv4
source address.
NOTE: This is the same as that of the Address Mapper in [BIS].
Huang, et al. Expires April 22, 2010 [Page 7]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
3. Behavior Examples -- dual stack network and IPv6 only peer
This section describes behaviors of the proposed dual stack host
called "dual stack", which communicates with an IPv6 host called
"host6" using an IPv4 application on dual stack network.
In this section, the meanings of arrows are as follows:
---> A DNS message for name resolving created by the applications
and the name resolver in the API translator.
+++> An IPv4 or IPv6 address request to and reply from the
address mapper for the name resolver and the function
mapper.
===> Data flow by socket API functions created by the
applications and the function mapper in the API translator.
3.1 Originator Behavior
This sub-section describes the behavior when the "dual stack" sends
data to "host6".
When an IPv4 application sends a DNS query to its name server, the
name resolver intercepts the query and then creates a new query to
resolve both A and AAAA records. When only the AAAA record is
resolved, the name resolver requests the address mapper to assign an
IPv4 address corresponding to the IPv6 address.
The name resolver creates an A record for the assigned IPv4 address
and returns it to the IPv4 applications.
In order for the IPv4 application to send IPv4 packets to host6, it
calls the IPv4 socket API function.
The function mapper detects the socket API function from the
application. If the result is from IPv6 applications, it skips the
translation. In the case of IPv4 applications, it requires an IPv6
address to invoke the IPv6 socket API function, thus the function
mapper requests an IPv6 address to the address mapper. The address
mapper selects an IPv4 address from the table and returns the
destination IPv6 address. Using this IPv6 address, the function
mapper invokes an IPv6 socket API function corresponding to the IPv4
socket API function.
When the function mapper receives an IPv6 function call,it requests
the IPv4 address to the address mapper in order to translate the IPv6
socket API function into an IPv4 socket API function. Then, the
function mapper invokes the socket API function for the IPv4
applications.
Huang, et al. Expires April 22, 2010 [Page 8]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Figure 2 illustrates the behavior described above:
"dual stack" "host6"
IPv4 Socket | [ API Translator ] | TCP(UDP)/IP Name
appli- API |Name Address Function| (v6/v4) Server
cation |Resolver Mapper Mapper |
| | | | | | | |
<<Resolve an IPv4 address for "host6".>> | | |
| | | | | | | |
|--------|------->| Query of 'A' records for host6. | |
| | | | | | | |
| | |--------|--------|---------|--------------|------>|
| | | Query of 'A' records and 'AAAA' for host6 |
| | | | | | | |
| | |<-------|--------|---------|--------------|-------|
| | | Reply with the 'AAAA' record. | |
| | | | | | |
| | |<<The 'AAAA' record is resolved.>> |
| | | | | | |
| | |+++++++>| Request one IPv4 address |
| | | | corresponding to the IPv6 address.
| | | | | | |
| | | |<<Assign one IPv4 address.>> |
| | | | | | |
| | |<+++++++| Reply with the IPv4 address. |
| | | | | | |
| | |<<Create 'A' record for the IPv4 address.>>
| | | | | | |
|<-------|--------| Reply with the 'A' record.| |
| | | | | | |
Figure 2 Behavior of the originator (1/2)
Huang, et al. Expires April 22, 2010 [Page 9]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
"dual stack" "host6"
IPv4 Socket | [ API Translator ] | TCP(UDP)/IP
appli- API |Name Address Function| (v6/v4)
cation |Resolver Mapper Mapper |
| | | | | | |
<<Call IPv4 Socket API function >> | | |
| | | | | | |
|========|========|========|=======>|An IPv4 Socket API function Call
| | | | | | |
| | | |<+++++++| Request IPv6 addresses|
| | | | | corresponding to the |
| | | | | IPv4 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv6 addresses.
| | | | | | |
| | | | |<<Translate IPv4 into IPv6.>>
| | | | | | |
| An IPv6 Socket API function call.|=========|=============>|
| | | | | | |
| | | | |<<Reply an IPv6 data |
| | | | | to dual stack.>> |
| | | | | | |
| An IPv6 Socket API function call.|<========|==============|
| | | | | | |
| | | | |<<Translate IPv6 into IPv4.>>
| | | | | | |
| | | |<+++++++| Request IPv4 addresses|
| | | | | corresponding to the |
| | | | | IPv6 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv4 addresses.
| | | | | | |
|<=======|========|========|========| An IPv4 Socket function call.
| | | | | | |
Figure 2 Behavior of the originator (2/2)
3.2 Recipient Behavior
This subsection describes the recipient behavior of "dual stack". The
communication is triggered by "host6".
"host6" resolves the address of "dual stack" with 'AAAA' records
through its name server, and then sends an IPv6 packet to the "dual
stack".
The IPv6 packet reaches the "dual stack" and the function mapper
detects it.
Huang, et al. Expires April 22, 2010 [Page 10]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
The function mapper requests the IPv4 address to the address mapper
in order to invoke the IPv4 socket API function to communicate with
the IPv4 application. Then the function mapper invokes the
corresponding IPv4 socket API function for the IPv4 applications
corresponding to the IPv6 functions.
Figure 3 illustrates the behavior described above:
"dual stack" "host6"
IPv4 Socket | [ API Translator ] | TCP(UDP)/IP
appli- API |Name Address Function| (v6/v4)
cation |Resolver Mapper Mapper |
| | | | | | |
<<Receive data from "host6".>> | | |
| | | | | | |
| An IPv6 Socket function call.|<========|==============|
| | | | | | |
| | | |<+++++++| Request IPv4 addresses|
| | | | | corresponding to the IPv6
| | | | | addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv4 addresses.
| | | | | | |
| | | | |<<Translate IPv6 into IPv4.>>
| | | | | | |
|<=======|========|========|========| An IPv4 function call |
| | | | | | |
<<Reply an IPv4 data to "host6".>> | | |
| | | | | | |
|========|========|========|=======>| An IPv4 function call |
| | | | | | |
| | | | |<<Translate IPv4 into IPv6.>>
| | | | | | |
| | | |<+++++++| Request IPv6 addresses|
| | | | | corresponding to the IPv4
| | | | | addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv6 addresses.
| | | | | | |
| An IPv6 Socket function call.|=========|=============>|
| | | | | | |
Figure 3 Behavior of Receiving data from IPv6 host
4. Behavior Examples -- IPv6 only network and dual-stack peer
This section describes behaviors of the proposed dual stack host
called "dual stack", which communicates with a dual-stack peer
Huang, et al. Expires April 22, 2010 [Page 11]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
called "host46" using an only IPv4 applicationwhile provisioned
only with IPv6 network connectivity.
4.1 Originator Behavior
This subsection describes the originator behavior of "dual stack."
The communication is triggered by "dual stack."
The application sends a query to its name server to resolve 'A'
records for "host46."
The resolver snoops the query, then creates another query for 'AAAA' to
resolve both 'A' and 'AAAA' records for the host name, and sends it
to the server. In this case, both the 'A' and 'AAAA' records are resolved, so
the resolver does not need to request the mapper to allocate any IPv4 addresses from its pool,
but only to store mapping between received destination's IPv4 and IPv6 addresses.
In this case of communication with an dual-stack host, the 'A'
record is also resolved and the resolver can return it to the
application as is.
In order for the IPv4 application to send IPv4 packets to host6, it
calls the IPv4 socket API function.
The function mapper detects the socket API function from the
application. If the result is from IPv6 applications, it skips the
translation. In the case of IPv4 applications, it requires an IPv6
address to invoke the IPv6 socket API function, thus the function
mapper requests an IPv6 address to the address mapper. The address
mapper selects an IPv4 address from the table and returns the
destination IPv6 address. Using this IPv6 address, the function
mapper invokes an IPv6 socket API function corresponding to the IPv4
socket API function.
When the function mapper receives an IPv6 function call,it requests
the IPv4 address to the address mapper in order to translate the IPv6
socket API function into an IPv4 socket API function. Then, the
function mapper invokes the socket API function for the IPv4
applications.
Figure 4 illustrates the behavior described above:
"dual stack" "host46"
IPv4 Socket | [ API Translator ] | TCP(UDP)/IP Name
appli- API |Name Address Function| (v6/v4) Server
cation |Resolver Mapper Mapper |
| | | | | | | |
<<Resolve an IPv4 address for "host6".>> | | |
Huang, et al. Expires April 22, 2010 [Page 12]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
| | | | | | | |
|--------|------->| Query of 'A' records for host6. | |
| | | | | | | |
| | |--------|--------|---------|--------------|------>|
| | | Query of 'A' records and 'AAAA' for host6 |
| | | | | | | |
| | |<-------|--------|---------|--------------|-------|
| | | Reply with the 'AAAA' record. | |
| | | | | | |
| | |<<The 'AAAA' record is resolved.>> |
| | | | | | |
| | |+++++++>| Request one IPv4 address |
| | | | corresponding to the IPv6 address.
| | | | | | |
| | | |<<Assign one IPv4 address.>> |
| | | | | | |
| | |<+++++++| Reply with the IPv4 address. |
| | | | | | |
| | |<<Create 'A' record for the IPv4 address.>>
| | | | | | |
|<-------|--------| Reply with the 'A' record.| |
| | | | | | |
Figure 4 Behavior of the originator (1/2)
Huang, et al. Expires April 22, 2010 [Page 13]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
"dual stack" "host46"
IPv4 Socket | [ API Translator ] | TCP(UDP)/IP
appli- API |Name Address Function| (v6/v4)
cation |Resolver Mapper Mapper |
| | | | | | |
<<Call IPv4 Socket API function >> | | |
| | | | | | |
|========|========|========|=======>|An IPv4 Socket API function Call
| | | | | | |
| | | |<+++++++| Request IPv6 addresses|
| | | | | corresponding to the |
| | | | | IPv4 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv6 addresses.
| | | | | | |
| | | | |<<Translate IPv4 into IPv6.>>
| | | | | | |
| An IPv6 Socket API function call.|=========|=============>|
| | | | | | |
| | | | |<<Reply an IPv6 data |
| | | | | to dual stack.>> |
| | | | | | |
| An IPv6 Socket API function call.|<========|==============|
| | | | | | |
| | | | |<<Translate IPv6 into IPv4.>>
| | | | | | |
| | | |<+++++++| Request IPv4 addresses|
| | | | | corresponding to the |
| | | | | IPv6 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv4 addresses.
| | | | | | |
|<=======|========|========|========| An IPv4 Socket function call.
| | | | | | |
Figure 4 Behavior of the originator (2/2)
4.2 Recipient Behavior
The recipient behaviour is exactly the same as in 3.2.
5. Behavior Examples -- IPv4 only network and IPv4 only peer
This section describes action of the proposed dual stack host called
"dual stack," which communicates with an IPv4 peer called "host4"
using an IPv6 application.
Huang, et al. Expires April 22, 2010 [Page 14]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
5.1 Originator Behavior
This sub-section describes the behavior when the "dual stack" sends
data to "host4".
When an IPv6 application sends a DNS query to its name server, the
name resolver intercepts the query and then creates a new query to
resolve both A and AAAA records. When only the A record is resolved,
the name resolver requests the address mapper to assign an IPv6
address corresponding to the IPv4 address.
The name resolver creates an AAAA record for the assigned IPv6
address and returns it to the IPv6 applications.
In order for the IPv6 application to send IPv6 packets to host4, it
calls the IPv6 socket API function.
The function mapper detects the socket API function from the
application. If the result is from IPv4 applications, it skips the
translation. In the case of IPv6 applications, it requires an IPv4
address to invoke the IPv4 socket API function, thus the function
mapper requests an IPv4 address to the address mapper. The address
mapper selects an IPv6 address from the table and returns the
destination IPv4 address. Using this IPv4 address, the function
mapper invokes an IPv4 socket API function corresponding to the IPv6
socket API function.
When the function mapper receives an IPv4 function call,it requests
the IPv6 address to the address mapper in order to translate the IPv4
socket API function into an IPv6 socket API function. Then, the
function mapper invokes the socket API function for the IPv6
applications.
Figure 6 illustrates the behavior described above:
"dual stack" "host4"
IPv6 Socket | [ API Translator ] | TCP(UDP)/IP Name
appli- API |Name Address Function| (v6/v4) Server
cation |Resolver Mapper Mapper |
| | | | | | | |
<<Resolve an IPv6 address for "host4".>> | | |
| | | | | | | |
|--------|------->| Query of 'AAAA' records for host4. | |
| | | | | | | |
| | |--------|--------|---------|--------------|------>|
| | | Query of 'A' records and 'AAAA' for host4 |
| | | | | | | |
| | |<-------|--------|---------|--------------|-------|
Huang, et al. Expires April 22, 2010 [Page 15]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
| | | Reply with the 'A' record. | |
| | | | | | |
| | |<<The 'A' record is resolved.>> |
| | | | | | |
| | |+++++++>| Request one IPv6 address |
| | | | corresponding to the IPv4 address.
| | | | | | |
| | | |<<Assign one IPv address.>> |
| | | | | | |
| | |<+++++++| Reply with the IPv6 address. |
| | | | | | |
| | |<<Create 'AAAA' record for the IPv6 address.>>
| | | | | | |
|<-------|------ Reply with the 'AAAA' record.| |
| | | | | | |
Figure 6 Behavior of the originator (1/2)
Huang, et al. Expires April 22, 2010 [Page 16]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
"dual stack" "host4"
IPv6 Socket | [ API Translator ] | TCP(UDP)/IP
appli- API |Name Address Function| (v6/v4)
cation |Resolver Mapper Mapper |
| | | | | | |
<<Call IPv6 Socket API function >> | | |
| | | | | | |
|========|========|========|=======>|An IPv6 Socket API function Call
| | | | | | |
| | | |<+++++++| Request IPv4 addresses|
| | | | | corresponding to the |
| | | | | IPv6 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv4 addresses.
| | | | | | |
| | | | |<<Translate IPv6 into IPv4.>>
| | | | | | |
| An IPv4 Socket API function call.|=========|=============>|
| | | | | | |
| | | | |<<Reply an IPv4 data |
| | | | | to dual stack.>> |
| | | | | | |
| An IPv4 Socket API function call.|<========|==============|
| | | | | | |
| | | | |<<Translate IPv4 into IPv6.>>
| | | | | | |
| | | |<+++++++| Request IPv6 addresses|
| | | | | corresponding to the |
| | | | | IPv4 addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv6 addresses.
| | | | | | |
|<=======|========|========|========| An IPv6 Socket function call.
| | | | | | |
Figure 6 Behavior of the originator (2/2)
5.2 Recipient Behavior
This subsection describes the recipient behavior of "dual stack". The
communication is triggered by "host4".
"host4" resolves the address of "dual stack" with 'A' records through
its name server, and then sends an IPv4 packet to the "dual stack".
The IPv4 packet reaches the "dual stack" and the function mapper
detects it.
Huang, et al. Expires April 22, 2010 [Page 17]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
The function mapper requests the IPv6 address to the address mapper
in order to invoke the IPv6 socket API function to communicate with
the IPv6 application. Then the function mapper invokes the
corresponding IPv6 socket API function for the IPv6 applications
corresponding to the IPv4 functions.
Figure 7 illustrates the behavior described above:
"dual stack" "host4"
IPv6 Socket | [ API Translator ] | TCP(UDP)/IP
appli- API |Name Address Function| (v6/v4)
cation |Resolver Mapper Mapper |
| | | | | | |
<<Receive data from "host4".>> | | |
| | | | | | |
| An IPv4 Socket function call.|<========|==============|
| | | | | | |
| | | |<+++++++| Request IPv6 addresses|
| | | | | corresponding to the IPv4
| | | | | addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv6 addresses.
| | | | | | |
| | | | |<<Translate IPv4 into IPv6.>>
| | | | | | |
|<=======|========|========|========| An IPv6 function call |
| | | | | | |
<<Reply an IPv6 data to "host4".>> | | |
| | | | | | |
|========|========|========|=======>| An IPv6 function call |
| | | | | | |
| | | | |<<Translate IPv6 into IPv4.>>
| | | | | | |
| | | |<+++++++| Request IPv4 addresses|
| | | | | corresponding to the IPv6
| | | | | addresses. |
| | | | | | |
| | | |+++++++>| Reply with the IPv4 addresses.
| | | | | | |
| An IPv4 Socket function call.|=========|=============>|
| | | | | | |
Figure 7 Behavior of Receiving data from IPv4 host
Huang, et al. Expires April 22, 2010 [Page 18]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
6. Considerations
6.1 Socket API Conversion
IPv4 socket API functions are translated into semantically the same
IPv6 socket API functions and vice versa. See Appendix A for the API
list intercepted by BIA. IP addresses embedded in application layer
protocols (e.g., FTP) can be translated in API functions. Its
implementation depends on operating systems.
NOTE: Basically, IPv4 socket API functions are not fully compatible
with IPv6 since the IPv6 has new advanced features.
6.2 ICMP Message Handling
When an application needs ICMP messages values (e.g., Type, Code,
etc.) sent from a network layer, ICMPv4 message values MAY be
translated into ICMPv6 message values based on [SIIT], and vice
versa. It can be implemented using raw socket.
6.3 IPv4 or IPv6 Address Pool and Mapping Table
The address pool consists of the unassigned IPv4 addresses or
internal IPv6 addresses. This pool can be implemented at different
granularity in the node e.g., a single pool per node, or at some
finer granularity such as per user or per process. However, if a
number of IPv4 applications communicate with IPv6 hosts or IPv6
applications communicate with IPv4 hosts, the available address
spaces will be exhausted. As a result, it will be impossible for
IPv4 applications to communicate with IPv6 nodes or IPv6 applications
to communicate with IPv4 nodes. It requires smart management
techniques for address pool. For example, it is desirable for the
mapper to free the oldest entry and reuse the IPv4 address or IPv6
address for creating a new entry. This issues is the same as [BIS].
In case of a per-node address mapping table, it MAY cause a larger
risk of running out of address.
6.4 Internally Assigned IPv4 or IPv6 Addresses
The IPv4 addresses, which are internally assigned to IPv6 target
hosts out of the pool, are the unassigned IPv4 addresses (e.g.,
0.0.0.1 ~ 0.0.0.255). There is no potential collision with another
use of the private address space when the IPv4 address flows out from
the host.
The IPv6 addresses, which are internally assigned to IPv4 target
hosts out of the pool, are the special IPv6 addresses (It need IANA's
consideration). There is no potential collision with another use of
Huang, et al. Expires April 22, 2010 [Page 19]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
thosee address space when the IPv6 address flows out from the host.
6.5 Mismatch between DNS result(AAAA) and Peer Application
Version(v4)
If a server application you are using does not support IPv6 or IPv4
yet, but runs on a machine that supports other IPv6 or IPv4 services
and this is listed with a AAAA or A record in the DNS, a client IPv4
or IPv6 application using BIA might fail to connect to the server
application, because there is a mismatch between DNS query result
(i.e., AAAA) and a server application version(i.e., IPv4, IPv6). A
solution is to try all the addresses listed in the DNS and just not
fail after the first attempt. We have two approaches: the client
application itself SHOULD cycle through all the addresses and end up
trying the IPv4 or IPv6 one. Or it SHOULD be done by some extensions
of name resolver and API translator in BIA. For this, BIA SHOULD do
iterated jobs for finding the working address used by the other
application out of addresses returned by the extended name resolver.
It may very well be application dependent. Note that BIA might be
able to do the iteraction over all addresses for TCP sockets, since
BIA can observe when the connect call fails. But for UDP sockets it
is hard if not impossible for BIA to know which address worked, hence
the application must do the iteraction over all addresses until it
finds a working address.
Another way to avoid this type of problems is to make BIA only come
into effect when no A records exist for the peer. Thus traffic from
an application using BIA on a dual-stack host to a dual-stack host
would use IPv4 or IPv6.
6.6 Implementation Issues
Some operating systems support the preload library functions, so it
is easy to implement the API translator by using it. For example,
the user can replace all existing socket API functions with user-
defined socket API functions which translate the socket API function.
In this case, every IPv4 application has its own translation library
using a preloaded library which will be bound into the application
before executing it dynamically.
Some other operating systems support the user-defined layered
protocol allowing a user to develop some additional protocols and put
them in the existing protocol stack. In this case, the API
translator can be implemented as a layered protocol module.
In the above two approaches, it is assumed that there exists both
TCP(UDP)/IPv4 and TCP(UDP)/IPv6 stacks and there is no need to modify
or to add a new TCP-UDP/IPv6 stack.
Huang, et al. Expires April 22, 2010 [Page 20]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Huang, et al. Expires April 22, 2010 [Page 21]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
7. Limitations
In common with [NAT-PT], BIA needs to translate IP addresses embedded
in application layer protocols, e.g., FTP. So it may not work for
new applications which embed addresses in payloads.
This mechanism supports unicast communications only. In order to
support multicast functions, some other additional functionalities
must be considered in the function mapper module.
Since the IPv6 API has new advanced features, it is difficult to
translate such kinds of IPv6 APIs into IPv4 APIs. Thus, IPv6 inbound
communication with advanced features may be discarded.
8. Security Considerations
The security consideration of BIA mostly relies on that of [NAT-PT].
The differences are due to the address translation occurring at the
API and not in the network layer. That is, since the mechanism uses
the API translator at the socket API level, hosts can utilize the
security of the network layer (e.g., IPsec) when they communicate
with IPv6 or IPv4 hosts using IPv4 or IPv6 applications via the
mechanism. As well, there isn't a DNS ALG as in NAT-PT, so there is
no interference with DNSSEC.
The use of address pooling may open a denial of service attack
vulnerability. So BIA should employ the same sort of protection
techniques as [NAT-PT] does.
9. Acknowledgments
The authors gratefully acknowledge the many helpful advice from Dan
Wing and Dave Thaler for initiating this work, thanks mailing list
discussion from Mohamed Boucadair, Yiu L. Lee, James Woodyatt,
Lorenzo Colitti, Qibo Niu and Pierrick Seite. Contributions from Gang
Chen, Bo Zhou, Dapeng Liu,Hong Liu, Tao Sun et al. in the development
of this document.
10. References
[TRANS-MECH] Gilligan, R. and E. Nordmark, "Transition Mechanisms for
IPv6 Hosts and Routers", RFC 2893, August 2000.
[SIIT] Nordmark, E., "Stateless IP/ICMP Translator (SIIT)", RFC
2765, February 2000.
[SIIT-NEW] Li, X., Bao, C., Baker, F., "IP/ICMP Translation
Algorithm", draft-ietf-behave-v6v4-xlate-01, September
Huang, et al. Expires April 22, 2010 [Page 22]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
2009, work-in-progress
[FTP] Postel, J. and J. Reynolds, "File Transfer Protocol",
STD 9, RFC 959, October 1985.
[NAT] Srisuresh, P. and K. Egevang, "Traditional IP Network
Address Translator (Traditional NAT)", RFC 3022, January
2001.
[IPV4] Postel, J., "Internet Protocol", STD 5, RFC 791,
September 1981.
[IPV6] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", RFC 2460, December 1998.
[NAT-PT] Tsirtsis, G. and P. Srisuresh, "Network Address
Translation - Protocol Translation (NAT-PT)", RFC 2766,
February 2000.
[BIS] Tsuchiya, K., Higuchi, H. and Y. Atarashi, "Dual Stack
Hosts using the "Bump-In-the-Stack" Technique (BIS)",
RFC 2767, February 2000.
[BIA] S. Lee, M., Shin, Y. Kim, A. Durand and E. Nordmark,
"Dual Stack Hosts Using "Bump-in-the-API" (BIA)", RFC
3338, October 2002.
[DNS64] Bagnulo, M., Sullivan, A., Matthews, P., van Beijnum,
I., "DNS64: DNS extensions for Network Address
Translation from IPv6 Clients to IPv4 Servers", draft-
ietf-behave-dns64-00, July 2009, work-in-progress
[ADDRFORMAT] Huitema, C., Bao, C., Bagnulo, M., Boucadair, M., Li,
X., "IPv6 Addressing of IPv4/IPv6 Translators", draft-
ietf-behave-address-format-00, August 2009, work-in-
progress
[NAT64] Bagnulo, M., Matthews, P., van Beijnum, I., "NAT64:
Network Address and Protocol Translation from IPv6
Clients to IPv4 Servers", draft-ietf-behave-v6v4-xlate-
stateful-01, July 2009, work-in-progress
[PNAT] Huang, B., Deng, H., "Prefix NAT: Host based IPv6
translation", draft-huang-pnat-host-ipv6-01, July 2009,
work-in-progress
[SOCK-EXT] Gilligan, R., Thomson, S., Bound, J. and W. Stevens,
"Basic Socket Interface Extensions for IPv6", RFC 2553,
March 1999.
Huang, et al. Expires April 22, 2010 [Page 23]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
[RFC 2119] Bradner S., "Key words for use in RFCs to indicate
Requirement Levels", RFC 2119, March 1997.
Huang, et al. Expires April 22, 2010 [Page 24]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Appendix A : API list intercepted by BIA
The following functions are the API list which SHOULD be intercepted
by BIA module.
The functions that the application uses to pass addresses into the
system are:
bind()
connect()
sendmsg()
sendto()
The functions that return an address from the system to an
application are:
accept()
recvfrom()
recvmsg()
getpeername()
getsockname()
The functions that are related to socket options are:
getsocketopt()
setsocketopt()
The functions that are used for conversion of IP addresses embedded
in application layer protocol (e.g., FTP, DNS, etc.) are:
recv()
send()
read()
write()
As well, raw sockets for IPv4 and IPv6 MAY be intercepted.
Most of the socket functions require a pointer to the socket address
structure as an argument. Each IPv4 argument is mapped into
corresponding an IPv6 argument, and vice versa.
According to [SOCK-EXT], the following new IPv6 basic APIs and
structures are required.
Huang, et al. Expires April 22, 2010 [Page 25]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
IPv4 new IPv6
------------------------------------------------
AF_INET AF_INET6
sockaddr_in sockaddr_in6
gethostbyname() getaddrinfo()
gethostbyaddr() getnameinfo()
inet_ntoa()/inet_addr() inet_pton()/inet_ntop()
INADDR_ANY in6addr_any
BIA MAY intercept inet_ntoa() and inet_addr() and use the address
mapper for those. Doing that enables BIA to support literal IP
addresses.
The gethostbyname() call return a list of addresses. When the name
resolver function invokes getaddrinfo() and getaddrinfo() returns
multiple IP addresses, whether IPv4 or IPv6, they SHOULD all be
represented in the addresses returned by gethostbyname(). Thus if
getaddrinfo() returns multiple IPv6 addresses, this implies that
multiple address mappings will be created; one for each IPv6 address.
Huang, et al. Expires April 22, 2010 [Page 26]
RFC 3338bis Dual Stack Hosts Using BIA October 2009
Authors' Addresses
Bill Huang
China Mobile
53A,Xibianmennei Ave.,
Xuanwu District,
Beijing 100053
China
Email: bill.huang@chinamobile.com
Hui Deng
China Mobile
53A,Xibianmennei Ave.,
Xuanwu District,
Beijing 100053
China
Email: denghui02@gmail.com
Teemu Savolainen
Nokia
Hermiankatu 12 D
FI-33720 TAMPERE
Finland
Email: teemu.savolainen@nokia.com
Huang, et al. Expires April 22, 2010 [Page 27]
| PAFTECH AB 2003-2026 | 2026-04-23 20:16:44 |