Editing Nattraversal

From EMule Wiki
Jump to: navigation, search

Warning: The database has been locked for maintenance, so you will not be able to save your edits right now. You may wish to cut-n-paste the text into a text file and save it for later.

The administrator who locked it offered this explanation: site maintenance

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
''nat traversal'' Makes LowID to LowID connections possible in by creating a UDP tunnel.
+
''nat traversal'' Makes LowID to LowID connections posible in most cases by creating a tunnel.
  
http://wiki.emule-web.de/image/Nat-traverse-net.gif
+
[image:http://wiki.emule-web.de/image/Nat-traverse-net.gif]
  
The basic tunneling procedure is:
+
1. The local client (A) is a normal NATed client, the remote client (B) is behind a Full Cone NAT (incoming UDP packets from any host will be forwarded instantly)
<pre>
+
Requester(A)     Kad/Svr/Xs        Target(B)
+
ReqCallback    -->          -->    A's IpPort
+
[droped]      <----------------      SendPing
+
B's IpPort    <--          <--      ReqCallback*
+
SendPing      ---------------->   
+
              <----------------      SendPong
+
UmTCP Sync    ..................
+
</pre>
+
<nowiki>*</nowiki> The remote callback is needed in order to tell the requester the actual UDP port of the target client.
+
It is not always the case that the ping from B is dropped on FullConeNats it can pass through, there for the remote callback is delayed by a few seconds to see if A answers with a Ping.
+
  
After the tunnel is made the 2 clients starts an streaming connection similar to TCP but self made.<br>
+
In this case we don’t need the KAD buddy, we send a UDP packet (2 bytes ProtID+Opcode) (NAT Ping) to B this enabling our NAT to forward incoming packets to us. The remote side answers with a own ping when we gets the remote NAT ping we have a tunnel….
The So called "User Mode TCP" can almost everything the normal TCP can, it handles missing or duplicated packets, as well as packets arriving out of order. It have full TCP congestion control implemented. All this assures a fast and reliable streaming connection.
+
  
 +
2. Client A is behind a Full Cone NAT and client B is behind a normal NAT We send ping request over the buddy (E) of B, When B receives it he send’s a NAT ping packet to us, when we receive the packet we have a tunnel…
  
Developed by David Xanatos, [[Neomule]].  
+
3. A and B are behind normal NATs A sends a ping request over E to B and in the request request’s a remote request. When B receives the Ping request from E he sends a NAT Ping to A, whitch is expected to be dropped on A’s NAT. And He sends a own Ping request to A over A’s buddy E2. When A gets the remote Ping Request he have the most actual extern UDP port of B and send a NAT Ping on this port. B receives the NAT ping and answers with a own second NAT Ping, when the ping arrives by A we have a Tunel…
  
[[Category:Features]][[Category:NeoMule features]]
+
3b. A and B are behind normal NATs, we trust the UDP port B have published on KAD A sends a ping request over E to B and at the same time sends a NAT Ping to B, this enabling our NAT to forward packets from B to us, the ping is expected to be dropped on B’s NAT. When B receives the Ping request from E he sends a NAT Ping to A, when the ping arrives by A we have a Tunel…
 +
 
 +
When A see that a tunnel is established he send’s a NAT Config Packet which contains some configuration informations for the Streaming connection. When B receives the config he send the own config. At the moment when A or B have send a config and got the remote the Streaming connection is being activated. A have the choice to send the config or not to send, in case he don’t send we remain in UDP mode for example for an UDP file Reask Ping saving us some overhead.
 +
 
 +
developed by david xanatos, Neomule.
 +
 
 +
[[category:features]]

Please note that all contributions to EMule Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see EMule Wiki:Copyrights for details). Do not submit copyrighted work without permission!

Cancel | Editing help (opens in new window)
Personal tools