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

通讯编程

开发平台:

Visual C++

  1. chapter{PackMime-HTTP: Web Traffic Generation}
  2. label{chap:packmime}
  3. The PackMime Internet traffic model was developed by researchers in
  4. the Internet Traffic Research group at Bell Labs, based on recent
  5. Internet traffic traces.  PackMime includes a model of HTTP traffic,
  6. called PackMime-HTTP. The traffic intensity generated by PackMime-HTTP
  7. is controlled by the emph{rate} parameter, which is the average number of
  8. new HTTP connections started each second. The PackMime-HTTP implementation
  9. in ns-2, developed at UNC-Chapel Hill, is capable of generating
  10. HTTP/1.0 and HTTP/1.1 (persistent, non-pipelined) connections.
  11. The goal of PackMime-HTTP is not to simulate the interaction between
  12. a single web client and web server, but to simulate the TCP-level
  13. traffic generated on a link shared by many web clients and servers.
  14. A typical PackMime-HTTP instance consists of two ns nodes: a server
  15. node and a client node.  It is important to note that these nodes emph{do
  16. not} correspond to a single web server or web client.  A single
  17. PackMime-HTTP client node generates HTTP connections coming from a
  18. ``cloud'' of web clients.  Likewise, a single PackMime-HTTP server
  19. node accepts and serves HTTP connections destined for a ``cloud'' of
  20. web servers.  A single web client is represented by a single PackMime-HTTP
  21. client application, and a single web server is represented by a single
  22. PackMime-HTTP server application.  There are many client applications
  23. assigned to a single client ns node, and many server applications
  24. assigned to a single server ns node.
  25. In order to simulate different RTTs, bottleneck links, and/or loss
  26. rates for each connection, PackMime-HTTP is often used in conjunction
  27. with DelayBox (see Chapter ref{chap:delaybox}).  DelayBox is a module
  28. developed at UNC-Chapel Hill for delaying and/or dropping packets in a
  29. flow according to a given distribution.  See Section ref{sec:pm-db} for
  30. more information on using PackMime-HTTP and DelayBox together.
  31. The PackMime HTTP traffic model is described in detail in the following paper:
  32. J. Cao, W.S. Cleveland, Y. Gao, K. Jeffay, F.D. Smith, and M.C. Weigle
  33. , ``Stochastic Models for Generating Synthetic HTTP Source Traffic'',
  34. emph{Proceedings of IEEE INFOCOM}, Hong Kong, March 2004.
  35. section{Implementation Details}
  36. PackMimeHTTP is an ns object that drives the generation of HTTP
  37. traffic. Each PackMimeHTTP object controls the operation of two types
  38. of Applications, a PackMimeHTTP server Application and a PackMimeHTTP
  39. client Application. Each of these Applications is connected to a TCP
  40. Agent (Full-TCP).   {bf Note:} PackMime-HTTP only supports Full-TCP
  41. agents. 
  42. begin{figure}
  43. centering
  44. includegraphics[scale=0.5, angle=270, clip]{packmime.eps}
  45. label{fig-pm}
  46. caption{PackMimeHTTP Architecture. Each PackMimeHTTP object controls
  47. a server and a client cloud. Each cloud can represent multiple client
  48. or server Applications. Each Application represents either a single
  49. web server or a single web client.} 
  50. end{figure}  
  51. Each web server or web client cloud is represented by a single ns node
  52. that can produce and consume multiple HTTP connections at a time
  53. (Figure ref{fig-pm}). For each HTTP connection, PackMimeHTTP creates (or
  54. allocates from the inactive pool, as described below) server and
  55. client Applications and their associated TCP Agents. After setting up
  56. and starting each connection, PackMimeHTTP sets a timer to expire when
  57. the next new connection should begin. The time between new connections
  58. is governed by the connection rate parameter supplied by the user. New
  59. connections are started according to the connection arrival times
  60. without regard to the completion of previous requests, but a new
  61. request between the same client and server pair (as with HTTP 1.1)
  62. begins only after the previous request-response pair has been
  63. completed. 
  64. PackMimeHTTP handles the re-use of Applications and Agents that have
  65. completed their data transfer. There are 5 pools used to maintain
  66. Applications and Agents -- one pool for inactive TCP Agents and one
  67. pool each for active and inactive client and server Applications. The
  68. pools for active Applications ensure that all active Applications are
  69. destroyed when the simulation is finished. Active TCP Agents do not
  70. need to be placed in a pool because each active Application contains a
  71. pointer to its associated TCP Agent. New objects are only created when
  72. there are no Agents or Applications available in the inactive pools. 
  73. subsection{PackMimeHTTP Client Application}
  74. Each PackMimeHTTP client controls the HTTP request sizes that are
  75. transferred. Each PackMimeHTTP client takes the following steps: 
  76. begin{itemize}
  77. item{if the connection is persistent and consists of more than one
  78.   request, then the client samples all request sizes, response sizes,
  79.   and inter-request times for the connection}
  80. item{if the connection only consists of one request, then the client
  81.   samples the request size and the response size}
  82. item{send the first HTTP request to the server}
  83. item{listen for the HTTP response}
  84. item{when the entire HTTP response has been received, the client sets
  85. a timer to expire when the next request should be made, if applicable}
  86. item{when the timer expires, the next HTTP request is sent, and the
  87. above process is repeated until all requests have been completed}
  88. end{itemize}
  89. subsection{PackMimeHTTP Server Application}
  90. Each web server controls the response sizes that are transferred. The
  91. server is started by when a new TCP connection is started. Each
  92. PackMimeHTTP client takes the following steps: 
  93. begin{itemize}
  94. item{listen for an HTTP request from the associated client}
  95. item{when the entire request arrives, the server samples the server
  96. delay time from the server delay distribution} 
  97. item{set a timer to expire when the server delay has passed}
  98. item{when the timer expires, the server sends response (the size of
  99.   which was sampled by the client and passed to the server)}
  100. item{this process is repeated until the requests are exhausted -- the
  101. server is told how many requests will be sent in the connection} 
  102. item{send a FIN to close the connection}
  103. end{itemize}
  104. section{PackMimeHTTP Random Variables}
  105. This implementation of PackMimeHTTP provides several ns RandomVariable
  106. objects for specifying distributions of PackMimeHTTP connection
  107. variables. The implementations were taken from source code provided by
  108. Bell Labs and modified to fit into the ns RandomVariable
  109. framework. This allows PackMimeHTTP connection variables to be
  110. specified by any type of ns RandomVariable, which now include
  111. PackMimeHTTP-specific random variables. If no RandomVariables are
  112. specified in the TCL script, PackMimeHTTP will set these
  113. automatically.  
  114. The PackMimeHTTP-specific random variable syntax for TCL scripts is as
  115. follows:  
  116. begin{itemize}
  117. item{{tt $ns [new RandomVariable/PackMimeHTTPFlowArrive <rate>]},
  118. where {tt rate} is the specified PackMimeHTTP connection rate (number  
  119. of new connections per second)}
  120. item{{tt $ns [new RandomVariable/PackMimeHTTPReqSize <rate>]},
  121. where {tt rate} is the specified PackMimeHTTP connection rate} 
  122. item{{tt $ns [new RandomVariable/PackMimeHTTPRspSize <rate>]},
  123. where {tt rate} is the specified PackMimeHTTP connection rate}
  124. item{{tt $ns [new RandomVariable/PackMimeHTTPPersistRspSize]}}
  125. item{{tt $ns [new RandomVariable/PackMimeHTTPPersistent
  126.     <probability>]},
  127. where {tt probability} is the probability that the connection is
  128.     persistent} 
  129. item{{tt $ns [new RandomVariable/PackMimeHTTPNumPages <probability>
  130. <shape> <scale>]}, where {tt probability} is the probability that
  131.   there is a single page in the connection and {tt shape} and {tt
  132.     scale} are parameters to the Weibull distribution to determine the
  133. number of pages in the connection.}
  134. item{{tt $ns [new RandomVariable/PackMimeHTTPSingleObjPages
  135.       <probability>]}, where {tt probability} is the probability that
  136.       there is a single object on the current page.}
  137. item{{tt $ns [new RandomVariable/PackMimeHTTPObjsPerPage <shape>
  138.       <scale>]}, where {tt shape} and {tt scale} are parameters to
  139.       the Gamma distribution to determine the number of objects on a
  140.       single page.}
  141. item{{tt $ns [new RandomVariable/PackMimeHTTPTimeBtwnObjs]}}
  142. item{{tt $ns [new RandomVariable/PackMimeHTTPTimeBtwnPages]}}
  143. item{{tt $ns [new RandomVariable/PackMimeHTTPServerDelay <shape>
  144.       <scale>]}, where {tt shape} and {tt scale} are paramters to
  145.       the Weibull distribution to determine server delay.}
  146. item{{tt $ns [RandomVariable/PackMimeHTTPXmit <rate> <type>]}, where
  147. {tt type} is 0 for client-side delays and 1 for
  148. server-side delays.  textbf{Note:} This random variable
  149. is only used in conjunction with DelayBox.  It returns 1/2 of the
  150. actual delay because it is meant to be used with 2 DelayBox nodes,
  151. each of which should delay the packets for 1/2 of the actual delay.} 
  152. end{itemize}
  153. section{Use of DelayBox with PackMime-HTTP}
  154. label{sec:pm-db}
  155. begin{figure}
  156. centering
  157. includegraphics[scale=0.75,angle=270, clip]{packmime-delaybox.eps}
  158. label{fig-pmdb}
  159. caption{Example Topology Using PackMimeHTTP and DelayBox. The cloud
  160.   of web clients is a single ns node, and the cloud of web servers is
  161.   a single ns node. Each of the DelayBox nodes is a single ns node.} 
  162. end{figure}  
  163. PackMimeHTTP uses ns to model the TCP-level interaction between web
  164. clients and servers on the simulated link. To simulate network-level
  165. effects of HTTP transfer through the clouds, use DelayBox (see
  166. ref{chap:delaybox}). DelayBox is an ns analog to dummynet, often used
  167. in network testbeds to delay and drop packets. The delay times model
  168. the propagation and queuing delay incurred from the source to the edge
  169. of the cloud (or edge of the cloud to destination). Since all HTTP
  170. connections in PackMimeHTTP take place between only two ns nodes,
  171. there must be an ns object to delay packets in each flow, rather
  172. than just having a static delay on the link between the two
  173. nodes. DelayBox also models bottleneck links and packet loss on an
  174. individual connection basis. Two DelayBox nodes are used as shown in
  175. Figure ref{fig-pmdb}. One node is placed in front of the web client
  176. cloud ns node to handle client-side delays, loss, and bottleneck
  177. links. The other DelayBox node is placed in front of the web server
  178. cloud ns node to handle the server-side delays, loss, and bottleneck
  179. links.
  180. section{Example}
  181. More examples (including those that demonstrate the use of DelayBox
  182. with PackMime) are available in the {tt tcl/ex/packmime/} directory of the
  183. ns source code.  The validation script {tt test-suite-packmime.tcl}
  184. is in {tt tcl/test/} and can be run with the command {tt
  185. test-all-packmime} from that directory.
  186. textbf{Note:}  The only PackMime-HTTP parameters that emph{must} be set are
  187.        {tt rate}, {tt client}, {tt server}, {tt flow_arrive}, {tt
  188.        req_size}, and {tt rsp_size}.  The example below shows the
  189.        minimal parameters that need to be set, but other parameters
  190.        can be set to change the default behavior (see ``Commands at a
  191.        Glance'').  
  192. begin{verbatim}
  193. # test-packmime.tcl
  194. # useful constants
  195. set CLIENT 0
  196. set SERVER 1
  197. remove-all-packet-headers;             # removes all packet headers
  198. add-packet-header IP TCP;              # adds TCP/IP headers
  199. set ns [new Simulator];                # instantiate the Simulator
  200. $ns use-scheduler Heap;                # use the Heap scheduler
  201. # SETUP TOPOLOGY
  202. # create nodes
  203. set n(0) [$ns node]
  204. set n(1) [$ns node]
  205. # create link
  206. $ns duplex-link $n(0) $n(1) 10Mb 0ms DropTail
  207. # SETUP PACKMIME
  208. set rate 15
  209. set pm [new PackMimeHTTP]
  210. $pm set-client $n(0);                  # name $n(0) as client
  211. $pm set-server $n(1);                  # name $n(1) as server
  212. $pm set-rate $rate;                    # new connections per second
  213. $pm set-http-1.1;                      # use HTTP/1.1
  214. # SETUP PACKMIME RANDOM VARIABLES
  215. global defaultRNG
  216. # create RNGs (appropriate RNG seeds are assigned automatically)
  217. set flowRNG [new RNG]
  218. set reqsizeRNG [new RNG]
  219. set rspsizeRNG [new RNG]
  220. # create RandomVariables
  221. set flow_arrive [new RandomVariable/PackMimeHTTPFlowArrive $rate]
  222. set req_size [new RandomVariable/PackMimeHTTPFileSize $rate $CLIENT]
  223. set rsp_size [new RandomVariable/PackMimeHTTPFileSize $rate $SERVER]
  224. # assign RNGs to RandomVariables
  225. $flow_arrive use-rng $flowRNG
  226. $req_size use-rng $reqsizeRNG
  227. $rsp_size use-rng $rspsizeRNG
  228. # set PackMime variables
  229. $pm set-flow_arrive $flow_arrive
  230. $pm set-req_size $req_size
  231. $pm set-rsp_size $rsp_size
  232. # record HTTP statistics
  233. $pm set-outfile "data-test-packmime.dat"
  234. $ns at 0.0 "$pm start"
  235. $ns at 30.0 "$pm stop"
  236. $ns run
  237. end{verbatim}
  238. section{Commands at a Glance}
  239. The following commands on the PackMimeHTTP class can be accessed from OTcl:
  240. {tt [new PackMimeHTTP]}\
  241. Creates a new PackMimeHTTP object.
  242. {tt $packmime start}\
  243. Start generating connections
  244. {tt $packmime stop}\
  245. Stop generating new connections
  246. {tt $packmime set-client <node>}\
  247. Associates the node with the PackMimeHTTP client cloud 
  248. {tt $packmime set-server <node>}\
  249. Associates the node with the PackMimeHTTP server cloud 
  250. {tt $packmime set-rate <float>}\
  251. Set the average number of new connections started per second 
  252. {tt $packmime set-req_size <RandomVariable>}\
  253. Set the HTTP request size distribution 
  254. {tt $packmime set-rsp_size <RandomVariable>}\
  255. Set the HTTP response size distribution 
  256. {tt $packmime set-flow_arrive <RandomVariable>}\
  257. Set the time between two consecutive connections starting
  258. {tt $packmime set-server_delay <RandomVariable>}\
  259. Set the web server delay for fetching pages 
  260. {tt $packmime set-run <int>}\
  261. Set the run number so that the RNGs used for the random variables will
  262. use the same substream (see Chapter ref{chap:math} on RNG for more details).
  263. {tt $packmime get-pairs}\
  264. Return the number of completed HTTP request-response pairs.  See 
  265. {tt tcl/ex/packmime/pm-end-pairs.tcl} for an example of using
  266. {tt get-pairs} to end the simulation after a certain number of
  267. pairs have completed.
  268. {tt $packmime set-TCP <protocol>}\
  269. Sets the TCP type (Reno, Newreno, or Sack) for all connections in the
  270. client and server clouds - Reno is the default
  271. {bf HTTP/1.1-Specific Commands}
  272. {tt $packmime set-http-1.1}\
  273. Use HTTP/1.1 distributions for persistent connections instead of HTTP/1.0.
  274. {tt $packmime no-pm-persistent-reqsz}\
  275. By default, PackMime-HTTP sets all request sizes in a persistent
  276. connection to be the same. This option turns that behavior off and
  277. samples a new request size from the request size distribution for each
  278. request in a persistent connection.
  279. {tt $packmime no-pm-persistent-rspsz}\
  280. By default, PackMime-HTTP uses an algorithm (see {tt
  281.   PackMimeHTTPPersistRspSizeRandomVariable::value()} in {tt
  282.   packmime_ranvar.h} for details) for setting the response sizes in a
  283. persistent connection.  This option turns that behavior off and
  284. samples a new response size from the response size distribution for
  285. each response in a persistent connection.
  286. {tt $packmime set-prob_persistent <RandomVariable>}\
  287. Set the probability that the connection is persistent
  288. {tt $packmime set-num_pages <RandomVariable>}\
  289. Set the number of pages per connection
  290. {tt $packmime set-prob_single_obj <RandomVariable>}\
  291. Set the probability that the page contains a single object
  292. {tt $packmime set-objs_per_page <RandomVariable>}\
  293. Set the number of objects per page
  294. {tt $packmime set-time_btwn_pages <RandomVariable>}\
  295. Set the time between page requests (emph{i.e.}, think time)
  296. {tt $packmime set-time_btwn_objs <RandomVariable>}\
  297. Set the time between object requests
  298. {bf Output-Specific Commands}
  299. {tt $packmime active-connections}\
  300. Output the current number of active HTTP connections to standard error 
  301. {tt $packmime total-connections}\
  302. Output the total number of completed HTTP connections to standard error
  303. {tt $packmime set-warmup <int>}\
  304. Sets what time output should start.  Only used with {tt set outfile}.
  305. {tt $packmime set-outfile <filename>}\
  306. Output the following fields (one line per HTTP request-reponse pair)
  307. to {tt filename}:
  308. begin{itemize}
  309. item{time HTTP response completed}
  310. item{HTTP request size (bytes)}
  311. item{HTTP response size (bytes)}
  312. item{HTTP response time (ms) -- time between client sending HTTP
  313. request and client receiving complete HTTP response} 
  314. item{source node and port identifier}
  315. item{number of active connections at the time this HTTP
  316. request-response pair completed}
  317. end{itemize}
  318. {tt $packmime set-filesz-outfile <filename>}\
  319. Right after sending a response, output the following fields (one line
  320. per HTTP request-reponse pair) to {tt filename}: 
  321. begin{itemize}
  322. item{time HTTP response sent}
  323. item{HTTP request size (bytes)}
  324. item{HTTP response size (bytes)}
  325. item{server node and port address}
  326. end{itemize}
  327. {tt $packmime set-samples-outfile <filename>}\
  328. Right before sending a request, output the following fields (one line
  329. per HTTP request-reponse pair) to {tt filename}: 
  330. begin{itemize}
  331. item{time HTTP request sent}
  332. item{HTTP request size (bytes)}
  333. item{HTTP response size (bytes)}
  334. item{server node and port address}
  335. end{itemize}
  336. {tt $packmime set-debug <int>}\
  337. Set the debugging level:
  338. begin{itemize}
  339. item{1: Output the total number of connections created at the end of
  340. the simulation}
  341. item{2: Level 1 + \
  342. output creation/management of TCP agents and applications\
  343. output on start of new connection\
  344. number of bytes sent by the client and expected response size\
  345. number of bytes sent by server}
  346. item{3: Level 2 + \
  347. output when TCP agents and applications are moved to the pool}
  348. item{4: Level 3 + \
  349. output number of bytes received each time client or server receive a packet}
  350. end{itemize}