1. Traffic Generation Basics
  2. Replay
  3. Harpoon
  4. Ping
  5. DNS
  6. HTTP
  7. FTP
  8. SSH
  9. IRC
  10. Constant Bit Rate
  11. Streaming Video

Traffic Generation Basics

Source and Destination Address Pools

For all traffic generators the source and destination addresses can be dynamically picked from fake ranges on each node. These fake ranges are specified in the routing? agent for the experiment. If no fake range is specified, the first IP address for the node is used.

Connection Spacing

Most traffic agents have a 'think' variable. This function will determine the time the agent will sleep before starting another network connection. Depending on the length of each connection, either specified by a data size or a time length, connections may or may not overlap. This is determined by the variables specified.

Replay

nowin.png

The replay agent responds to object type 'REPLAY'.

NODES(g)set the nodes that will inject traffic from a dump file
filethe path to the dump file on the node
multthe multiplier used by the injector to speed up or slow down replay relative to the original timestamps

To use replay, a tcpdump file must be loaded on each node that will become the replay agent. This can be done in several ways including disk images or tarfiles. Once the file is present, the injector at each node will extract packets from the dump file based on their specified fake address ranges? or just their local address and inject them into the network. It will also install a filter to drop all traffic destined for these addresses so that the node does not reply with ICMP error messages.

An injector binary compiled under mingw does exist for the Windows image, however, there is no current firewall control to drop incoming traffic from the other injectors.

Harpoon

nowin.png

The harpoon agent responds to object type 'HARPOON'.

NODES(g)set the nodes that will become client and servers
cesssionsset the client sessions variable list
sesssionsset the server sessions variable list
portset the port used by the harpoon connections
thinka function used to write the harpoon interconnection times list
sizesa function used to write the harpoon file sizes list

The harpoon agent groups sets up a number of nodes that use harpoon to generate TCP traffic. Each node is a client and a server using port as the server port. Harpoon uses configuration files to determine interconnection times and file sizes. These files are written dynamically using the functions provided via the think and sizes variables. Harpoon also tries to keep a certain number of sessions open on each client and on each server. These values are controlled via the csesssions and ssessions variables. These two variables can be a comma separated list of numbers. Every 60 seconds, harpoon will move to the next value in the array.

ToDo:

  • destination port diversity
  • separate client and server processes so nodes can be only one or the other

Example Script

mytcp = scripts.Agent('HARPOON', 'h1')
mytcp.Set({'NODES':     'net1 net2 net3',
           'csessions': '30',
           'ssessions': '4',
           'port':      '9090',
           'think':     'expo(0.9, 1, 40)',
           'sizes':     'pareto(1.4, 300, 500000)'})
mytcp.Start()

Ping

Clientallon.png
Serverallon.png

The ping agent responds to object type 'PING'.

NODES(g)set the clients that are used by the agent group
servers(g)set the destinations for the ping requests
thinka function to determine inter request times
sizesnot currently used

The ping agent will periodically send an ICMP echo request to a set of servers, incrementing the ID as it goes.

Example Script

myping = scripts.Agent('PING', 'ping1')
myping.Set({'NODES':   'net1 net3 net4',
           'servers':  'net2',
           'think':    'expo(0.8, 2, 8)'})
myping.Start()

DNS

Clientnowin.png
Servernowin.png

The DNS agent responds to the object type 'DNS'.

NODES(g)set the clients that are used by the agent group
servers(g)set the destinations for the DNS requests
badrequestsa value of 0.0 to 1.0 that determine the change of issues a request for an unknown name
thinka function to determine inter request times
sizesnot currently used

The DNS uses the local dig binary to make DNS requests to a set of BIND servers. It requests a single known address and a single unknown address to create valid and NXDOMAIN replies.

Example Script

mydns = scripts.Agent('DNS', 'dns1')
mydns.Set({'NODES':       'net2',
           'servers':     'net1 net3',
           'badrequests': '0.01',
           'think':       'pareto(1.2, 1.2, 10)'})
mydns.Start()

HTTP

Clientallon.png
Servernowin.png

The HTTP agent responds to the object type 'HTTP'.

NODES(g)set the clients that are used by the agent group
servers(g)set the location for the apache web servers
thinka function to determine inter connection times
sizesa function to determine the sizes of the requested files

The HTTP agent uses the local wget binary to make HTTP requests to a set of apache servers. The requested file is a script that allows the requester to specify the size of the returned file.

Example Script

myweb = scripts.Agent('HTTP', 'http1')
myweb.Set({'NODES':'net1 net2', 
           'servers':'net3', 
           'think':'minmax(0.4,0.8)', 
           'sizes':'pareto(1.4,2000)'})
myweb.Start()

FTP

Clientallon.png
Servernowin.png

The FTP agent responds to the object type 'FTP'.

NODES(g)set the clients that are used by the agent group
servers(g)set the destinations for the FTP requests
thinka function to determine inter connection times
sizesa function to determine the sizes of the requested files

The FTP agent uses the local wget binary to make FTP requests to a set of vsftpd servers. The vsftpd binary is modified so that requests for a number (digits only, no characters) return a generated file of that size.

Example Script

myftp = scripts.Agent('FTP', 'ftp1')
myftp.Set({'NODES':'net1 net2', 
           'servers':'net3', 
           'think':'minmax(0.4,2)', 
           'sizes':'pareto(1.4,5000)'})
myftp.Start()

SSH

Clientallon.png
Serverallon.png

The SSH agent responds to the object type 'SSH'.

NODES(g)set the clients that are used by the agent group
servers(g)set the destinations for the SSH sessions
thinka function to determine how long before the agent spawns another client
durationa function to determine the length of each ssh session
typinga function to determine the inter-key delay times for each command
msgtimea function to determine time before starting another command
sizesa function to determine the amount of data that is returned for each command

The SSH agent utilizes the local OpenSSH client and daemon to open a connection from a client to a server. The agent will launch clients based on a expect script. This client will 'type' commands across the connection, each command requests a certain amount of data be returned. Once its duration is met, the client will disconnect.

Example Script

myssh.Set({'NODES':    'net1 net4',
           'servers':  'net3',
           'think':    'minmax(350,400)',
           'duration': 'minmax(300,300)',
           'typing':   'minmax(0.1,0.2)',
           'msgtime':  'pareto(2, 2, 20)',
           'sizes':    'expo(0.9, 100, 16384)'})
myssh.Start()

IRC

Clientallon.png
Servernowin.png

The IRC agent responds to the object type 'IRC'.

NODES(g)set the clients for the agent group
servers(g)set the nodes that will run an IRC daemon
thinka function to determine how long before the agent spawns another client
durationa function to determine how long a client will connect for
msgtimesa function to determine the amount of time a clients waiting before sending a message
sizesa function to determine the amount of data that is sent in a message

The IRC agent utilizes a python based IRC client and IRCd hybrid to create an IRC network. The servers are current single servers and do not connect to each other. The agent will launch clients that connect to one of the servers. This client will receive messages normally and periodically send messages of its own.

Example Script

myirc = scripts.Agent('IRC', 'irc1')
myirc.Set({'NODES':    'net1 net4',
           'servers':  'net3',
           'think':    'minmax(350,400)',
           'duration': 'minmax(300,300)',
           'msgtime':  'pareto(2, 2, 20)',
           'sizes':    'expo(0.9, 100, 16384)'})
myirc.Start()

Constant Bit Rate

Clientallon.png
Serverallon.png

The constant bit rate agent responds to the object type 'CBR'.

NODES(g)set the clients for the agent group
servers(g)set the nodes that will run a sink
thinka function to determine how long before the agent spawns another client
pktintervalnumber of microseconds between packets
pktcountnumber of packets to send in a connection
pktlengthsize of each packet

The constant bit rate client does as its name says, it sends a constant stream of UDP packets from one node to another.

Example Script

mycbr = scripts.Agent('CBR', 'data1')
mycbr.Set({'NODES':       'net1 net3 net4',
           'servers':     'net2',
           'think':       'minmax(240,250)',
           'pktinterval': '20000',
           'pktcount':    '5000',
           'pktlength':   '100'})
mycbr.Start()

Streaming Video

Clientallon.png
Serverallon.png

The streaming video agent responds to the object type 'VIDEO'. As of version 1.2.1, you must also extract the tarfile /share/seer/seer-videodata.tgz onto any machine that you want to be a video server.

NODES(g)set the clients for the agent group
servers(g)set the nodes that will run a video server
thinka function to determine how long before the agent spawns another client
fileone of (run1100, run660, run370) which represents the 'average' bit rate of the file
timea function to determine how long the requests file will stream for
typeone of (rtp, udp, tcp) which represents the type of transmission to use

The video client makes use of the Live555 video library to run a MPEG2 TS video server and clients. There are three short video clips that are run in loops to create the streamed data.

Example Script

myvid = scripts.Agent('VIDEO', 'stream1')
myvid.Set({'NODES':    'net2 net3 net4',
           'servers':  'net1',
           'think':    'minmax(100,150)',
           'file':     'run1100',
           'time':     'minmax(70,80)',
           'type':     'rtp'})
myvid.Start()

Attachments