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

通讯编程

开发平台:

Visual C++

  1. chapter{Hierarchical Routing}
  2. label{chap:hier-rtg}
  3. This chapter describes the internals of hierarchical routing
  4. implemented in ns.
  5. This chapter consists of two sections. In the first section we give an
  6. overview of hierarchical routing. In the second section we walk through
  7. the API's used for setting hierarchical routing and describe the
  8. architecture, internals and code path for hier rtg in the process.
  9. The functions and procedures described in this chapter can be found in
  10. nsf{tcl/lib/ns-hiernode.tcl, tcl/lib/ns-address.tcl,
  11.   tcl/lib/ns-route.tcl and route.cc}. 
  12. section{Overview of Hierarchical Routing}
  13. label{sec:over-hier-rtg}
  14. Hierarchical routing was mainly devised, among other things, to reduce
  15. memory requirements of simulations over very large topologies. A
  16. topology is broken down into several layers of hierarchy, thus
  17. downsizing the routing table. The table size is reduced from 
  18. {em {$n^{2}$}}, for flat routing, to about {em log n} for 
  19. hierarchical routing. However some overhead costs results as 
  20. number of hierarchy levels are increased. Optimum results were found for
  21. 3 levels of hierarchy and the current ns implementation supports upto a
  22. maximum of 3 levels of hierarchical routing. 
  23. To be able to use hierarchical routing for the simulations, we need to
  24. define the hierarchy of the topology as well as provide the nodes with
  25. hierarchical addressing. In flat routing, every node knows about every
  26. other node in the topology, thus resulting in routing table size to the
  27. order of 
  28. $n^{2}$. For hierarchical routing, each node knows only about
  29. those nodes in its level. For all other destinations outside its level
  30. it forwards the packets to the border router of its level. Thus the
  31. routing table size gets downsized to the order of about log n.
  32. section{Usage of Hierarchical routing}
  33. label{sec:usage-hier-rtg} 
  34. Hierarchical routing requires some additional features and mechanisms
  35. for the simualtion. For example, a new node object called {em HierNode}
  36. is been defined for hier rtg. Therefore the user must specify
  37. hierarchical routing requirements before creating topology. This is done
  38. as shown below: 
  39. First, the address format (label{chap:address} ) or the address space
  40. used for node and port address, needs to be set in the hierarchical
  41. mode. It may be done in one of the two ways:
  42. begin{program}
  43.   set ns [new Simulator]
  44.   $ns set-address-format hierarchical
  45. end{program} 
  46. This sets the node address space to a 3 level hierarchy assigning 8 bits
  47. in each level.
  48. or,
  49. begin{program}
  50.   $ns set-address-format hierarchical <n hierarchy levels> <# bits in
  51.   level 1> ...<# bits in nth level>
  52. end{program} 
  53. which creates a node address space for n levels of hierarchy assigning
  54. bits as specified for every level.
  55. This other than creating a hierarchical address space also sets a flag
  56. called {em EnableHierRt_} and sets the Simulator class variable
  57. node_factory_ to HierNode.  
  58. Therefore when nodes are created by calling Simulator method ``node'' as
  59. in :
  60. $ns node 0.0.1,
  61. a HierNode is created with an address of 0.0.1;
  62. Class AddrParams is used to store the topology hierarchy like number
  63. of levels of hierarchy, number of areas in each level like number of
  64. domains, number of clusters and number of nodes in each cluster.
  65. The API for supplying these information to AddrParams is shown below:
  66. begin{program}
  67. AddrParams set domain_num_ 2
  68. lappend cluster_num 2 2
  69. AddrParams set cluster_num_ $cluster_num
  70. lappend eilastlevel 2 3 2 3
  71. AddrParams set nodes_num_ $eilastlevel
  72. end{program}
  73. This defines a topology with 2 domains, say D1 and D2 with 2 clusters
  74. each (C11 & C12 in D1 and C21 & C22 in D2). Then number of nodes in
  75. each of these 4 clusters is specified as 2,3,2 and 3 respectively.
  76. The default values used by AddrParams provide a topology with a single
  77. domain with 4 clusters, with each cluster consisting of 5 nodes.
  78. Appropriate mask and shift values are generated by AddrParams for the
  79. hierarchical node address space.
  80. Each HierNode at the time of its creation calls the method
  81. `mk-default-classifier '' to setup n numbers of address
  82. classifiers for n levels of hierarchy defined in the topology.
  83. begin{program}
  84.   HierNode instproc mk-default-classifier {} {
  85.     $self instvar np_ id_ classifiers_ agents_ dmux_ neighbor_ address_ 
  86.     # puts "id=$id_"
  87.     set levels [AddrParams set hlevel_]
  88.     for {set n 1} {$n <= $levels} {incr n} {
  89.       set classifiers_($n) [new Classifier/Addr]
  90.       $classifiers_($n) set mask_ [AddrParams set NodeMask_($n)]
  91.       $classifiers_($n) set shift_ [AddrParams set NodeShift_($n)]
  92.       }
  93.     }
  94. end{program}
  95. At the time of route computation, a call is made to add-route.
  96. add-route populates classifiers as shown in the otcl method below:
  97. begin{program}
  98. Node instproc add-route { dst target } {
  99.   $self instvar rtnotif_
  100. # Notify every module that is interested about this 
  101. # route installation
  102. if {$rtnotif_ != ""} {
  103. $rtnotif_ add-route $dst $target
  104. }
  105. $self incr-rtgtable-size
  106. }
  107. end{program}
  108. For an example of 3 level of hierarchy, the level 1 classifier demuxes
  109. for domains, level 2 for all clusters inside the node's domain and
  110. finally classifier 3 demuxes for all nodes in the particular cluster
  111. that the node itself resides. For such a topology, a HierNode with
  112. address of 0.1.2 looks like the figure below:
  113. begin{figure}[tb]
  114. centerline{includegraphics{hier-classifier}}
  115. caption{Hierarchical classifiers}
  116. label{fig:hier-classifier}
  117. end{figure}
  118. Thus the size of the routing tables are considerably reduced from 
  119. $n^{2}$ as seen for flat routing where each node had to store the
  120.   next_hop info of all other nodes in the topology. Instead, for
  121.   hierarchical routing, a given node needs to know about its neighbours
  122.   in its own cluster, about the all clusters in its domain and about all
  123.   the domains. This saves on memory consumption as well as run-time for
  124.   the simulations using several thousands of nodes in their topology.
  125. section{Creating large Hierarchical topologies}
  126. label{large-hier-topo}
  127. The previous section describes methods to create hierarchical topologies
  128. by hand. However, there is a script available in ns that converts
  129. Georgia-tech's SGB-graphs into ns compatible hierarchical topologies.
  130. Please refer to {em http://www-mash.CS.Berkeley.EDU/ns/ns-topogen.html}
  131. for downloading as well as instructions on using the hierarchical
  132. converter package. 
  133. See hier-rtg-10.tcl and hier-rtg-100.tcl in nsf{tcl/ex} for example
  134. scripts of hier routing on small and large topologies
  135. respectively. 
  136. section{Hierarchical Routing with SessionSim}
  137. label{sec:hier-rtg-with-sessionsim}
  138. Hierarchical routing may be used in conjunction with Session simulations
  139. (see Chapter ~ref{chap:session}). Session-level simulations which are used
  140. for running multicast simulations over very large topologies, gains
  141. additionally in terms of memory savings if used with hierarchical
  142. routing. See simulation script nsf{tcl/ex/newmcast/session-hier.tcl}
  143. for an example of sessionsim over hier rtg.
  144. section{Commands at a glance}
  145. Following is a list of hierarchical routing/addressing related commands
  146. used in simulation scripts:
  147. begin{flushleft}
  148. code{$ns_ set-address-format hierarchical}\
  149. This command was used to setup hierarchical addressing in ns. However with
  150. the recent changes in node APIs, this command has been replaced by\
  151. code{ns_ node-config -addressType hierarchical}\
  152. This creates a default topology of 3 levels of hierarchy, assigning 8 bits
  153. to each level.
  154. code{$ns_ set-address-format hierarchical <nlevels> <#bits in level1>....<#bits in level n>}\
  155. This command creates a hierarchy of <nlevels> and assigns the bits in each level
  156. as specified in the arguments.
  157. begin{program}
  158. AddrParams set domain_num_ <n_domains>
  159. AddrParams set cluster_num_ <n_clusters>
  160. AddrParams set nodes_num_ <n_nodes>
  161. end{program}
  162. The above APIs are used to specify the hierarchical topology, i.e the number of
  163. domains, clusters and nodes present in the topology. Default values used by
  164. AddrParams (i.e if nothing is specified) provide a topology with a single
  165. domain with 4 clusters, with each cluster consisting of 5 nodes.
  166. Internal procedures:\
  167. code{$Node add-route <dst> <target>}\
  168. This procedure is used to add next-hop entries of a destination <dst> for a given <target>. 
  169. code{$hiernode_ split-addrstr <str>}\
  170. This splits up a hierarchical adrress string  (say a.b.c) into a list of
  171. the addresses at each level (i.e, a,b and c).
  172. end{flushleft}
  173. endinput