NS2 Agents

advertisement
NS2 Agents
Leo Bhebhe
Contents
• Introduction
• Application Composition
• Attaching Transport Agents to Nodes
• UDP Agent
• TCP Agents
• SCTP Agents
• Agent SRM
Introduction
• In real-world systems, applications typically access network services
through an applications programming interface (API).
• The most popular of these APIs is known as sockets.
•
In ns, we mimic the behavior of the sockets API through a set of welldefined API functions.
• These functions are then mapped to the appropriate internal agent
functions (e.g., a call to send(numBytes) causes TCP to increment its send
buffer by a corresponding number of bytes)
• Applications sit on top of transport agents in ns.
• Running Running, e.g. an TCP simulation requires creating and configuring
the agent, attaching an application-level data source (a traffic generator),
and starting the agent and the traffic generator.
• There are two basic types of applications:
• Traffic generators and
• Simulated applications.
Example of Application Composition
Traffic generators
Application/
Traffic/
Exponential
API
Agent/UDP
Simulated applications
Application/FTP
API
Agent/TCP/FullTcp
The diagram illustrates how agents and applications are
hooked together and communicate with one another via
the API
Attaching Transport Agents to Nodes
set src [new Agent/TCP/FullTcp]
set sink [new Agent/TCP/FullTcp]
$ns_ attach-agent $node_(s1) $src
$ns_ attach-agent $node_(k1) $sink
$ns_ connect $src $sink
set udp0 [new Agent/UDP]
$ns attach-agent $n0 $udp0
set cbr0 [new Application/Traffic/CBR]
$cbr0 attach-agent $udp0
$udp0 set packetSize_ 536 ;
#(max=1000)
set null0 [new Agent/Null]
$ns attach-agent $n1 $null0
$ns connect $udp0 $null0
UDP Agent
• A UDP agent accepts data in variable size chunks from an application,
and segments the data if needed.
• UDP packets also contain a monotonically increasing sequence number
and an RTP timestamp.
• The default maximum segment size (MSS) for UDP agents is 1000 byte:
• Agent/UDP set packetSize_ 1000 ;# max segment size
Create src, dest. nodes & a link
Create agents & starting traffic generator
•set ns [new Simulator]
•set n0 [$ns node]
•set n1 [$ns node]
•$ns duplex-link $n0 $n1 5Mb
2ms DropTail
•set udp0 [new Agent/UDP]
•$ns attach-agent $n0 $udp0
•set cbr0 [new Application/Traffic/CBR]
•$cbr0 attach-agent $udp0
•$udp0 set packetSize_ 536 ;# set MSS to 536
bytes
•set null0 [new Agent/Null]
•$ns attach-agent $n1 $null0
•$ns connect $udp0 $null0
•$ns at 1.0 "$cbr0 start"
TCP Agents (1/2)
• The TCP agent does not generate any application data on its own
• Instead, the simulation user can connect any trafc generation module to the
TCP agent to generate data.
• Two applications are commonly used for TCP: FTP and Telnet.
TCP Agents (2/2)
The one-way TCP sending agents currently supported are:
Agent/TCP - a “tahoe” TCP sender
Agent/TCP/Reno - a “Reno” TCP sender
Agent/TCP/Newreno - Reno with a modication
Agent/TCP/Sack1 - TCP with selective repeat (follows RFC2018)
Agent/TCP/Vegas - TCP Vegas
Agent/TCP/Fack - Reno TCP with .forward acknowledgment.
The one-way TCP receiving agents currently supported are:
•
•
•
•
•
•
Agent/TCPSink - TCP sink with one ACK per packet
Agent/TCPSink/DelAck - TCP sink with congurable delay per ACK
Agent/TCPSink/Sack1 - selective ACK sink (follows RFC2018)
Agent/TCPSink/Sack1/DelAck - Sack1 with DelAck
The two-way experimental sender currently supports only a Reno form of
TCP:
• Agent/TCP/FullTcp
• Note: Still under development
•
•
•
•
One Way TCP Senders (1/3)
What can they do
• Attempt to capture the the essence of TCP congestion and error control
behaviours
• Segment number and ACK computations entirely in the packet units
What they can’t do
• Can’t mimic the real-world TCP implementations
• They do not have a dynamic window advertisement
• There’s no SYN/FIN connection establishement/teardown
• No data is ever transferred (e.g. no checksums or urgent data)
One Way TCP Senders (2/3)
The Base TCP Sender (Tahoe TCP)
• Performs congestion control
• Round-trip-time estimation
• RTO Timeout Selection
Creating the Agent
• set ns [new Simulator] ;# preamble initialization
• set node1 [$ns node] ;# agent to reside on this node
• set node2 [$ns node] ;# agent to reside on this node
• set tcp1 [$ns create-connection TCP $node1 TCPSink
$node2 42]
• $tcp set window_ 50 ;# configure the TCP agent
• set ftp1 [new Application/FTP]
• $ftp1 attach-agent $tcp1
• $ns at 0.0 "$ftp start“
One Way TCP Senders (3/3)
• Reno TCP: The Reno TCP agent is very similar to the Tahoe TCP agent,
except it also includes fast recovery, where the current congestion window
is .inflated. by the number of duplicate ACKs the TCP sender has received
before receiving a new ACK.
• The Reno TCP agent does not return to slow-start during a fast retransmit.
Rather, it reduces sets the congestion window to half the current window
and resets ssthresh_ to match this value.
• Newreno TCP This agent is based on the Reno TCP agent, but which
modifies the action taken when receiving new ACKS.
• In order to exit fast recovery, the sender must receive an ACK for the
highest sequence number sent. Thus, new partial ACKs. (those which
represent new ACKs but do not represent an ACK for all outstanding data)
do not deflate the window (and possibly lead to a stall, characteristic of
Reno).
• Vegas TCP This agent implements “Vegas” TCP. It was contributed by Ted
Kuo.
• Sack TCP This agent implements selective repeat, based on selective
ACKs provided by the receiver. It follows the ACK scheme developed with
Matt Mathis and Jamshid Mahdavi.
• Fack TCP This agent implements “forward ACK” TCP, a modication of Sack
One Way TCP Receiver (Sinks)
• The base TCP sink object (Agent/TCPSink ) is responsible for
returning ACKs to a peer TCP source object.
• It generates one ACK per packet received. The size of the ACKs
may be configured.
• The creation and configuration of the TCP sink object is
generally performed automatically when creating a connection.
Configuration parameters
Base TCP Sink
• Agent/TCPSink set packetSize_ 40
Delayed-ACK TCP Sink
• Agent/TCPSink/Delack set interval_ 100ms
SACK TCP Sink
• Agent/TCPSink set maxSacksBlocks_ 3
Two Way TCP Senders (1/2)
The Agent/TCP/FullTcp
• Connections may be establised and town down (SYN/FIN packets are
exchanged)
• Bidirectional data transfer is supported
• Sequence numbers are in bytes rather than packets
Creating the Agent
•
•
•
•
•
•
•
•
•
•
set src [new Agent/TCP/FullTcp] ;# create agent
set sink [new Agent/TCP/FullTcp] ;# create agent
$ns_ attach-agent $node_(s1) $src ;# bind src to node
$ns_ attach-agent $node_(k1) $sink ;# bind sink to node
$src set fid_ 0 ;# set flow ID field
$sink set fid_ 0 ;# set flow ID field
$ns_ connect $src $sink ;# active connection src to sink
# set up TCP-level connections
$sink listen ;# will figure out who its peer is
$src set window_ 100;
The creation of the FullTcp agent is similar to the other agents, but the sink is placed in
a listening state by the listen method.
Two Way TCP Senders (2/2)
The Agent/TCP/BayFullTcp: Different implementation of two-way TCP has
been ported into ns from Kathy Nicholes/Van Jacobson's group. It is
called
The basic difference between BayFullTcp and FullTcp (the two-way tcp
version already present in ns) are as follows:
•
BayTcp supports a client-server application model while FullTcp makes
no assumption about its application layer.
•
The tcp-application interface is different for both;
•
FullTcp supports partial ack (BayTcp doesn't).
•
FullTcp supports different flavors of tcp (tahoe, reno etc) which is not
the case for baytcp.
•
Both implementations have different set of API's .
There might be other finer differences between the two as well. One of our
future plans is to redefine the APIs to allow fulltcp to use baytcp's clientserver model.
SCTP Agents
• SCTP agents were developed for ns by the Protocol Engineering Lab at the
University of Delaware.
• The SCTP agents are all two-way agents, which means they are symmetric
in the sense that they represent both a sender and receiver.
• However, bi-directional data has not yet been implemented. Each instance
of an SCTP agent is either a sender or receiver
• The SCTP agents currently supported are:
•
•
•
•
•
Agent/SCTP - RFC2960
Agent/SCTP/Newreno - includes Fast Recovery
Agent/SCTP/HbAfterRto - experimental extension (HEARTBEAT after RTO)
Agent/SCTP/MultipleFastRtx - experimental extension (UD PEL's Multiple Fast
Retransmit algorithm)
Agent/SCTP/Timestamp - experimental extension (TIMESTAMP chunk)
• The SCTP agents are implemented in les matching the regular expression
~ns/sctp/sctp*.{cc, h}.
SCTP Agents
The base SCTP Agent
Supports features of RFC2960
Does not yet support
•
Normal Establishment of an Association (rudimentary
handshake)
•
Transmission of DATA Chunks
•
Acknowledgment on Reception of DATA Chunks
•
Management Retransmission Timer
•
Multihomed SCTP Endpoints
•
Stream Identier and Stream Sequence Number
•
Ordered and Unordered Delivery
•
Report Gaps in Received DATA TSNs
•
SCTP Slow-Start and Congestion Avoidance
•
Endpoint Failure Detection
•
Path Failure Detection
•
Path Heartbeat (without upper layer control)
SCTP Agents
The base SCTP Agent
Configuration
Agent/SCTP set pathMaxRetrans_ 5 ;# Changes the class variable
$sctp set pathMaxRetrans_ 5 ;# Changes pathMaxRetrans_ for the $sctp object only
SCTP Agents Extensions
Newreno SCTP
• Similar to the base SCTP agent,
• Introduces Fast Recovery mechanism to avoid multiple cwnd
reductions in a single round-trip time.
• Restricts the cwnd from being increased during Fast Recovery
HbAfterRto SCTP
• Better RTT estimatimation
• A heartbeat is sent immediately to the destination on which a
timeout occurred.
MultipleFastRtx SCTP
• Attempts to minimize the number of timeouts which occur
• Algorithm allows the same TSN to be Fast Retransmitted
several times if needed without waiting for thr RTO
Timestamp SCTP
• Introduces timestamps into each packet, thus allowing a sender
to disambiguate original transmissions from retransmissions.
• Retransmissions on the alternate path can be used to update
the RTT estimate and keep the RTO value more accurate.
• With timestamps, the sender has more samples for updating
the RTT estimate of alternate destination(s)
Agent/SRM
• SRM agent performs the following functions
•
•
•
Packet handling,
Loss recovery, and
Session message activity.
• Creating the Agent
•
•
•
•
set ns [new Simulator] ;# preamble initialization
$ns enableMcast
set node [$ns node] ;# agent to reside on this node
set group [$ns allocaddr] ;# multicast group for this agent
•
•
•
set srm [new Agent/SRM]
$srm set dst_ $group ;# configure the SRM agent
$ns attach-agent $node $srm
$srm set fid_ 1 ;# optional configuration
$srm log [open srmStats.tr w] ;# log statistics in this file
$srm trace [open srmEvents.tr w] ;# trace events for this agent
• The key steps in configuring a virgin SRM agent are to assign its multicast group,
and attach it to a node.
•
•
•
THANK YOU!
Download