In This Issue: Network Address Translators
In This Issue: Network Address Translators
In This Issue: Network Address Translators
In This Issue Network Address Translators (NATs) were designed to allow multiple
devices in a private address realm to dynamically share a single public
IP address. NATs are widely deployed in today’s Internet. They provide
From the Editor .......................1 an effective way of IPv4 address conservation while simultaneously of-
fering some level of security because individual IP addresses on the
“inside” are hidden from the “outside,” or global Internet. But NATs
Anatomy ..................................2
also present a challenge to existing Internet applications that may de-
pend on globally unique IP addressing for proper operation. To further
Letters to the Editor...............33 complicate matters, not all NATs are created equal, leading to unpre-
dictable behavior. This edition of IPJ is almost entirely devoted to an in-
depth look at NATs. Geoff Huston looks inside the NAT, and explains
Fragments ..............................36 the complexities behind each variation of NAT implementation. It
seemed only natural that he would name such an exposé “Anatomy.”
We didn’t have room for a book review in this issue, but we have sev-
eral in store for future editions. If you’d like to contribute a book review
for publication in IPJ, please contact me.
—Ole J. Jacobsen, Editor and Publisher
ole@cisco.com
O
ver the past decade numerous IP-related technologies have
generated some level of technical controversy. One of these is
the Network Address Translator, or NAT. This article de-
scribes the inner workings of NATs in some detail, and then looks at
the issues that have accompanied the deployment of NATs in the Inter-
net that appear to have fueled this technical controversy. NATs are a
very widespread feature of today’s Internet, and this article attempts to
provide some insight as to how they operate, why there is such a level of
technical controversy about NATs, and perhaps some pointers to what
we have learned about technology and the process of standardization of
technology along the way.
NAT Motivation
The first RFC document describing NATs was by Kjeld Egevang and
Paul Francis in 1994[1]. The original motivation behind the NAT work
was based on efforts in the early 1990s associated with a successor pro-
tocol to IPv4. The overall effort of a successor protocol to IPv4 was to
devise a protocol that would directly address the issues of accelerating
address consumption in IPv4 that appeared to be leading to the pros-
pect of imminent address exhaustion. Although IPv4 was capable of
uniquely addressing some 4.4 billion devices, it was evident by as early
as 1992 that the world was heading down a path of very intensive de-
ployment of devices that included communications capabilities, and that
IPv4 was not going to be able to extend across the full range of future
device deployment. The objective with NAT was to define a mecha-
nism that allowed IP addresses to be shared across numerous devices. In
addition, it was intended that NATs could be deployed in a piecemeal
fashion within the Internet, without causing changes to hosts or other
routers. Other forms of address-sharing technologies relied on intermit-
tent connectivity, whereas NATs were intended to allow a collection of
connected devices to share an address pool dynamically. The original
RFC portrays this approach as being a measure that can “provide tem-
porarily relief while other, more complex and far-reaching solutions are
worked out.”
NAT Operation
The operation of NATs is deceptively easy to describe in general terms.
They are active units placed in the data path, usually as a functional
component of a border router or site gateway. NATs intercept all IP
packets, and may forward the packet onward with or without alter-
ation to the contents of the packet, or may elect to discard the packet.
The essential difference here from a conventional router or a firewall is
the discretional ability of the NAT to alter the IP packet before for-
warding it on. NATs are similar to firewalls, and different from routers,
in that they are topologically sensitive. They have an “inside” and an
“outside,” and undertake different operations on intercepted packets
depending on whether the packet is going from inside to outside, or in
the opposite direction.
Sequence Number
Acknowledgment Number
Data U A P R S F
R C S S Y I Window
Offset G K H T N N
Checksum Urgent Pointer
TCP Options Padding
TCP Data
As shown in Figure 2, how can local (private) host A initiate and main-
tain a TCP session with remote (public) host B? Host A first uses the
Domain Name System (DNS) to find the public IP address for host B,
and then creates an IP packet using host B’s address as the destination
address and host A’s local address as the source, and passes the packet
to the local network for delivery. If the packet was delivered to host B
without any further alteration, then host B would be unable to re-
spond. The public Internet does not (or should not at any rate!) carry
private addresses, because they are not globally unique addresses.
Figure 2: Public/Private
Communication
✔
Source: 10.0.0.1
Dest: 192.9.200.1
10.0.0.1 192.9.200.1
Private Address
Realm
Host A Host B
✘
Source: 192.9.200.1
Dest: 10.0.0.1
Public Internet
With a NAT between hosts A and B, the NAT intercepts host A’s out-
going packet and rewrites the source address with a public address.
NATs are configured with a pool of public addresses, and when an “in-
side” host first sends an outbound packet, an address is drawn from this
pool and mapped as a temporary alias to the inside host A’s local ad-
dress. This mapped address is used as the new source address for the
outgoing packet, and a local session state is set up in the NAT unit for
the mapping between the private and the public addresses.
After this mapping is made, all subsequent packets within this applica-
tion stream, from this internal address to the specified external address,
will also have their source address mapped to the external address in the
same fashion.
Site NAT
10.0.0.1 Source: 10.0.0.1 Source: 139.130.1.1 192.9.200.1
Dest: 192.9.200.1 Dest: 192.9.200.1
NAT Binding
Host A 10.0.0.1 139.130.1.1 Host B
Source: 192.9.200.1 Source: 192.9.200.1
Dest: 10.0.0.1 Dest: 139.130.1.1
NAPTs
A variant of the NAT is the Port-Translating NAT, or NAPT. This
form of NAT is used in the context of TCP and User Datagram Proto-
col (UDP) sessions, where the NAT maps the local source address and
source port number to a public source address and a public-side port
number for outgoing packets. Incoming packets addressed to this pub-
lic address and port pair are translated to the corresponding local
address and port. Again, the binding is maintained by a NAT idle timer,
and upon expiration of the timer the public address and port pair are
returned to the NAT pool (Figure 4).
Figure 4: NAPT
Traversal
Site NAT
10.0.0.1 Source: 10.0.0.1/2000 Source: 139.130.1.1/3000 192.9.200.1
Dest: 192.9.200.1/80 Dest: 192.9.200.1/80
NAT Binding
10.0.0.1/2000 139.130.1.1/3000
Host A Host B
Source: 192.9.200.1 Source: 192.9.200.1/80
Dest: 10.0.0.1/2000 Dest: 139.130.1.1/3000
A reasonable question to ask is: Why should NAPTs bother with port
translation? Are straight address translations not enough? Surprisingly,
NATs can be relatively profligate with addresses. If each TCP session
from the same local host is assigned a different and unique external
pool address, then the peak address demands on the external address
pool could readily match or exceed the number of local hosts, in which
case the NAT could be consuming more public addresses than if there
were no NAT at all! NAPTs allow concurrent outgoing sessions to be
distinguished by the combination of the mapped address and mapped
port value. In this way each unique external pool address may be used
for up to 65,535 concurrent mapped sessions.
For a while the terminology distinction between NATs and NAPTs was
considered important, but this has faded over time. For the remainder
of this article we use current terminology, and look at NATs and
NAPTs together and refer to them collectively as “NATs.”
NAT Behavior
The use of NATs involves two basic issues: One is that NATs make ap-
plications “brittle” in that NATs support a particular style of
application operation, and if the application deviates in any way from
this style then the application no longer works. The second is of much
more concern, and that is that NATs differ from each other in quite
fundamental ways. What works across one NAT may not work at all
for another class of NAT. It has also been reported that NATs differ
not only on a vendor-by-vendor basis, but even on a model-by-model
basis within a single vendor’s range of NAT units. The implication here
is that such differences of behavior become a matter for discovery by
applications rather than something applications can predict in advance.
This section explores this behavioral aspects of NATs in further detail.
NATs can be further refined by having different behaviors for TCP and
UDP transports. A NAT may behave in a symmetric manner for TCP
sessions, and operate in a full-cone mode for UDP transactions. The
variations in NAT behavior has led to an exercise in categorizing NAT
behaviors and developing a discovery protocol whereby a pair of coop-
erating systems can discover if one or more NATs is on the network
path between them, as well as attempting to establish the type of NAT.
One of the more pressing problems here is that NATs commonly en-
force an application model where the local “hidden” host must initiate
a transaction in order to create a window in the NAT to allow the
packets of the remote host back into the local network.
In the case of TCP it appears that the prevalent NAT behavior is that of
a symmetric NAT based on address and port bindings. This implies that
when the local host opens up a TCP session with a remote host, the
NAT address and port bindings for the local host are coupled with the
address and port of the destination host. Only packets with a source
field of the destination host can pass packets back through the NAT to
the TCP session of the local host. In other words, when a TCP session
has been established within a NAT, only the two endpoints of the TCP
session can access the NAT bindings, and attempts by others to direct
packets to the external-side presented address and port meet with the
NAT discard response. The fine-grained behavior of NATs with respect
to TCP sessions can vary according to the amount of TCP state main-
tained by the NAT. At a basic level, the NAT can maintain a binding
based on the local address and port and the remote address and port.
The NAT also can keep the binding timer at a high value until a FIN ex-
change is observed, or until the session is reset through the RST flag
being set, at which point the binding timer can be reduced to a very
short interval. The NAT can also track the sequence number windows
of the two sides and associated window sequence number scaling val-
ues and not adjust the binding timer of the session for TCP packets with
sequence numbers outside the sequence number window with their FIN
or RST flags set.
Various classes of NAT behavior relate to how UDP bindings are man-
aged within a NAT. These have been classified into four types of
behaviors[11]:
• Symmetric: We have already encountered the symmetric NAT, where
the NAT mapping refers specifically to the connection between the
local host address and port number and the destination address and
port number and a binding of the local address and port to a public-
side address and port. Any attempts to change any one of these fields
requires a different NAT binding. This is the most restrictive form of
NAT behavior under UDP, and it has been observed that this form of
NAT behavior is becoming quite rare, because it prevents the opera-
tion of all forms of applications that undertake referral and
handover.
Figure 5: Symmetric
NAT
Source: Z / 3001
Dest: B / 90
✔ Port 90
Source: A / 2001 Initial Packet
Dest: B / 90
✘ Port 91
Host B
Port 2001
Site NAT
✘
Host A ✘ Port 90
Host C
Port 91
Source: Z / 3001
Dest: B / 90
✔ Port 90
Source: A / 2001 Initial Packet
Dest: B / 90 ✔ Host B
Port 91
Site NAT ✔
Port 2001
Host A ✔ Port 90
Host C
Port 91
✔ Port 90
Source: A / 2001 Initial Packet
Dest: B / 90 ✔ Host B
Port 91
Port 2001
Site NAT
✘
Host A ✘ Port 90
Host C
Port 91
✔ Port 90
Source: A / 2001 Initial Packet
Dest: B / 90
✘ Port 91
Host B
Site NAT ✔
Port 2001
Host A
✘ Port 90
Host C
Port 91
So can an application tell if one or more NATs are in the path, and, if
so, what form of behavior the NAT is using? For this purpose the Sim-
ple Traversal of UDP through NATs (STUN) protocol has been
developed[11]. STUN is a probe system that examines the interchange
between a STUN client that may lie behind a NAT and a STUN server
that is positioned on the public side of the NAT. The STUN-server host
must be configured with two IP addresses, and the STUN itself should
respond to queries on two UDP port numbers. The protocol is a simple
UDP request-response protocol that uses embedded addresses in the
data payload, and compares these addresses with header values in or-
der to determine the type of NAT that may lie in the path between
client and server.
The second STUN request is directed to the same address and port as
the initial request, but this time the request includes a control flag that
requests the STUN server to respond using its alternate source address
and port values. If the STUN client receives this alternate-sourced re-
sponse, then it can conclude that it is behind a full-cone NAT. This is
because the initial NAT binding of the local host address to the exter-
nal presentation address can evidently be accessed by third-party
external hosts.
If no response is received to the second request, then the STUN client
sends the original probe request, but this time the request is addressed
to the alternate destination address and port pair for the STUN client. If
the returned address and port values relating to the new NAT binding
are different from those of the first request, then the client can conclude
that it is behind a symmetric NAT.
If the values are unaltered, then a further request can be made to deter-
mine the form of restricted-cone behavior. This fourth request includes
a control flag to direct the STUN server to respond using the same IP
address, but with the alternate port value. A received response indicates
the presence of a port-restricted cone, and the lack of a response indi-
cates the presence of a restricted cone.
Periodic exchanges between the STUN client and server can also dis-
cover the timer used by the NAT to maintain address bindings.
Additional components of STUN are intended to provide some reason-
able level of integrity in the packet exchange. A flowchart of a STUN-
based NAT discovery process is shown in Figure 9.
Figure 9: NAT Discovery Process Using STUN
STUN Request
N
UDP Blocked
STUN Request
Change Response: N
Response?
Addr and Port
N
Full Cone NAT
Y Symmetric NAT
STUN Request Y
Change Response: N
Response?
Port
Y
The first area of difference is whether the NAT supports the so-called
hairpin operation, where a local host directs a packet to the public ad-
dress and port of an already mapped local host, or even to its own
mapped address and port. If successful, then the NAT supports hairpin
operation, where the NAT bindings, when created, are available to ei-
ther side of the NAT. (Refer to Figure 10.)
Port 2001
Source: Y / 3002
Dest: A / 2001
Host A Source: Y / 3002
Site NAT Dest: Z / 3001
It is also possible that the NAT may elect to preserve the binding in any
case, and remove the current binding and replace it with a new binding
that refers to the most recent packet that the NAT has processed.
If a STUN-like test sequence was for a local host to send a packet to one
destination and obtain a response of what NAT binding was used, and
then to send a packet to a second destination and compare the results,
the observation of the NAT using a different binding for each request
may lead the tester to conclude that the NAT is a fully symmetric NAT.
If the test sequence is for the NAT to send one packet to a destination
and have the destination respond using a different source address, then
the observation that the response packet is successfully delivered
through the NAT back to the originating local host may lead the tester
to the conclusion that the same tested NAT is some form of cone NAT.
Source: X / x
Dest: Y1 / y1
Port y1
Host Y1
Site NAT
Host X Port 2001
Source: X / x
Dest: Y2 / y2 Port y2
Source: X2 / x2 Host Y2
Dest: Y2 / y2
The behaviors of NATs under this condition can be classified under nu-
merous behavioral aspects.
Binding
Binding behavior can be seen as the amalgam of three somewhat dis-
tinct design decisions, namely the manner in which a binding is
generated, the behavior of the NAT in managing external ports used in
bindings, and the manner in which expiration timers that govern the
continued existence of the binding are refreshed.
Filtering
The second phase of the test has two external hosts directing a probe to
the same binding address, and classifying the behaviors based on what
packets are filtered and discarded by the NAT (Figure 12).
Source: X1 / x1
Dest: Y1 / y1
Source: X / x
Dest: Y1 / y1 Port y1
Host Y1
Use Address
and
Site NAT Port X1 / x1
Host X Port x
Source: Y2 / y2
Dest: X / x Port y2
Source: Y2 / y2 Host Y2
Dest: X1 / x1
External Filtering:
• Endpoint independent: The NAT does not filter and discard packets
that are addressed to the external part of the binding, irrespective of
the source values in the packet. This is analogous to a full-cone NAT.
• Endpoint address dependent: The NAT filters and discards packets
that are addressed to the external part of the binding, unless the
source address of the packet matches the destination address used in
the binding. This is analogous to a restricted-cone NAT.
• Endpoint address and port dependent: The NAT filters and discards
packets that are addressed to the external part of the binding, unless
the source address and port number of the packet matches the desti-
nation address used in the binding. This is analogous to a port-
restricted-cone NAT or a symmetric NAT.
NAT Behaviors
The approach of carefully identifying the areas where NAT behaviors
differ and classifying these behavioral differences in a methodical man-
ner is one that has the potential to at least allow us to use the same sets
of words when we talk about NAT behaviors, and hopefully also refer
to the same set of actual behaviors when we use the same descriptions.
The original approach with the STUN work used the terms symmetric,
full-cone, and forms of restricted-cone to describe variations of NAT
behaviors. Experience with this form of classification has exposed fur-
ther variations in NAT behaviors, and this has led to a form of NAT
classification that first uses a delineation of binding and filtering behav-
iors, and then classifies the various ways in which these bindings and
filters are maintained within the NAT. Additional classification at-
tributes include whether the NAT supports hairpin connections or not
and whether it operates in a deterministic or nondeterministic manner.
In this latter context, the local party is forced to advertise its willingness
to participate in a peer-to-peer realm by communicating with an exter-
nal agent. The local agent performs a NAT discovery test, and then
selects a mode of operation that is consistent with the discovered behav-
iors of a NAT that may be on the path between the client and the agent.
The agent then advertises itself as the local party’s intermediary to other
peers within the application realm. Attempts to initiate a connection
with the local party are directed to the external agent, who then under-
takes to perform a rendezvous function in order to establish a session.
Depending on the NATs that may exist between the two parties, the
rendezvous function may need to perform a convoluted handshake pro-
cess, or, in some instances, may not be able to set up a peer-to-peer
session at all. This topic of establishing connectivity in the face of NATs
in the path is sufficiently complex to warrant a separate examination,
and the various techniques and approaches are not examined in this ar-
ticle other than providing some suggestions for further reading.
The salient general observation is that NATs have fueled a new genera-
tion of applications that use intermediaries and rendezvous protocols.
This shift in application behavior has implied greater attention to secu-
rity frameworks for applications, because intermediaries represent an
additional active element in the trust model. This, in turn, has implied
that the application level has to turn to other chains of derivation of
trust, because the basic Internet model of some form of persistent iden-
tity as being an attribute of an IP address is no longer a workable
proposition in the face of NATs. The position we are reaching here is
that identity and trust need to be derived from other attributes of the
end host and the application that it has invoked.
ICMP
If an Internet Control Message Protocol (ICMP) message is passed
through NAT, there is not only the outer IP header to consider, but also
the ICMP payload. Most ICMP messages contain part of the original IP
packet in the body of the message, so for the NAT to behave as trans-
parently as possible, the IP address of the IP header contained in the
data part of the ICMP packet should be modified according to the NAT
binding state, as well as the IP header Checksum field of this inner
packet header.
Some NATs attempt packet reassembly as if they were the end host,
and they perform the NAT translation only when the original IP packet
has been reassembled. Of course the reassembled packet may be too
large to be forwarded onward, and the NAT may be forced to further
fragment the packet. The interplay between this behavior and various
forms of path Maximum Transmission Unit (MTU) discovery become a
source of frustration.
The case of ICMP represents one of the simpler forms of gateway func-
tionality, because it can be performed in the same manner as the basic
NAT transform, on a per-packet basis while attempting to maintain re-
tained session state. Payload transformations in the case of a TCP-based
application have implications in terms of requiring subsequent alter-
ation of TCP sequence numbers, length fields, and even the
repacketization of the payload data stream, given that the data trans-
form required by the address change may imply a change of payload
length.
The most widely deployed application that can use IP addresses in the
payload is FTP, where IP addresses are passed in the payload of the
control channel in order to allow data sessions to be initiated on dis-
tinct transport sessions. The variability and reliability of FTP ALG
support in NATs has led to the widespread use of the passive mode of
FTP operation, where the data flow is passed within the control session.
A related question is that of the use of IPSec and NATs. IPSec with Au-
thenticated Header protection attempts to protect what it believes is the
fixed part of the IP packet header, including the source and destination
addresses. The NAT changes to the IP packet invalidate the Authentica-
tion Header integrity check. Also the NAT changes the IP and UDP or
TCP checksums, and this disrupts the Encapsulating Security Payload
(ESP) function of IPSec. The implication is that IPSec needs to operate
upon a TCP or UDP payload, as in the IPSec operating tunnel model, or
IPSec carried as a payload within other types of tunnel operation.
It is also the case that NATs today are heavily enmeshed with the UDP
and TCP transport protocols. Other transport protocols exist, includ-
ing the Streams Control Transport Protocol (SCTP) and the Datagram
Congestion Control Protocol (DCCP), and doubtless more transport
protocol offerings will follow over time. In each case it is a matter of in-
dividual choice how NAT implementations define NAT responses to
such additional transport protocols. Although it is tempting to propose
that NATs should fall back to an address-only form of binding that was
not address-and-port based, this does not appear to be practical guid-
ance. Another aspect of today’s NAT deployment is that the most
common scenario appears to be that of a single external address and
mapping each locally initiated session into a binding that uses this com-
mon external IP address and a variable external port number. This
means that NATs need to be able to identify and transform port ad-
dresses from the Transport Protocol section of the IP header.
Another salient factor here is the common association of NATs and fire-
walls into a single unit, and the coupling of address utilization
compression properties of the NAT with its associated packet-filtering
actions. Deploying a NAT at the external interface of a site does lead to
more restrictive site filtering outcomes and a more restrictive model of
application interaction, where the model attempts to impose the con-
straint that applications are initiated from within the site, and that
unknown or unidentifiable external traffic is considered hostile and
should be subject to firewall-based inspection and filtering. From this
perspective there is little desire to make more permissive NATs as an
isolated exercise, and there is instead a codependence between NAT be-
haviors and popularly used applications. Applications that work across
today’s NATs appear to enjoy popular uptake, and applications that
enjoy popular uptake appear to determine what forms of traffic pass
across NATs.
Views on NATs
It is certainly the case that NATs are very common in todays Internet,
and it is worth understanding why NATs have enjoyed such wide-
spread deployment while other technologies appear to be meeting some
considerable resistance to widespread deployment. As the original NAT
document points out:
The market has taken NATs and embraced them wholeheartedly. And
in a market-oriented business environment, what is wrong with that?
• NATs sit on the data path and attempt to process every packet. Obvi-
ously bandwidth scaling requires NAT scaling.
• NATs are not backed up by industry-standardized behavior. Al-
though certain NAT-traversal applications make assumptions about
the way NATs behave, it is not the case that all NATs necessarily be-
have in precisely the same way. Applications that work in one
context may not necessarily operate in others.
• Multiple NATs can get very confusing with “inside” and “outside”
concepts when NATs are configured in arbitrary ways. NATs are
best deployed in a strict deployment model of an “inside” being a
stub private network and an “outside” of the public Internet. Forms
of multiple interconnects, potential loops, and other forms of net-
work transit with intervening NATs lead to very strange failure
modes that are at best highly frustrating.
• With NATs there is no clear, coherent, and stable concept of net-
work identity. From the outside these NAT-filtered interior devices
are visible only as transient entities.
• Policy-based mechanisms that are based on network identity (for ex-
ample, Policy Quality of Service [QoS]) cannot work through NATs.
• Normal forms of IP mobility are broken when any element behind
the NAT attempts to roam beyond its local private domain. Solu-
tions are possible, generally involving specific NAT-related alterations
to the behavior of the Home Agent and the mobile device.
• Applications that work with identified devices, or that actually iden-
tify devices (such as the Simple Network Management Protocol
[SNMP] and DNS) require very careful configuration when operat-
ing an a NAT environment.
• NATs may drop IP packet fragments in either direction: without
complete TCP/UDP headers, the NAT may not have sufficient stored
state to undertake the correct header translation.
• NATs often contain ALGs that attempt to be context-sensitive, de-
pending on the source or destination port number. The behavior of
the ALGs can be difficult to anticipate, and these behaviors have not
always been documented.
• Most NAT implementations with ALGs that attempt to translate
TCP application protocols do not perform their functions correctly
when the substrings they must translate span across multiple TCP
segments; some of them are also known to fail on flows that use TCP
option headers, for example timestamps.
That does not say that IPv6 NATs will not be implemented, nor used.
Indeed IPv6 NATs are already available, and they are being used, albeit
to some small extent. NATs are, rightly or wrongly, considered to be
part of a security solution for a site because of their filtering properties
that prevent incoming packets from entering the site unless the NAT al-
ready has a permitting binding initiated from the inside. In addition,
NATs allow a site to use an internally persistent naming and address-
ing scheme based on some form of deployment of IPv6 unique site local
address, and deploy NATs at the edge to create an external view of the
site that fits within a provider-based address aggregated view of the
IPv6 Internet.
However, the Internet is still largely a network that uses IPv4 and
NATs, and efforts continue along the lines of reducing the amount of
friction and frustration in a world in which NATs are prolific. One of
the ways to progress here is to treat NAT boxes as yet another instance
of Internet middleware, and attempt to apply the same sets of processes
to NATs that appear in other instances of middleware. The work of the
IETF in the Middlebox Communication Working Group uses a model
that attempts to expose NATs, as well as firewalls, performance-en-
hancing proxies, application proxies, and relay agents, to the
application, and allows the application to specify the policy that the
middlebox should apply. In the case of NATs, this could allow an appli-
cation to communicate to a NAT that it does not require any form of
third-party access, and that a fully symmetric behavior could be applied
to the binding without any loss in application functionality. Equally, an
application could indicate to the NAT that it expects third parties to be
able to use the NAT binding, and that the binding that the NAT will set
up for the application should be managed as a port-restricted cone.
There is much that could be achieved here that would allow applica-
tions to function with some level of determinism, rather than
attempting to equip an application with a large and complex toolset of
all the relevant techniques of NAT traversal that may be required by the
application when confronted by various NAT behaviors.
So, what would a NAT implementation look like if there were stan-
dards relating to NAT behaviors and the implementation were to
comply with these standards? Numerous efforts have been made to doc-
ument various forms of network- and application-friendly ways in
which NATs could behave, but it would appear that such an effort will
require the imprimatur of a standard in order to attain a level of gen-
eral acceptance from NAT implementations. However, it is possible to
predict that any such effort at a “standardized” form of NAT behavior
will include the following considerations. The following set of behav-
iors is based on that enumerated in[13]:
• NATs must show endpoint-independent behavior for UDP-based
bindings. This is to ensure that the NAT can support application ren-
dezvous without the need for various multiparty relays and agents.
• NAT should not use port preservation nor port overloading, and
should operate in a deterministic manner. Port preservation exposes
the NATs to nonstandard behaviors when port preservation cannot
be enforced. In addition, NATs must have deterministic behavior.
The first is that we need standards and we rely on standards. For many
years the IETF has viewed standardization of NATs and their behavior
as being an action that would encourage further deployment of a tech-
nology that was apparently considered undesirable. The result has been
that NATs have been deployed for reasons entirely unconnected with
the IETF and standardization, but because the original specification of
NAT behavior was at such a general level each NAT implementor has
been forced into making local decisions as to how the NAT should be-
have under specific circumstances. We now enjoy a network with
widespread deployment of an active device that does not have consis-
tent implementations and, in the worst cases, exhibits nondeterministic
behaviors. This has made the task of deployment of certain applica-
tions on the Internet, including voice-based applications, incredibly
difficult.
Whether NATs are good or bad, they would be less of a collective head-
ache today if they shared a common standard core behavior. NATs for
IPv6 may be considered to be unnecessary today, and it can be argued
they represent no real value to an IPv6 site. But a collection of IPv6
NAT implantations with no common core behavior would constitute a
far worse problem to application users. Standardization of technology
at least eliminates some of the worst aspects of application level guess-
work out of technology deployment.
In considering NATs it seems that we are back to the very basics of net-
working. The basic requirements of any network are “who,” “where,”
and “how,” or “identity,” “location,” and “forwarding.” In the case of
IP, all these elements were included in the semantics of an IP address,
and when addresses get translated dynamically we lose track of IP-level
identity across the network. Maybe, just maybe, as we look at the
longer-term developments of IP technology, one potential refinement
may be the separation of endpoint identity to that of location, and as a
potential outcome, NATs could readily manipulate location-based ad-
dresses while applications could look to a different token set as a means
of establishing exactly who is the other party to the communications.
Of course, if we ever venture down such a path, I trust that such a move
toward the use of explicit identities does not generate a complementary
deployment of Network Identity Translators, or NITs, as an adjunct to
the current set of NATs. Too many NITs and NATs will definitely send
us all NUTs!
Further Reading
There is no shortage of material on NATs from a wide variety of
sources. The following is a list of IETF-related documents, encompass-
ing both published Request for Comments (RFCs) and works in
progress, that have been circulated as Internet Drafts.
RFCs:
[1] Egevang, K., and P. Francis, “The IP Network Address Translator
(NAT),” RFC 1631, May 1994.
[10] Daigle, L., and IAB, “IAB Considerations for Unilateral Self-
Address Fixing (UNSAF) Across Network Address Translation,”
RFC 3424, November 2002.
Internet Drafts:
Internet Drafts enjoy a fleeting existence, and the following documents
may not be available when you read this article. In such cases it is often
the case that a decent Internet search will locate the document, or its
successor.
Other Resources:
NAT Check: Ford, B. and D. Andersen, Nat Check Website:
http://midcom-p2p.sourceforge.net
Phifer, Lisa, “The Trouble with NAT,” The Internet Protocol Journal,
Volume 3, No. 4, December 2000.
GEOFF HUSTON holds a B.Sc. and a M.Sc. from the Australian National University.
He has been closely involved with the development of the Internet for the past decade,
particularly within Australia, where he was responsible for the initial build of the Inter-
net within the Australian academic and research sector, and has served his time with
Telstra, where he was the Chief Scientist in their Internet area. Geoff is currently the In-
ternet Research Scientist at the Asia Pacific Network Information Centre (APNIC). He is
also the Executive Director of the Internet Architecture Board, and is a member of the
Board of the Public Interest Registry. He is author of The ISP Survival Guide, ISBN 0-
471-31499-4, Internet Performance Survival Guide: QoS Strategies for Multiservice Net-
works, ISBN 0471-378089, and co-author of Quality of Service: Delivering QoS on the
Internet and in Corporate Networks, ISBN 0-471-24358-2, a collaboration with Paul
Ferguson. All three books are published by John Wiley & Sons. E-mail: gih@apnic.net
Suppose that the Google bot, while traversing the Internet to build its
index, calculates the hash for each object it encounters. It can then build
an index of all hash codes, relating them to the URLs where they were
found. (This requires no change in Google: the hash is just one more
word it found in the document). We can then google a hash code to find
all occurrences of the object. (You can simulate this today by selecting a
line of text from a document and launching a search for that sequence
of words. Google will often find multiple copies. Just one line of text is
an extremely poor hash, so you may get a few false hits, but in my ex-
perience not many.)
Simply by adding these hashes, we have turned the Internet into a Con-
tent Addressable Network. If our purpose is to make ourselves
independent of any single copy on any particular server, this is all we
need. For other applications, the objective is to optimize the network
paths to the servers that hold a copy of our object (for example, a
movie). We need a metric that tells us which of the listed locations is
“closest” to our point of entry. This is complicated by the fact that the
Internet is a weird space. The shortest route between Amsterdam and
Brussels might well go via London or Paris.
It may seem more efficient to let the publisher add the hash code to the
objects. HTML files would be labeled with a <MD5= tag, obviating the
need for bots and users (for “content bookmarks”) to do the calcula-
tion. This would allow publishers to change content without changing
the hash, to correct typos or remove scenes deemed unsuitable for local
viewers. But it would no doubt result in fake objects, purporting to be
copies of popular objects but peddling dubious commercial proposals.
Creating fake objects is more difficult if the hash code is calculated by
an independent and unrecognizable bot, although I’m sure the problem
is not completely solved with that.
—Ernst Lopes Cardozo, Aranea Consult BV, The Netherlands
e.lopes.cardozo@aranea.nl
——————————
I noticed that the IPJ page footer only says “The Internet Protocol Jour-
nal” but neither the Volume/Issue number, nor the issue date. That
makes it a bit hard to correctly reference a given article when you only
have a copy of that article and not the whole issue. I propose that you
add something like (from the August issue of CACM):
(I only checked the archived PDF files but I suppose the hardcopy has
the same problem.)
—Örjan Petersson
orjan.petersson@logcode.com
On 20 July 2004 at 18:33 UTC the IPv6 AAAA records for the Japan
(.jp) and Korea (.kr) country code Top Level Domain (ccTLD)
nameservers became visible in the root zone file with serial number
2004072000. It is expected that the IPv6 records for France (.fr) will
be added shortly. Other requests are pending and will be added in ac-
cordance with documented procedure, which was developed through
ICANN’s unique multi-stakeholder consensus-based approach. See:
http://www.iana.org/procedures/delegation-data.html
“We are extremely excited about the formation of this much needed or-
ganization,” said Hiro Hotta, Director JPRS. “We are ready to bring
ENUM trials to the next level.”
“This looks like one of the most exciting events of 2005 with a demon-
stration of technologies to rock Asia Pacific,” said Richard Shockey, co-
Chair of the ENUM Working Group of the IETF.
The formation of APEET has been well received by the Industry. The
Asia Pacific Network Information Centre (APNIC) has extended its
goodwill to host DNS records of apenum.org, the selected “golden
root” of APEET technical trials. APEET is also fortunate to have indi-
vidual experts member such as Richard Shockey.
APEET welcomes all Asia Pacific ccTLD administrators (or its desig-
nated representatives) to join and contribute towards the success of
ENUM adoption in Asia Pacific. For more information, please visit
http://www.apenum.org
In 1986 Gross helped found the IETF. He became the first official chair
in 1987—a position he held for seven years. During his chairmanship,
the IETF evolved from a government-sponsored research group to an
industry-wide Internet standards body. As well as contributing to devel-
oping the IETF standards process itself, Gross played an active role as
co-chair of the IETF Routing and Addressing Working Group. This
group led to solutions for growth-related Internet problems and was in-
strumental in specifying the initial direction for the next generation
Internet Protocol (IPv6) in RFC 1719. He also served as a member of
the Internet Architecture Board (IAB) from 1987 to 1996.
Expressing his appreciation for the award, Gross said “It was very grati-
fying to be there at the beginning and to work with such an incredible
group of people. And, working with Jon over the years gives me a spe-
cial appreciation for the honor that comes with this award.”
This publication is distributed on an “as-is” basis, without warranty of any kind either express or
implied, including but not limited to the implied warranties of merchantability, fitness for a particular
purpose, or non-infringement. This publication could contain technical inaccuracies or typographical
errors. Later issues may modify or update information provided in this issue. Neither the publisher
nor any contributor shall have any liability to any person for any loss or damage caused directly or
indirectly by the information contained herein.