<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-CA">
	<id>https://nmsl.cs.sfu.ca/index.php?action=history&amp;feed=atom&amp;title=Private%3ApCDN%3ANAT</id>
	<title>Private:pCDN:NAT - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://nmsl.cs.sfu.ca/index.php?action=history&amp;feed=atom&amp;title=Private%3ApCDN%3ANAT"/>
	<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:NAT&amp;action=history"/>
	<updated>2026-06-06T10:55:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:NAT&amp;diff=2462&amp;oldid=prev</id>
		<title>MediaWiki default at 20:08, 15 October 2008</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:NAT&amp;diff=2462&amp;oldid=prev"/>
		<updated>2008-10-15T20:08:29Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en-CA&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:08, 15 October 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l39&quot; &gt;Line 39:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 39:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Several design alternatives need to be considered when developing such a recipe. First, in a peer-assisted content distribution network, can we ignore double-NAT case without scarifying too much performance? Unlike our work, previous studies often ignore UPnP IGD (or equivalent) protocol. Second, how many more connections can be made by trying UDP hole punching if a TCP one failed. The authors of [http://www.usenix.org/event/usenix05/tech/general/full_papers/ford/ford.pdf FSK05]  reports a higher successful rate of UDP hole punching. They, however, did not cross-refer their TCP results with UDP. Third, does relay server really help in our application? If yes, at what cost?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Several design alternatives need to be considered when developing such a recipe. First, in a peer-assisted content distribution network, can we ignore double-NAT case without scarifying too much performance? Unlike our work, previous studies often ignore UPnP IGD (or equivalent) protocol. Second, how many more connections can be made by trying UDP hole punching if a TCP one failed. The authors of [http://www.usenix.org/event/usenix05/tech/general/full_papers/ford/ford.pdf FSK05]  reports a higher successful rate of UDP hole punching. They, however, did not cross-refer their TCP results with UDP. Third, does relay server really help in our application? If yes, at what cost?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Last, the &lt;/del&gt;[http://www.ietf.org/rfc/rfc5128.txt IETF RFC 5128] surveys most current NAT traversal techniques and describes how they are adopted in P2P applications.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[http://www.ietf.org/rfc/rfc5128.txt IETF RFC 5128] surveys most current NAT traversal techniques and describes how they are adopted in P2P applications&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;There are a few alternatives to the UPnP IDG protocol. All the following protocols can be used to automate the configuration of port forwarding. The difference between them are the security/authentication features. &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;# UPnP IDG (Internet Gateway Device)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;# NAT-PMP (NAT Port Mapping Protocol) &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;# DPWS (Devices Profile for Web Services)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;It appears that UPnP remains the most common protocol implemented in residential routers. NAT-PMP is only used by Apple, while DPWS is implemented in MS Vista&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MediaWiki default</name></author>
	</entry>
	<entry>
		<id>https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:NAT&amp;diff=2247&amp;oldid=prev</id>
		<title>Mhefeeda: New page: '''NAT'''  Network Address Translation (NAT) is a technique that allows multiple hosts on a private network to access the Internet using a single public IP address. This involves overwriti...</title>
		<link rel="alternate" type="text/html" href="https://nmsl.cs.sfu.ca/index.php?title=Private:pCDN:NAT&amp;diff=2247&amp;oldid=prev"/>
		<updated>2008-08-08T00:00:27Z</updated>

		<summary type="html">&lt;p&gt;New page: &amp;#039;&amp;#039;&amp;#039;NAT&amp;#039;&amp;#039;&amp;#039;  Network Address Translation (NAT) is a technique that allows multiple hosts on a private network to access the Internet using a single public IP address. This involves overwriti...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''NAT'''&lt;br /&gt;
&lt;br /&gt;
Network Address Translation (NAT) is a technique that allows multiple hosts on a private network to access the Internet using a single public IP address. This involves overwriting the IP address and port numbers of packets in the router that support address translation. Such a NAT device keeps track of the connections initiated by hosts inside its private network and adds a port mapping for each. Any incoming packet is examined to see if it belongs to a session initiated by one of the hosts inside the private network. The packet is forwarded to the appropriate host if a mapping exists for it, otherwise the packet is dropped. Therefore, hosts behind NAT cannot act as a server unless the NAT device is configured to forward the traffic appropriately. This causes connectivity problems for P2P and VoIP applications, which is referred to as the NAT traversal problem.&lt;br /&gt;
&lt;br /&gt;
'''NAT Traversal'''&lt;br /&gt;
&lt;br /&gt;
Several techniques have been proposed to address this NAT traversal problem:&lt;br /&gt;
* Relay Server: A straight-forward solution is to set up an indirect connection from a host to another via a relay server that has a public IP. While this approach clearly incurs high overhead and delay, it follows the client-server model well and thus is the most reliable approach.&lt;br /&gt;
* Connection Reversal: When a connection has to be set up to a host behind NAT from a host with a public IP, the connection originator can send an out-of-band request to the host behind NAT for a reverse connection. This approach is simple because no NAT configuration is required. It, however, does not solve the double-NAT traversal problem, where both hosts are behind NAT.&lt;br /&gt;
* Explicit Configuration: NAT configuration protocols, such as [http://www.upnp.org/standardizeddcps/igd.asp UPnP IGD] , have been proposed to learn the public IP address and to add port mappings. This approach is limited because not all NAT devices support these protocols, not mention that there is no unified NAT configuration protocol.&lt;br /&gt;
* Implicit Configuration: UDP hole punching was proposed in late 90', in which two hosts behind NAT simultaneously send messages to each other for creating port mappings on both NATs. Similar idea has been recently applied to TCP connections [http://www.usenix.org/event/usenix05/tech/general/full_papers/ford/ford.pdf FSK05] [http://www.cs.cornell.edu/People/francis/imc05-tcpnat.pdf GF05] [http://sparrow.ece.cmu.edu/~adrian/projects/natblaster.pdf BFWP05]. Since NAT behavior is not standardized, hole punching algorithms do not always work. For example, the authors of [http://www.usenix.org/event/usenix05/tech/general/full_papers/ford/ford.pdf FSK05] reported 82% and 64% successful rate for UDP and TCP hole punching in a small-scale experiments (380 data points). [http://nutss.gforge.cis.cornell.edu/stunt.php STUNT] protocol uses a public server with global access to discover NAT behavior, which can shed some light on increasing the successful rate. The authors of [http://www.cs.cornell.edu/People/francis/imc05-tcpnat.pdf GF05] estimated a significant TCP hole punching successful rate increase (42% to 85%) by considering NAT behavior discovered by STUNT. They also compared several variations of the TCP hole punching algorithm in the literature, both analytically and empirically. &lt;br /&gt;
&lt;br /&gt;
In pCDN, a peer receives a list of potential senders from the server in response to its query for a specific file. The peer chooses some of these senders, connects to them over TCP, and downloads the requested file. All potential senders are listening for incoming connections from other peers. If a potential sender is behind NAT, the receiver initiates a connection reversal via the server. If both peers are behind NAT however, no connection can be established unless the NAT device is configured properly to pass the traffic through. Moreover, the receiver needs to be aware of the public IP and external port of the sender it is going to connect to. This information should be discovered by each peer through examining and configuring the NAT device it is behind, and reporting it to the pCDN server. The pCDN server in turn provides downloading peers with this information.&lt;br /&gt;
&lt;br /&gt;
'''Issues'''&lt;br /&gt;
&lt;br /&gt;
* Not all NAT devices support UPnP IGD protocol, therefore we cannot rely on the NAT device to be easily configurable.&lt;br /&gt;
* The behavior of NAT devices can not be predicted precisely. A NAT device may assign a new port number for a connection established on the same local port twice. Therefore, even if we discover the mapping for a connection on local port through some mechanism similar to STUNT, closing the connection and opening it again does not hold the same mapping.&lt;br /&gt;
* No new mapping is automatically created unless a packet is sent from within the private network. Therefore, only listening on a local port number does not allow incoming traffic.&lt;br /&gt;
&lt;br /&gt;
'''Future Work'''&lt;br /&gt;
&lt;br /&gt;
I miss a recipe for a unified NAT traversal algorithm for peer-assisted applications. For example, each peer should determine whether it is behind NAT using the following steps:&lt;br /&gt;
* A peer discovers whether it is behind NAT using a public server.&lt;br /&gt;
* If this peer is behind NAT, configure its NAT using UPnP (or friends).&lt;br /&gt;
** If the NAT configuration is successful, we consider this peer is not behind NAT, otherwise we consider it is behind NAT.&lt;br /&gt;
* (Optional) A peer behind NAT discovers the characteristics of its NAT device using protocols like STUNT.&lt;br /&gt;
It is not clear how many peers are behind NAT, and how many of them can successfully configure their NAT devices. &lt;br /&gt;
&lt;br /&gt;
When a receiver needs to download from a sender, the receiver takes different strategies based on the following circumstances.&lt;br /&gt;
# Neither hosts is behind NAT: direct connection.&lt;br /&gt;
# Only the receiver is behind NAT: direct connection.&lt;br /&gt;
# Only the sender is behind NAT: connection reversal&lt;br /&gt;
# Both hosts are behind NAT: try the follow until success:&lt;br /&gt;
## TCP hole punching&lt;br /&gt;
## UDP hole punching&lt;br /&gt;
## Relay&lt;br /&gt;
&lt;br /&gt;
Several design alternatives need to be considered when developing such a recipe. First, in a peer-assisted content distribution network, can we ignore double-NAT case without scarifying too much performance? Unlike our work, previous studies often ignore UPnP IGD (or equivalent) protocol. Second, how many more connections can be made by trying UDP hole punching if a TCP one failed. The authors of [http://www.usenix.org/event/usenix05/tech/general/full_papers/ford/ford.pdf FSK05]  reports a higher successful rate of UDP hole punching. They, however, did not cross-refer their TCP results with UDP. Third, does relay server really help in our application? If yes, at what cost?&lt;br /&gt;
&lt;br /&gt;
Last, the [http://www.ietf.org/rfc/rfc5128.txt IETF RFC 5128] surveys most current NAT traversal techniques and describes how they are adopted in P2P applications.&lt;/div&gt;</summary>
		<author><name>Mhefeeda</name></author>
	</entry>
</feed>