session.tex
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:13k
源码类别:

通讯编程

开发平台:

Visual C++

  1. chapter{Session-level Packet Distribution}
  2. label{chap:session}
  3. This section describes the internals of the Session-level Packet Distribution
  4. implementation in ns.
  5. The section is in two parts:
  6. the first part is an overview of 
  7. href{Session configuration}{Section}{sec:config},
  8. and a ``complete'' description of the configuration parameters 
  9. of a Session.
  10. The second part describes the architecture, internals, and the code path
  11. of the Session-level Packet distribution.
  12. The procedures and functions described in this chapter can be found in
  13. nsf{tcl/session/session.tcl}.
  14. Session-level Packet Distribution is oriented towards
  15. performing multicast simulations over large topologies.
  16. The memory requirements for some topologies using
  17. session level simulations are:
  18. begin{tabular}{r @{~~~$approx$~} r@{,MB}}
  19. 2048 nodes, degree of connectivity = 8 & 40 \
  20. 2049--4096 nodes & 167 \
  21. 4097--8194 nodes & 671 \
  22. end{tabular}
  23. Note however, that session level simulations ignore qeueing delays.
  24. Therefore, the accuracy of
  25. simulations that use sources with a high data rate,
  26. or those that use multiple sources that get aggregated at points
  27. within the network is suspect.
  28. section{Configuration}
  29. label{sec:config}
  30. Configuration of a session level simulation consists of two parts,
  31. href{configuration of the session level details themselves}{Section}{%
  32.         sec:basic-config}
  33. and 
  34. href{adding loss and error models to the session level abstraction
  35. to model specific behaviours}{Section}{sec:loss-config}.
  36. subsection{Basic Configuration}
  37. label{sec:basic-config}
  38. The basic configuration consists of creating and configuring
  39. a  multicast session.
  40. Each Session (ie, a multicast tree) must be configured strictly in
  41. this order:
  42. (1) create and configure the session source,
  43. (2) create the session helper and attach it to the session source, and
  44. finally, (3) have the session members join the session.
  45. begin{program}
  46.         set ns [new SessionSim]          ; preamble initialization;
  47.         set node [$ns node]    
  48.         set group [$ns allocaddr]
  49.         set udp [new Agent/UDP]         ; create and configure the source;
  50.         $udp set dst_ $group
  51. set src [new Application/Traffic/CBR]
  52. $src attach-agent $udp
  53.         $ns attach-agent $node $udp
  54.         $ns create-session $node $udp   ; create attach session helper to src;
  55.         set rcvr [new Agent/NULL]        ; configure the receiver;
  56.         $ns attach-agent $node $rcvr
  57.         $ns at 0.0 "$node join-group $rcvr $group" ; joining the session;
  58.         $ns at 0.1 "$src start"
  59. end{program}
  60. A session level simulation scales by translating the topology
  61. into a virtual mesh topology.
  62. The steps involved in doing this are:
  63. begin{enumerate}itemsep0pt
  64. item All of the classifiers and replicators are eliminated.
  65.   Each node only stores instance variables to track its node id, and port ids.
  66. item Links do not consist of multiple components.
  67.   Each link only stores instance variables to track the bandwidth and delay attributes.
  68. item The topology, consisting of links is translated into a virtual mesh.
  69. end{enumerate}
  70. begin{figure}
  71.   centerline{includegraphics{regularTree}hfilincludegraphics{sessionTree}}
  72.   caption{Comparison of Multicast Trees for Detailed vs. Session Routing}
  73.   label{fig:conversions}
  74. end{figure}
  75. Figure~ref{fig:conversions} shows the difference between a
  76. multicast tree in a detailed simulation and one in a session level simulation.
  77. Notice that the translation process results in a session level simulation
  78. ignoring queuing delays.
  79. For most simulations, ns already ignores processing delays at all of the nodes.
  80. subsection{Inserting a Loss Module}
  81. label{sec:loss-config}
  82. When studying a protocol (eg, SRM error recovery mechanism), 
  83. it might be useful to study protocol behavior over lossy links.
  84. However, since a session level simulation scales by abstracting 
  85. out the internal topology,
  86. we need additional mechanisms to insert a loss module appropriately.
  87. This subsection describes how one can create these loss modules to
  88. model error scenarios.
  89. %Please note that packets dropped at a particular link in a
  90. %multicast tree will not be received by
  91. %the receivers in the particular downstream subtree. We have worked 
  92. %on this dependency problem and now the loss modules for the downstream 
  93. %receivers will be installed automatically when a lossy link is created.
  94. paragraph{Creating a Loss Module}
  95. Before we can insert a loss module in between a source-receiver pair,
  96. we have to create the loss module.  Basically,
  97. a loss module compares two values to decide whether to drop a packet.
  98. The first value is obtained every time when the loss module receives 
  99. a packet from a random variable.  The second value
  100. is fixed and configured when the loss module is created.
  101. The following code gives an example to create a uniform 0.1 loss rate.
  102. begin{program}
  103.         # {cf creating the uniform distribution random variable}
  104.         set loss_random_variable [new RandomVariable/Uniform] 
  105.         $loss_random_variable set min_ 0 ; set the range of the random variable;
  106.         $loss_random_variable set max_ 100
  107.         set loss_module [new ErrorModel] ; create the error model;
  108.         $loss_module drop-target [new Agent/Null] 
  109.         $loss_module set rate_ 10 ; set error rate to (0.1 = 10 / (100 - 0));
  110.         $loss_module ranvar $loss_random_variable ; attach random var. to loss module;
  111. end{program}
  112. href{A catalogue of the random variable distributions was described earlier}{%
  113.         Chapter}{chap:math}.
  114. href{A more detailed discussion of error models was also described earlier
  115. in a different chapter}{Chapter}{chap:error_model}.
  116. paragraph{Inserting a Loss Module}
  117. A loss module can only be inserted after the corresponding receiver
  118. has joined the group.  The example code below illustrates how
  119. a simulation script can introduce a loss module.
  120. begin{program}
  121.         set sessionhelper [$ns create-session $node $src] ; keep a handle to the loss module;
  122.         $ns at 0.1 "$sessionhelper insert-depended-loss $loss_module $rcvr" 
  123. end{program}
  124. section{Architecture}
  125. label{sec:session-arch}
  126. The purpose of Session-level packet distribution is to
  127. speed up simulations and reduce memory consumption while 
  128. maintaining reasonable accuracy.
  129. The first bottleneck observed is the memory consumption by heavy-weight
  130. links and nodes.  Therefore, in SessionSim (Simulator for Session-level
  131. packet distribution), we keep only minimal amount of 
  132. states for links and nodes, and connect the higher level source and 
  133. receiver applications with appropriate delay and loss modules.
  134. A particular source in a group sends its data packets
  135. to a replicator that is responsible for replicating the packets
  136. for all the receivers.
  137. Intermediate loss and delay modules between this replicator and the receivers
  138. will guarantee the appropriate end-to-end characteristics.
  139. To put it another way, a session level simulation
  140. abstracts out the topology, routing and queueing delays.
  141. Packets in SessionSim do not get routed.  
  142. They only follow the established Session.
  143. section{Internals}
  144. This section describes the internals of Session-level Packet Distribution.
  145. We first describe the OTcl primitives to configure a session level
  146. simulation (Section~ref{sec:session-objlink});
  147. we conclude with a brief note on hos packet forwarding is achieved
  148. (Section~ref{sec:session-pktforward}).
  149. subsection{Object Linkage}
  150. label{sec:session-objlink}
  151. We describe three aspects of constructing a session level simulation in
  152. ns:
  153. the modified topology routines that permit the creation of abstract
  154. nodes and links,
  155. establish the session helper for each active source,
  156. add receivers to the session by inserting the appropriate loss and delay
  157. models when that receiver joins the appropriate group.
  158. paragraph{Nodes and Links}
  159. The node contains only its node id and the port number for the next agent.
  160. A link only contains the values of its bandwidth and delay.
  161. begin{program}
  162. SessionNode instproc init {} {
  163.     $self instvar id_ np_
  164.     set id_ [Node getid]
  165.     set np_ 0
  166. }
  167. SessionSim instproc simplex-link { n1 n2 bw delay type } {
  168.     $self instvar bw_ delay_
  169.     set sid [$n1 id]
  170.     set did [$n2 id]
  171.     set bw_($sid:$did) [expr [string trimright $bw Mb] * 1000000]
  172.     set delay_($sid:$did) [expr [string trimright $delay ms] * 0.001]
  173. }
  174. end{program}
  175. paragraph{Session Helper}
  176. Each active source in a session requires a ``session helper''.
  177. The session helper in ns is realised through a replicator.
  178. This session helper is created when the user issues a
  179. proc[]{create-session} to identify the source agent.
  180. The simulator itself keeps a reference to the session helper
  181. in its instance variable array, code{session_},
  182. indexed by the source and destination address of the source.
  183. Note that the destination of source agent must be set before
  184. calling proc[]{create-session}.
  185. begin{program}
  186. SessionSim instproc create-session { node agent } {
  187.     $self instvar session_
  188.     set nid [$node id]
  189.     set dst [$agent set dst_]
  190.     set session_($nid:$dst) [new Classifier/Replicator/Demuxer]
  191.     $agent target $session_($nid:$dst) ; attach the replicator to the source;
  192.     return $session_($nid:$dst) ; keep the replicator in the SessionSim instance variable array code{session_};
  193. }
  194. end{program}
  195. paragraph{Delay and Loss Modules}
  196. Each receiver in a group requires a delay module that
  197. reflects its delay with respect to the particular source.
  198. When the receiver joins a group, 
  199. proc[]{join-group} identifies all session helpers in code{session_}.
  200. If the destination index matches the group address
  201. the receiver are joining, then the following actions are performed.
  202. begin{enumerate}
  203. item A new slot of the session helper is created and assigned to the receiver.
  204. item The routine computes the accumulated bandwidth and delay
  205.   between the source and receiver using the SessionSim instance procedures
  206.   proc[]{get-bw} and proc[]{get-delay}.
  207. item A constant random variable is created; it will generate random delivery
  208.   times using the accumulative delay as an estimate of the average delay.
  209. item A new delay module is created with the end-to-end bandwidth
  210.   characteristics, and the random variable generator provides the delay
  211.   estimates.
  212. item The delay module in inserted into the session helper and interposed
  213.   between the helper and the receiver.
  214. end{enumerate}
  215. See Section~ref{sec:loss-config} for similarly
  216. inserting a loss module for a receiver.
  217. begin{program}
  218. SessionSim instproc join-group { agent group } {
  219.     $self instvar session_
  220.     foreach index [array names session_] {
  221.         set pair [split $index :]
  222.         if {[lindex $pair 1] == $group} {
  223.             # Note: must insert the chain of loss, delay, 
  224.             # and destination agent in this order:
  225.             $session_($index) insert $agent ; insert destination agent into session replicator;
  226.             set src [lindex $pair 0] ; find accum. b/w and delay;
  227.             set dst [[$agent set node_] id]
  228.             set accu_bw [$self get-bw $dst $src]
  229.             set delay [$self get-delay $dst $src]
  230.             set random_variable [new RandomVariable/Constant] ; set delay variable ;
  231.             $random_variable set avg_ $delay
  232.             set delay_module [new DelayModel] ; configure the delay module;
  233.             $delay_module bandwidth $accu_bw
  234.             $delay_module ranvar $random_variable
  235.             $session_($index) insert-module $delay_module $agent ; insert the delay module;
  236.         }
  237.     }
  238. }
  239. end{program}
  240. subsection{Packet Forwarding}
  241. label{sec:session-pktforward}
  242. Packet forwarding activities are executed in C++.  A source application 
  243. generates a packet and forwards to its target which must be a replicator 
  244. (session helper).  The replicator copies the packet and forwards 
  245. to targets in the active slots which are either delay modules or loss modules. If loss modules, a decision is made whether to drop the packet.
  246. If yes, the packet is forwarded to the loss modules drop target.  If not,
  247. the loss module forwards it to its target which must be a delay module.
  248. The delay module will forward the packet with a delay to its target which
  249. must be a receiver application.
  250. begin{figure}[tb]
  251. %  centerline{includegraphics{sessionArch}}
  252.   caption{Architectural Realization of a Session Level Simulation Session}
  253.   label{fig:session}
  254. end{figure}
  255. section{Commands at a glance}
  256. label{sec:sessioncommand}
  257. Following is a list of session-level related commands:
  258. begin{flushleft}
  259. code{set ns [new SessionSim]}\
  260. This command creates an instance of the sessionmode simulator.
  261. code{$ns_ create-session <node> <agent>}\
  262. This command creates and attaches a session-helper, which is basically a
  263. replicator, for the source <agent> created at the <node>.
  264. end{flushleft} 
  265. endinput
  266. ### Local Variables:
  267. ### mode: latex
  268. ### comment-column: 60
  269. ### backup-by-copying-when-linked: t
  270. ### file-precious-flag: nil
  271. ### End: