Agents - PowerPoint PPT Presentation

1 / 46
About This Presentation
Title:

Agents

Description:

Agents are used in the implementation of protocols at various layers. ... Packet::free(p); Packet*Agent::allocpkt() const. Packet* p = Packet::alloc(); initpkt(p) ... – PowerPoint PPT presentation

Number of Views:22
Avg rating:3.0/5.0
Slides: 47
Provided by: antComm
Category:
Tags: agents | freep

less

Transcript and Presenter's Notes

Title: Agents


1
Agents
  • ???
  • 695430059

2
Outline
  • Introduction
  • Agents
  • UDP agents
  • TCP agents

3
Outline
  • Introduction
  • Agents
  • UDP agents
  • TCP agents

4
Introduction
  • Agents represent endpoints where network-layer
    packets are constructed or consumed.
  • Agents are used in the implementation of
    protocols at various layers.
  • The class Agent has an implementation partly in
    OTcl and partly in C.
  • C implementation is contained in ns/agent.cc
    and ns/agent.h
  • the OTcl support is in ns/tcl/lib/ns-agent.tcl.

5
Outline
  • Introduction
  • Agents
  • UDP agents
  • TCP agents

6
Agent state
  • addr_
  • dst_
  • size_ packet bytes
  • type_ see packet.h
  • fid_ the IP flow identifier (formerly class in
    ns-1)
  • prio_ the IP priority field
  • flags_ packet flags (similar to ns-1)
  • defttl_ default IP ttl value

7
Agent methods
  • Packet allocpkt() allocate new packet and assign
    its fields
  • Packet allocpkt(int) allocate new packet with a
    data payload of n bytes and assign its fields
  • are generally not over-ridden by derived classes
  • void timeout(timeout number) subclass-specific
    time out method
  • void recv(Packet, Handler) receiving agent main
    receive path
  • are intended to be over-ridden by classes
    deriving from Agent

8
  • void Agentrecv(Packet p, Handler)
  • if (app_)
  • app_-gtrecv(hdr_cmnaccess(p)-gtsize())
  • / didn't expect packet (or we're a null
    agent?) /
  • Packetfree(p)
  • PacketAgentallocpkt() const
  • Packet p Packetalloc()
  • initpkt(p)
  • return (p)

9
Protocol Agents
  • TCP a Tahoe TCP sender (cwnd 1 on any loss)
  • TCP/Reno a Reno TCP sender (with fast recovery)
  • TCP/Newreno a modified Reno TCP sender (changes
    fast recovery)
  • TCP/Sack1 a SACK TCP sender
  • TCP/Fack a forward SACK sender TCP
  • TCP/FullTcp a more full-functioned TCP with 2-way
    traffic
  • TCP/Vegas a Vegas TCP sender
  • TCP/Vegas/RBP a Vegas TCP with rate based
    pacing
  • TCP/Vegas/RBP a Reno TCP with rate based pacing

10
Protocol Agents
  • TCP/Asym an experimental Tahoe TCP for asymmetric
    links
  • TCP/Reno/Asym an experimental Reno TCP for
    asymmetric links
  • TCP/Newreno/Asym an experimental Newreno TCP for
    asymmetric links
  • TCPSink a Reno or Tahoe TCP receiver (not used
    for FullTcp)
  • TCPSink/DelAck a TCP delayed-ACK receiver
  • TCPSink/Asym an experimental TCP sink for
    asymmetric links
  • TCPSink/Sack1 a SACK TCP receiver
  • TCPSink/Sack1/DelAck a delayed-ACK SACK TCP
    receiver

11
Protocol Agents
  • UDP a basic UDP agent
  • RTP an RTP sender and receiver
  • RTCP an RTCP sender and receiver
  • LossMonitor a packet sink which checks for losses
  • IVS/Source an IVS source
  • IVS/Receiver an IVS receiver
  • CtrMcast/Encap a centralised multicast
    encapsulator
  • CtrMcast/Decap a centralised multicast
    de-encapsulator

12
Protocol Agents
  • Message a protocol to carry textual messages
  • Message/Prune processes multicast routing prune
    messages
  • SRM an SRM agent with non-adaptive timers
  • SRM/Adaptive an SRM agent with adaptive timers
  • Tap interfaces the simulator to a live network
  • Null a degenerate agent which discards packets
  • rtProto/DV distance-vector routing protocol agent

13
TCPs
SACK RFC2018
Tahoe RFC793
Reno RFC2001
newReno RFC2582
Vegas
14
OTcl Linkage
  • Creating and Manipulating Agents
  • set newtcp new Agent/TCP create new object
    (and C shadow object)
  • newtcp set window_ 20 sets the tcp agents
    window to 20
  • newtcp target dest target is implemented in
    Connector class
  • newtcp set portID_ 1 exists only in OTcl, not
    in C

15
Default Values
  • ns/tcl/lib/ns-default.tcl
  • Agent set fid_ 0
  • Agent set prio_ 0
  • Agent set addr_ 0
  • Agent set dst_ 0
  • Agent set flags_ 0

16
OTcl Methods
  • ns/tcl/lib/ns-agent.tcl.
  • port the agents port identifier
  • dst-port the destinations port identifier
  • attach-source (stype) create and attach a Source
    object to an agent

17
Examples Tcp, TCP Sink Agents
  • Creating the Agent

static class TcpClass public TclClass
public TcpClass() TclClass("Agent/TCP")
TclObject create(int , const
charconst) return (new
TcpAgent()) class_tcp
set tcp new Agent/TCP tcp set fid_ 2 set sink
new Agent/TCPSink ns attach-agent n0 tcp
ns attach-agent n3 sink ns connect tcp
sink set ftp new Application/FTP ftp
attach-agent tcp ns at 1.2 "ftp start"
TcpAgentTcpAgent() Agent(PT_TCP),
rtt_active_(0), bind()
Application/FTP instproc start self
agent send -1
18
TcpSimpleAgent constructor (ns/tcp.cc)
  • TcpAgentTcpAgent() Agent(PT_TCP),
    rtt_active_(0), rtt_seq_(-1),
  • rtx_timer_(this), delsnd_timer_(this)
  • bind("window_", wnd_)
  • bind("windowInit_", wnd_init_)
  • bind("windowOption_", wnd_option_)
  • bind("windowConstant_", wnd_const_)
  • ...
  • bind("off_ip_", off_ip_)
  • bind("off_tcp_", off_tcp_)
  • ...

19
Agent constructor (ns/agent.cc)
  • AgentAgent(int pkttype)
  • addr_(-1), dst_(-1), size_(0), type_(pkttype),
    fid_(-1),
  • prio_(-1), flags_(0)
  • memset(pending_, 0, sizeof(pending_)) / timers
    /
  • // this is really an IP agent, so set up
  • // for generating the appropriate IP fields. . .
  • bind("addr_", (int)addr_)
  • bind("dst_", (int)dst_)
  • bind("fid_", (int)fid_)
  • bind("prio_", (int)prio_)
  • bind("flags_", (int)flags_)
  • ...

20
Starting the Agent
  • Application/FTP instproc start
  • self agent send -1

int Agentcommand(int argc, const charconst
argv) else if (strcmp(argv1, "send") 0)
sendmsg(atoi(argv2)) return
(TCL_OK) //agent.cc
void TcpAgentsendmsg(int nbytes, const char
/flags/) send_much(0, 0, maxburst_)
//tcp.cc
21
Generate packets
  • void TcpAgentoutput(int seqno, int reason)
  • Packet p allocpkt()
  • hdr_tcp tcph (hdr_tcp)p-gtaccess(off_tcp_)
  • double now Schedulerinstance().clock()
  • tcph-gtseqno() seqno
  • tcph-gtts() now
  • tcph-gtreason() reason
  • Connectorsend(p, 0)
  • ...

22
Receiver(sink)
Sender(tcp)
Output()
TcpSinkrecv()
TcpSinkack()
TcpAgentrecv()

output
TcpSinkrecv()

23
Processing Input at Receiver
  • void TcpSinkrecv(Packet pkt, Handler)
  • hdr_tcp th (hdr_tcp)pkt-gtaccess(off_tcp_)
  • acker_-gtupdate(th-gtseqno())
  • ack(pkt)
  • Packetfree(pkt)

24
ack()
  • void TcpSinkack(Packet opkt)
  • Packet npkt allocpkt()
  • hdr_tcp otcp (hdr_tcp)opkt-gtaccess(off_tcp_)
  • hdr_tcp ntcp (hdr_tcp)npkt-gtaccess(off_tcp_)
  • ntcp-gtseqno() acker_-gtSeqno()
  • ntcp-gtts() otcp-gtts()
  • hdr_ip oip (hdr_ip)opkt-gtaccess(off_ip_)
  • hdr_ip nip (hdr_ip)npkt-gtaccess(off_ip_)
  • nip-gtflowid() oip-gtflowid()
  • hdr_flags of (hdr_flags)opkt-gtaccess(off_flag
    s_)
  • hdr_flags nf (hdr_flags)npkt-gtaccess(off_flag
    s_)
  • nf-gtecn_ of-gtecn_
  • acker_-gtappend_ack((hdr_cmn)npkt-gtaccess(off_cmn
    _),
  • ntcp, otcp-gtseqno())
  • send(npkt, 0)

25
Processing Responses at the Sender
  • void TcpAgentrecv(Packet pkt, Handler)
  • hdr_tcp tcph (hdr_tcp)pkt-gtaccess(off_tcp_)
  • hdr_ip iph (hdr_ip)pkt-gtaccess(off_ip_)
  • ...
  • if (((hdr_flags)pkt-gtaccess(off_flags_))-gtecn_)
  • quench(1)
  • if (tcph-gtseqno() gt last_ack_)
  • newack(pkt)
  • opencwnd()
  • else if (tcph-gtseqno() last_ack_)
  • if (dupacks_ NUMDUPACKS)
  • ...
  • Packetfree(pkt)
  • send(0, 0, maxburst_)

26
Creating a New Agent
  • 1./ns/echo/echo.cc echo.h
  • 2.makefile
  • 3.difine any necessary classes and functions
  • 4.link to OTcl

27
Create packet header format
  • struct ECHOHeader
  • static int offset_
  • double lastpkttime_
  • inline static int offset() return offset_
  • inline static ECHOHeader access(const Packet
    p) return (ECHOHeader) p-gtaccess(offset_)

28
Class definitions
  • class ECHO_Timer
  • class ECHO_Agent public Agent
  • public
  • ECHO_Agent()
  • int command(int argc, const charconst argv)
  • protected
  • void timeout(int)
  • void sendit()
  • double interval_
  • ECHO_Timer echo_timer_
  • class ECHO_Timer public TimerHandler
  • public
  • ECHO_Timer(ECHO_Agent a) TimerHandler() a_
    a
  • protected
  • virtual void expire(Event e)
  • ECHO_Agent a_

29
The recv() and timeout() Methods
  • void ECHO_Agenttimeout(int)
  • sendit()
  • echo_timer_.resched(interval_)
  • void ECHO_Agentsendit()
  • Packet p allocpkt()
  • ECHOHeader eh ECHOHeaderaccess(p-gtbits())
  • eh-gttimestamp() Schedulerinstance().clock()
  • send(p, 0) // Connectorsend()
  • void ECHO_Timerexpire(Event e)
  • a_-gttimeout(0)

30
Linking the ping Agent with OTcl
  • static class ECHOClass public TclClass
  • public
  • ECHOClass() TclClass("Agent/ECHO")
  • TclObject create(int argc, const charconst
    argv)
  • return (new ECHO_Agent())
  • class_echo

31
Echo agent constructor
  • ECHO_AgentECHO_Agent() Agent(PT_ECHO),
    echo_timer_(this)
  • bind_time("interval_", interval_)
  • bind("packetSize_", size_)

32
command
  • int ECHO_Agentcommand(int argc, const
    charconst argv)
  • if (argc 2)
  • if (strcmp(argv1, "start") 0)
  • timeout(0)
  • return (TCL_OK)
  • return (Agentcommand(argc, argv))

33
ns/common/packet.h
enum packet_t PT_TCP, PT_UDP, PT_AODV,
PT_ECHO, // insert new packet types
here PT_NTYPE // This MUST be the LAST one
class p_info public p_info()
name_PT_TCP "tcp" name_PT_UDP
"udp" name_PT_AODV "AODV" name_PT_ECHO
"ECHO"
34
ns-\ns-2.29\trace\cmu-trace.cc
  • void CMUTraceformat(Packet p, const char
    why)
  • case PT_GAF
  • break
  • case PT_ECHO
  • break

35
Using the agent through OTcl
  • set echoagent new Agent/ECHO
  • simulator attach-agent node echoagent
  • echoagent set dst_ dest
  • echoagent set fid_ 0
  • echoagent set prio_ 0
  • echoagent set flags_ 0
  • echoagent set interval_ 1.5
  • echoagent set packetSize_ 1024
  • echoagent start

36
command(start)
timeout(0)
expire()
sendit()
send()
echo_timer_.resched(interval_)
37
Outline
  • Introduction
  • Agents
  • UDP agents
  • TCP agents

38
UDP Agents
  • Agent/UDP set packetSize_ 1000
  • UDP packets also contain a monotonically
    increasing sequence number and an RTP timestamp.

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"
39
Outline
  • Introduction
  • Agents
  • UDP agents
  • TCP agents

40
TCP Agents
  • There are two major types of TCP agents
  • one-way agents sender receiver
  • a two-way agent still under development

41
One-way TCP agents
  • 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 modification
  • 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 configurable
    delay per ACK
  • Agent/TCPSink/Sack1 - selective ACK sink (follows
    RFC2018)
  • Agent/TCPSink/Sack1/DelAck - Sack1 with DelAck

42
Reno Tahoe
Congestion avoidance
Slow start
Fast recovery
43
TCPs
SACK RFC2018
Tahoe RFC793
Reno RFC2001
newReno RFC2582
Vegas
44
Two-Way TCP Agents (FullTcp)
  • connections may be established and town down
    (SYN/FIN packets are exchanged)
  • bidirectional data transfer is supported
  • The generation of SYN packets (and their ACKs)
    can be of critical importance in trying to model
    real-world behavior when using many very short
    data transfers.

45
Two-Way TCP Agents (FullTcp)
  • set src new Agent/TCP/FullTcp
  • set sink new Agent/TCP/FullTcp
  • ns_ attach-agent node_(s1) src
  • ns_ attach-agent node_(k1) sink
  • src set fid_ 0
  • sink set fid_ 0
  • ns_ connect src sink
  • sink listen
  • src set window_ 100

46
One-Way Trace TCP Trace Dynamics
  • 0.95176 2 3 tcp 1000 ------ 0
    0.0 3.0 27 42

node
port
Write a Comment
User Comments (0)
About PowerShow.com