From EMule Wiki
Jump to: navigation, search

nat traversal Makes LowID to LowID connections possible in by creating a UDP tunnel.


The basic tunneling procedure is:

Requester(A)      Kad/Svr/Xs         Target(B)
ReqCallback    -->           -->     A's IpPort
[droped]      <----------------      SendPing
B's IpPort    <--           <--      ReqCallback*
SendPing       ---------------->     
              <----------------      SendPong
UmTCP Sync    ..................

* 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.
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.

Developed by David Xanatos, Neomule.

Personal tools