home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2007 September / maximum-cd-2007-09.iso / Assets / data / AssaultCube_v0.93.exe / source / enet / design.txt < prev    next >
Encoding:
Text File  |  2006-11-06  |  5.8 KB  |  118 lines

  1. * Why ENet?
  2.  
  3.     ENet evolved specifically as a UDP networking layer for the multiplayer 
  4. first person shooter Cube. Cube necessitated low latency communcation with
  5. data sent out very frequently, so TCP was an unsuitable choice due to its
  6. high latency and stream orientation. UDP, however, lacks many sometimes 
  7. necessary features from TCP such as reliability, sequencing, unrestricted
  8. packet sizes, and connection management. So UDP by itself was not suitable
  9. as a network protocol either. No suitable freely available networking 
  10. libraries existed at the time of ENet's creation to fill this niche.
  11.  
  12.     UDP and TCP could have been used together in Cube to benefit somewhat
  13. from both of their features, however, the resulting combinations of protocols
  14. still leaves much to be desired. TCP lacks multiple streams of communication
  15. without resorting to opening many sockets and complicates delineation of 
  16. packets due to its buffering behavior. UDP lacks sequencing, connection 
  17. management, management of bandwidth resources, and imposes limitations on
  18. the size of packets. A significant investment is required to integrate these 
  19. two protocols, and the end result is worse off in features and performance 
  20. than the uniform protocol presented by ENet.
  21.  
  22.     ENet thus attempts to address these issues and provide a single, uniform
  23. protocol layered over UDP to the developer with the best features of UDP and 
  24. TCP as well as some useful features neither provide, with a much cleaner 
  25. integration than any resulting from a mixture of UDP and TCP.
  26.  
  27. * Connection management
  28.  
  29.     ENet provides a simple connection interface over which to communicate
  30. with a foreign host. The liveness of the connection is actively monitored
  31. by pinging the foreign host at frequent intervals, and also monitors the
  32. network conditions from the local host to the foreign host such as the
  33. mean round trip time and packet loss in this fashion.
  34.  
  35. * Sequencing
  36.     
  37.     Rather than a single byte stream that complicates the delineation 
  38. of packets, ENet presents connections as multiple, properly sequenced packet
  39. streams that simplify the transfer of various types of data.
  40.  
  41.     ENet provides sequencing for all packets by assigning to each sent 
  42. packet a sequence number that is incremented as packets are sent. ENet 
  43. guarentees that no packet with a higher sequence number will be delivered 
  44. before a packet with a lower sequence number, thus ensuring packets are 
  45. delivered exactly in the order they are sent. 
  46.  
  47.     For unreliable packets, ENet will simply discard the lower sequence 
  48. number packet if a packet with a higher sequence number has already been 
  49. delivered. This allows the packets to be dispatched immediately as they
  50. arrive, and reduce latency of unreliable packets to an absolute minimum.
  51. For reliable packets, if a higher sequence number packet arrives, but the 
  52. preceding packets in the sequence have not yet arrived, ENet will stall 
  53. delivery of the higher sequence number packets until its predecessors
  54. have arrived.
  55.  
  56. * Channels
  57.  
  58.     Since ENet will stall delivery of reliable packets to ensure proper
  59. sequencing, and consequently any packets of higher sequence number whether 
  60. reliable or unreliable, in the event the reliable packet's predecessors 
  61. have not yet arrived, this can introduce latency into the delivery of other 
  62. packets which may not need to be as strictly ordered with respect to the 
  63. packet that stalled their delivery.
  64.  
  65.     To combat this latency and reduce the ordering restrictions on packets,
  66. ENet provides multiple channels of communication over a given connection.
  67. Each channel is independently sequenced, and so the delivery status of
  68. a packet in one channel will not stall the delivery of other packets
  69. in another channel.
  70.  
  71. * Reliability
  72.  
  73.     ENet provides optional reliability of packet delivery by ensuring the 
  74. foreign host acknowledges receipt of all reliable packets. ENet will attempt 
  75. to resend the packet up to a reasonable amount of times, if no acknowledgement
  76. of the packet's receipt happens within a specified timeout. Retry timeouts
  77. are progressive and become more lenient with every failed attempt to allow
  78. for temporary turbulence in network conditions.
  79.  
  80. * Fragmentation and reassembly
  81.  
  82.     ENet will send and deliver packets regardless of size. Large packets are
  83. fragmented into many smaller packets of suitable size, and reassembled on
  84. the foreign host to recover the original packet for delivery. The process
  85. is entirely transparent to the developer.
  86.  
  87. * Aggregation
  88.  
  89.     ENet aggregates all protocol commands, including acknowledgements and
  90. packet transfer, into larger protocol packets to ensure the proper utilization
  91. of the connection and to limit the opportunities for packet loss that might
  92. otherwise result in further delivery latency.
  93.  
  94. * Adaptability
  95.  
  96.     ENet provides an in-flight data window for reliable packets to ensure
  97. connections are not overwhelmed by volumes of packets. It also provides a
  98. static bandwidth allocation mechanism to ensure the total volume of packets
  99. sent and received to a host don't exceed the host's capabilities. Further,
  100. ENet also provides a dynamic throttle that responds to deviations from normal
  101. network connections to rectify various types of network congestion by further
  102. limiting the volume of packets sent.
  103.  
  104. * Portability
  105.     
  106.     ENet works on Windows and any other Unix or Unix-like platform providing
  107. a BSD sockets interface. The library has a small and stable code base that
  108. can easily be extended to support other platforms and integrates easily.
  109.  
  110. * Freedom
  111.  
  112.     ENet demands no royalties and doesn't carry a viral license that would
  113. restrict you in how you might use it in your programs. ENet is licensed under
  114. a short-and-sweet MIT-style license, which gives you the freedom to do anything 
  115. you want with it (well, almost anything).
  116.  
  117.  
  118.