Editing NatT protocol

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 30: Line 30:
 
<pre>
 
<pre>
 
[uint8] pOPS  // bit Field
 
[uint8] pOPS  // bit Field
               // 5 reserved
+
               // 4 reserved
               // 2 IdKind
+
               // 3 IdKind
 
               // 1 req answer
 
               // 1 req answer
 
[ID]          // variable length determined by the Ping Options above may not be set at all
 
[ID]          // variable length determined by the Ping Options above may not be set at all
Line 40: Line 40:
 
* IdKind == 0 :: means no ID field sent
 
* IdKind == 0 :: means no ID field sent
 
* IdKind == 1 :: [uint32 4] ed2k ID
 
* IdKind == 1 :: [uint32 4] ed2k ID
* IdKind == 2 :: [hash128 16] Kad ID
+
* IdKind == 2 :: [Hash128 16] Kad ID
 
* IdKind == 3 :: [hash128 16] User Hash
 
* IdKind == 3 :: [hash128 16] User Hash
  
Line 112: Line 112:
 
[hash128 16]    // File Hash of the pinged file
 
[hash128 16]    // File Hash of the pinged file
 
// the part below is the unofficial mod part (unchanged)
 
// the part below is the unofficial mod part (unchanged)
[uint8 1]        // Mod Opcode (OP_NAT_CALLBACKREQUEST_KAD)
 
 
...
 
...
 
</pre>
 
</pre>
Line 143: Line 142:
 
</pre>
 
</pre>
  
Please refer to the [[NatT_protocol#Additional Features for NatT|Additional Features for NatT]] section for further informations on the XS Buddy feature.
+
Please refer to the Additional Features for NatT section for further informations on the XS Buddy feature.
  
 
== User Mode TCP ==
 
== User Mode TCP ==
Line 168: Line 167:
 
=== Communication ===
 
=== Communication ===
 
All send data segments are equipped with a unique sequence number indicating their position in the data stream. When Bob (B) receives a NAT_DATA segment form Alice (A) he acknowledges it with an NAT_DATA_ACK, if Alice don’t get the acknowledgement she will resend the segment, she will also resend it if she gets acknowledgements for 3 segments with an higher sequence Number when the, while the a acknowledgment for the older segment is still missing (Fast retransmission).
 
All send data segments are equipped with a unique sequence number indicating their position in the data stream. When Bob (B) receives a NAT_DATA segment form Alice (A) he acknowledges it with an NAT_DATA_ACK, if Alice don’t get the acknowledgement she will resend the segment, she will also resend it if she gets acknowledgements for 3 segments with an higher sequence Number when the, while the a acknowledgment for the older segment is still missing (Fast retransmission).
 
Note: The sequence number of sent segments always starts with 1 and is incremented by one.
 
 
  
 
<pre>
 
<pre>
Line 254: Line 250:
 
The Source Packet is built the following way:
 
The Source Packet is built the following way:
 
<pre>
 
<pre>
[hash128 16]    // file hash
+
[hast128 16]    // file hash
 
[uint16 2]      // source count
 
[uint16 2]      // source count
 
// Source entries 1:
 
// Source entries 1:
Line 380: Line 376:
 
|-
 
|-
 
|}
 
|}
 
== Additional Modifications ==
 
 
=== Fix for eServer Connect ===
 
Due to the need of having the server's UDP Key it is needed to alternate the connection procedure to first obtain the server infos over UDP by OP_GLOBSERVSTATREQ, by the way this is sense full also for obfuscation to get the obfuscated server port.
 
 
=== Fix for Bandwidth Control ===
 
The sending/receiving functions of the Client UDP Socket must not count the size of NatT Data/Ack packets, this bandwidth is already counted by the EMSocket like regular TCP traffic. Counting it on the UDP Socket will result in false values and waisted bandwidth!
 
 
  
 
== NAT Types ==
 
== NAT Types ==
Line 409: Line 396:
 
|-
 
|-
 
|OP_NAT_PING
 
|OP_NAT_PING
| '0xD7'
+
| '_'
 
|-
 
|-
 
|
 
|
 
|-
 
|-
 
|OP_NAT_SYN
 
|OP_NAT_SYN
| '0xD0'
+
| '_'
 
|-
 
|-
 
|OP_NAT_SYN_ACK
 
|OP_NAT_SYN_ACK
| '0xD1'
+
| '_'
 
|-
 
|-
 
|OP_NAT_DATA
 
|OP_NAT_DATA
| '0xD2'
+
| '_'
 
|-
 
|-
 
|OP_NAT_DATA_ACK
 
|OP_NAT_DATA_ACK
| '0xD3'
+
| '_'
 
|-
 
|-
 
|OP_NAT_FIN
 
|OP_NAT_FIN
| '0xD4'
+
| '_'
 
|-
 
|-
 
|OP_NAT_FIN_ACK
 
|OP_NAT_FIN_ACK
| '0xD5'
+
| '_'
 
|-
 
|-
 
|OP_NAT_RST
 
|OP_NAT_RST
| '0xD6'
+
| '_'
 
|-
 
|-
 
|
 
|
 
|-
 
|-
|MT_EMULE_BUDDYID
+
|CT_EMULE_BUDDYID
| '0x40'
+
| '_'
 
|-
 
|-
|MT_XS_EMULE_BUDDYIP
+
|CT_XS_EMULE_BUDDYIP
| '0x42'
+
| '_'
 
|-
 
|-
|MT_XS_EMULE_BUDDYUDP
+
|CT_XS_EMULE_BUDDYUDP
| '0x62'
+
| '_'
|-
+
|
+
|-
+
|OP_NAT_CALLBACKREQUEST
+
| '0xA6'
+
|-
+
|OP_NAT_CALLBACKREQUESTED_UDP
+
| '0xA7'
+
|-
+
|OP_NAT_CALLBACKREQUESTED
+
| '0x37'
+
 
|-
 
|-
 
|
 
|
 
|-
 
|-
 
|OP_NAT_CALLBACKREQUEST_KAD
 
|OP_NAT_CALLBACKREQUEST_KAD
| '0xB0'
+
| '_'
|-
+
|
+
|-
+
|OP_NEO_ANSWERSOURCES
+
| '0x82'
+
 
|-
 
|-
 
|
 
|
 
|-
 
|-
 
|OP_XS_BUDDY_REQ
 
|OP_XS_BUDDY_REQ
| '0xB1'
+
| '_'
|-
+
|OP_XS_BUDDY_ANSWER
+
| '0xB2'
+
 
|-
 
|-
 
|OP_XS_BUDDYPING
 
|OP_XS_BUDDYPING
| '0xB3'
+
| '_'
 
|-
 
|-
 
|OP_XS_MULTICALLBACKUDP
 
|OP_XS_MULTICALLBACKUDP
| '0xB4'
+
| '_'
 
|-
 
|-
 
|OP_XS_MULTICALLBACKTCP
 
|OP_XS_MULTICALLBACKTCP
| '0xB5'
+
| '_'
 
|-
 
|-
 
|OP_CALLBACKREQUEST_XS
 
|OP_CALLBACKREQUEST_XS
| '0xBA'
+
| '_'
 
|-
 
|-
 
|OP_NAT_CALLBACKREQUEST_XS
 
|OP_NAT_CALLBACKREQUEST_XS
| '0xBB'
+
| '_'
 
|-
 
|-
 
|
 
|
 
|-
 
|-
 
|OP_PUBLICPORT_REQ
 
|OP_PUBLICPORT_REQ
| '0xA7'
+
| '_'
 
|-
 
|-
 
|OP_PUBLICPORT_ANSWER
 
|OP_PUBLICPORT_ANSWER
| '0xA8'
+
| '_'
|-
+
|
+
|
+
|-
+
|SRVCAP_NATTRAVERSAL
+
| '0x1000'
+
|-
+
|SRV_TCPFLG_NATTRAVERSAL
+
| '0x00001000'
+
|-
+
|SRV_UDPFLG_NATTRAVERSAL
+
| '0x00010000'
+
 
|-
 
|-
 
|}
 
|}
 
Note: The UDP range 0xD0 to 0xDF is completely reserver for NatT
 
 
== See also ==
 
 
* [[Nattraversal]]
 
 
[[category:Mod_protocol_extensions]]
 

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