DRCL JavaSim API

drcl.inet.transport
Class TCP

java.lang.Object
  |
  +--drcl.DrclObj
        |
        +--drcl.comp.Component
              |
              +--drcl.net.Module
                    |
                    +--drcl.inet.Protocol
                          |
                          +--drcl.inet.transport.TCP
All Implemented Interfaces:
ActiveComponent, java.lang.Cloneable, drcl.inet.transport.Connection, InetConstants, ObjectDuplicable, java.io.Serializable, TCPConstants
Direct Known Subclasses:
TCPb

public class TCP
extends Protocol
implements TCPConstants, drcl.inet.transport.Connection, ActiveComponent

This component implements the single-session sender TCP. Since only one session is handled in this component, open and close of the connection is not implemented, nor is the 3-way handshaking.

Several variants of TCP are implemented: Tahoe, Reno, New-Reno ([Fall96]) and Vegas ([Brakmo95]). Each can be used with the SACK option. Currently only New-Reno takes advantage of the SACK blocks in an ACK. To specify which implementation, use setImplementation(String) with "Tahoe", "Reno", "New-Reno" or "Vegas" as argument. To enable SACK, use setSackEnabled(boolean).

The initial sequence number is set as 0, instead of a random value suggestted in [TCPILL2]

For Tahoe and Reno, the RTT and RXT timer base estimation is based on [TCPILL2]. The sending time of a segment is recorded as ts_ in the TCP header (similar to the timestamp option in the real TCP header) and returned by the corresponding acknowledgment packet. ts_ is set to -1 if the segment is a retransmitted one, so no RTT estimation is performed for retransmitted segments. The algorithm is described in [RFC793] and [TCPILL1].

SampleRTT = current time - ts_;
SmoothedRTT[new] = 7/8*SmoothedRTT[old] + 1/8*SampleRTT;
Delta = |SampleRTT - SmoothedRTT[old]|;
RTTVariance[new] = 3/4*RTTVariance[old] + 1/4*Delta;
and the retransmission timer base is 
RTO[new] = SmoothedRTT[new] + 4*RTTVariance[new].
The exception is that for the first acknowledgment received:
SampleRTT = current time - ts_;
SmoothedRTT[new] = SampleRTT;
RTTVariance[new] = SampleRTT/2;
and the retransmission timer base is 
RTO[new] = SmoothedRTT[new] + 4*RTTVariance[new].

Additional usage infomation:

  1. The "maxburst" option, use setMaxburstEnabled(boolean). This option restricts the maximum number of bytes that can be sent in response to a single ACK to be one segment during Reno-style fast recovery, and two segments otherwise. This is based on [RFC2018] and is different from similar setting in [Fall96]. For Vegas, only two segments restriction applies since Vegas does not have fast recovery.
  2. To change TTL value, use setTTL(int).
  3. To change MSS value, use setMSS(int).
  4. To change timer tick, use setTick(double).

References:

Author:
Yuan Gao, Yung-ching Hsiao, Hung-ying Tyan
See Also:
TCPPacket, TCPSink, Serialized Form

Inner Class Summary
static class TCP.VegasVariables
          Stores variables for implementing TCP-VEGAS.
 
Inner classes inherited from class drcl.comp.Component
Component.LockPack
 
Field Summary
protected  Port ackPort
          Port to export the acknowledged sequence number of each packet received.
protected  long AWND
          Receiver window size.
protected  int backoff
          Current RXT timer backoff value.
protected  int burst
          # of bytes that have been sent in response to last ACK.
protected  long bytesRetx
          # of bytes retransmitted.
protected  double cur_rtt
          Most recent RTT value.
protected  double CWND
          Congestion window size.
protected  Port cwndPort
          Port to export the congestion window changed event.
static int DEBUG_ACK
           
static int DEBUG_DUPACK
           
static java.lang.String[] DEBUG_LEVELS
           
static int DEBUG_RTT
           
static int DEBUG_SACK
           
static int DEBUG_SAMPLE
           
static int DEBUG_SEND
           
static int DEBUG_TIMEOUT
           
static int DEBUG_VEGAS
           
protected  long dt_max
          Maximum seqence number of data in the buffer, = snd_una + sbuffer.size().
protected  int dup_ack
          Number of duplicated ACKs received.
protected  java.lang.String implementation
           
protected  boolean maxburst
          True if maxburst restriction is enabled.
protected  double MAXCWND
          Maximum congestion window size.
protected  double maxrto
          Max.
protected  int MSS
          MSS Maximum segmentation size.
static boolean NS_COMPATIBLE
          Sets to true to make TCP ns compatible
protected  long numack
          # of effective acks received.
protected  int numTimeouts
          # of coarse-grained timeouts.
protected  LongSpace recvBuffer
          (Reconstructed) Sequence numbers that the receiver has received.
protected  int rttvar_bits
          Exponent of weight for updating t_rttvar.
protected  int rttvar_exp
          Exponent of multiple for t_rtxcur.
protected  int rttvar_init
          Initial value of RTT Variation (shifted by rttvar_bits)
protected  Port rttvarPort
          Port to export the RTTVAR event.
protected  double rtxcur_init
          Initial value of base RXT timer.
protected  boolean SACK
          True if SACK option is enabled.
protected  CircularBuffer sbuffer
          Sending buffer.
protected  Port seqNoPort
          Port to export the [first] sequence number of each packet sent.
protected  long snd_max
          Maximum seqence number that has been sent.
protected  long snd_nxt
          Sequence number to send next.
protected  long snd_nxt_marked
          snd_nxt marked for NEW-RENO and SACK.
protected  long snd_nxt_recorded
          during Reno-style fast recovery.
protected  long snd_una
          Smallest sequence number that has not yet been acknowledged.
protected  int srtt_bits
          Exponent of weight for updating t_srtt.
protected  int srtt_init
          Initial value of smoothed RTT (shifted by srtt_bits)
protected  Port srttPort
          Port to export the SRTT event.
protected  Port sstPort
          Port to export the slow start threshold changed event.
 int state
          FSM State of this TCP component.
protected  long sthld
          Congestion avoidance threshold.
protected  double t_grain
          TCP tick for all the rtt variables.
protected  int t_rttvar
          RTT Variation (shifted by rttvar_bits)
protected  double t_rtxcur
          Current RXT timeout value.
protected  int t_srtt
          Smoothed RTT (shifted by srtt_bits)
protected  int TTL
          TTL field to IP.
protected  TCP.VegasVariables vegas
           
 
Fields inherited from class drcl.net.Module
address, downPort, PortGroup_DOWN, PortGroup_UP, timerPort, upPort
 
Fields inherited from class drcl.comp.Component
FLAG_COMPONENT_NOTIFICATION, FLAG_DEBUG_ENABLED, FLAG_DIRECT_OUTPUT_ENABLED, FLAG_ENABLED, FLAG_ERROR_ENABLED, FLAG_EVENT_ENABLED, FLAG_GARBAGE_DISPLAY_ENABLED, FLAG_GARBAGE_ENABLED, FLAG_PORT_NOTIFICATION, FLAG_STARTED, FLAG_STOPPED, FLAG_TRACE_ENABLED, FLAG_UNDEFINED_START, id, infoPort, lockHead, name, parent, PortGroup_DEFAULT_GROUP, PortGroup_EVENT, PortGroup_SERVICE, Root, Trace_DATA, Trace_SEND
 
Fields inherited from interface drcl.inet.transport.TCPConstants
ACK_EVENT, ACK_PORT_ID, AWND_DEFAULT, CLOSE_WAIT, CLOSED, CLOSING, CWND_EVENT, CWND_PORT_ID, DEFAULT_PID, DELAY_ACK, ESTABLISHED, ESTABLISHED_FIN, ESTABLISHED_OVER, FIN_WAIT_1, FIN_WAIT_2, LAST_ACK, LISTEN, LISTEN1, LISTEN2, MAXCWND_DEFAULT, NEW_RENO, NUMDUPACKS, PRE_CLOSED, PRE_LAST_ACK, PRE_SYN_SENT, RECEIVE, RENO, RTT_EVT, RTTVAR_EVENT, RTTVAR_PORT_ID, RXT_EVT, SEND, SEQNO_EVENT, SEQNO_PORT_ID, SEQNO_RCV_EVENT, SEQNO_RCV_PORT_ID, SEQNO_SENT_EVENT, SEQNO_SENT_PORT_ID, SRTT_EVENT, SRTT_PORT_ID, SST_EVENT, SST_PORT_ID, STATES, SYN_RCVD, SYN_SENT, TAHOE, TIME_WAIT, TIMEOUT_TYPES, VEGAS
 
Fields inherited from interface drcl.inet.InetConstants
BYTE_MODE, DEFAULT_BANDWIDTH, DEFAULT_BUFFER_SIZE, DEFAULT_MTU, EVENT_ID_CHANGED_PORT_ID, EVENT_IDENTITY_ADDED, EVENT_IDENTITY_REMOVED, EVENT_IF_NEIGHBOR_DOWN, EVENT_IF_NEIGHBOR_UP, EVENT_IF_PORT_ID, EVENT_MCAST_HOST_PORT_ID, EVENT_PKT_ARRIVAL, EVENT_PKT_ARRIVAL_PORT_ID, EVENT_RT_ENTRY_ADDED, EVENT_RT_ENTRY_MODIFIED, EVENT_RT_ENTRY_REMOVED, EVENT_RT_MCAST_CHANGED_PORT_ID, EVENT_RT_UCAST_CHANGED_PORT_ID, EVENT_VIF_NEIGHBOR_DOWN, EVENT_VIF_NEIGHBOR_UP, EVENT_VIF_PORT_ID, HOST_ENTRY_EXT, ID_CSL, MCAST_QUERY_PORT_ID, PACKET_MODE, PID_DV, PID_DVMRP, PID_HELLO, PID_IGMP, PID_OSPF, PID_RSVP, PID_TCP, PID_UDP, SERVICE_CONFIGSW_PORT_ID, SERVICE_ID_PORT_ID, SERVICE_IF_PORT_ID, SERVICE_MCAST_PORT_ID, SERVICE_RT_PORT_ID, UCAST_QUERY_PORT_ID
 
Constructor Summary
TCP()
           
TCP(java.lang.String id_)
           
 
Method Summary
protected  void _start()
          Used to output initial states events.
protected  void ack_syn_fin(boolean ack_, boolean syn_, boolean fin_)
           
 java.lang.String configInfo()
           
 void configureRTT(double tick_, double srtt_init_, double rttvar_init_, double basertt_init_, double maxrto_)
          Configures RTT parameters.
protected  void dataArriveAtDownPort(java.lang.Object data_, Port downPort_)
          The handler invoked when a packet arrives at a "down" port.
protected  void dataArriveAtUpPort(java.lang.Object data_, Port upPort_)
          The handler invoked when a packet arrives at an "up" port.
 void duplicate(java.lang.Object source_)
          Duplicates the content of source_, including ID, name, child components and connections among them, to this component.
protected  int getAckNo()
           
protected  int getAvailableRcvBuffer()
           
 double getBASERTT_INIT()
          Returns the initial value of baseRTT (in second).
 java.lang.String[] getDebugLevelNames()
          Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
 java.lang.String getImplementation()
           
 long getLocalAddr()
          Returns the local address.
 int getLocalPort()
          Returns the local port.
 double getMAXCWND()
           
 double getMAXRTO()
          Returns the maximum retr timeout (in second).
 int getMSS()
           
 java.lang.String getName()
          Returns the (informational) name of the component.
 long getNumBytesRetransmitted()
          Returns # of bytes retransmitted.
 int getNumTimeouts()
          Returns # of coarse-grained timeouts.
 long getPeer()
          Returns the peer address.
 int getRemotePort()
          Returns the peer port.
 double getRTTVAR_INIT()
          Returns the initial value of rttvar (in second).
protected  int getSendingBuffer()
           
protected  int getSeqNo()
           
 double getSRTT_INIT()
          Returns the initial value of srtt (in second).
 int getState()
           
 double getTick()
           
 int getTTL()
           
 java.lang.String info()
          Returns information regarding this component.
 boolean isMaxburstEnabled()
           
 boolean isSackEnabled()
           
protected  void option_process(TCPPacket pkt_, long seq_)
          Processing TCP header options.
protected  void recv(TCPPacket pkt_)
          Handles a packet arriving at the down port.
 void reset()
          Resets the component for being used anew.
protected  void resetRXTTimer(double now_)
          Resets the retransmission timer.
protected  void rtt_init()
          Initialize variables for the retransmit timer as in [TCPILL2].
protected  void rtt_update(double now_, double ts_)
          Update RTT estimations and recalculate RXT timer base.
protected  double rxt_timer(int t_backoff_)
          Returns the RXT timeout value by multiplying base value and back off value.
protected  long seq_max()
          Returns the maximum sequence number that can be sent.
 void setBASERTT_INIT(double v_)
          Sets the initial value of baseRTT (in second).
 void setImplementation(java.lang.String impl_)
           
 void setMaxburstEnabled(boolean maxburst_)
           
 void setMAXCWND(long max_)
           
 void setMAXRTO(double v_)
          Sets the maximum retr timeout (in second).
 void setMSS(int mss)
          Sets the maximum segment size.
 void setPeer(long peer_)
           
 void setRTTVAR_INIT(double v_)
          Sets the initial value of rttvar (in second).
 void setSackEnabled(boolean sack_)
           
 void setSRTT_INIT(double v_)
          Sets the initial value of srtt (in second).
 void setTick(double tick_)
          Sets the clock tick for RTT estimation.
 void setTTL(int ttl)
           
protected  void snd_maxpck(java.lang.String debugMsg_)
          Sends as many packets as allowed by the current window.
protected  void snd_packet(long seqno_, int size_)
          Sends one packet with specified starting sequence number and packet size.
protected  long snd_wnd()
          Returns the size of usable window, which is the smaller value of congestion window and window size advertized by peer.
protected  void tcp_init()
          Initializes this TCP component.
protected  void timeout(java.lang.Object evt_)
          The handler invoked when a timeout event occurs.
protected  void timer_backoff()
          Backs off the RXT timer backoff.
protected  void win_decrease(boolean timeout_)
          Updates congestion window and sending window variables when three duplicate acks are received.
protected  void win_increase()
          Updates congestion window and sending window variables.
protected  void win_init()
          Initializes sliding window variables.
 
Methods inherited from class drcl.inet.Protocol
broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, createConfigSwitchPort, createIDChangedEventPort, createIDServicePort, createIFEventPort, createIFQueryPort, createMcastHostEventPort, createMcastQueryPort, createMulticastRTChangedEventPort, createPktArrivalEventPort, createRTServicePort, createUcastQueryPort, createUnicastRTChangedEventPort, createVIFEventPort, forward, forward, forward, forward, forward, forward, idAddedEventHandler, idRemovedEventHandler, mcastHostJoinEventHandler, mcastHostLeaveEventHandler, mcastQueryHandler, neighborDownEventHandler, neighborUpEventHandler, pktArrivalHandler, processOther, rtAddedEventHandler, rtModifiedEventHandler, rtRemovedEventHandler, ucastQueryHandler, vNeighborDownEventHandler, vNeighborUpEventHandler
 
Methods inherited from class drcl.net.Module
cancelTimeout, deliver, getAddress, process, removeDefaultDownPort, removeDefaultUpPort, removeTimerPort, setAddress, setTimeout, setTimeoutAt
 
Methods inherited from class drcl.comp.Component
_resume, _stop, addComponent, addComponent, addEventPort, addEventPort, addForkPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addServerPort, addServerPort, cancelFork, componentAdded, componentRemoved, connect, containsComponent, containsComponent, containsPort, debug, disconnectAll, disconnectAllPeers, disconnectAllPorts, drop, drop, error, error, expose, exposeEventPorts, exposePort, exposePort, exposePort, exposePort, exposePort, findAvailable, findAvailable, findAvailable, finishing, fork, forkAt, getAllComponents, getAllPorts, getAllPorts, getAllWiresInside, getAllWiresInsideOut, getAllWiresOut, getComponent, getComponentFlag, getComponentFlag, getContract, getContractHT, getContractHT, getDebugFlagsInBinary, getForkManager, getID, getParent, getPort, getPort, getRoot, getRuntime, getTime, iduplicate, isAncestorOf, isComponentNotificationEnabled, isContainer, isDebugEnabled, isDebugEnabledAt, isDirectOutputEnabled, isEnabled, isErrorNoticeEnabled, isEventExportEnabled, isGarbageDisplayEnabled, isGarbageEnabled, isPortNotificationEnabled, isPortRemovable, isStarted, isStopped, isTraceEnabled, lock, notify, notifyAll, operate, portAdded, portRemoved, reboot, removeAll, removeAllComponents, removeAllPorts, removeAllPorts, removeComponent, removeComponent, removePort, removePort, removePort, resume, run, sduplicate, send, sendAt, setComponentFlag, setComponentFlag, setComponentNotificationEnabled, setContract, setDebugEnabled, setDebugEnabled, setDebugEnabledAt, setDebugEnabledAt, setDebugEnabledAt, setDirectOutputEnabled, setDirectOutputEnabled, setEnabled, setErrorNoticeEnabled, setErrorNoticeEnabled, setEventExportEnabled, setEventExportEnabled, setExecutionBoundary, setGarbageDisplayEnabled, setGarbageDisplayEnabled, setGarbageEnabled, setGarbageEnabled, setID, setID, setName, setPort, setPort, setPortNotificationEnabled, setPortRemovable, setRuntime, setTraceEnabled, setTraceEnabled, sleepFor, sleepUntil, stop, toString, unexpose, unlock, useLocalForkManager, useLocalForkManager, wait
 
Methods inherited from class drcl.DrclObj
clone
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NS_COMPATIBLE

public static boolean NS_COMPATIBLE
Sets to true to make TCP ns compatible

DEBUG_LEVELS

public static final java.lang.String[] DEBUG_LEVELS

DEBUG_ACK

public static final int DEBUG_ACK

DEBUG_DUPACK

public static final int DEBUG_DUPACK

DEBUG_SEND

public static final int DEBUG_SEND

DEBUG_TIMEOUT

public static final int DEBUG_TIMEOUT

DEBUG_RTT

public static final int DEBUG_RTT

DEBUG_SACK

public static final int DEBUG_SACK

DEBUG_SAMPLE

public static final int DEBUG_SAMPLE

DEBUG_VEGAS

public static final int DEBUG_VEGAS

cwndPort

protected Port cwndPort
Port to export the congestion window changed event.

sstPort

protected Port sstPort
Port to export the slow start threshold changed event.

srttPort

protected Port srttPort
Port to export the SRTT event.

rttvarPort

protected Port rttvarPort
Port to export the RTTVAR event.

seqNoPort

protected Port seqNoPort
Port to export the [first] sequence number of each packet sent.

ackPort

protected Port ackPort
Port to export the acknowledged sequence number of each packet received.

srtt_init

protected int srtt_init
Initial value of smoothed RTT (shifted by srtt_bits)

rttvar_init

protected int rttvar_init
Initial value of RTT Variation (shifted by rttvar_bits)

rtxcur_init

protected double rtxcur_init
Initial value of base RXT timer.

t_grain

protected double t_grain
TCP tick for all the rtt variables. The tick value is set as 100 ms (0.1 second) as the fast timer in [TCPILL2].

t_srtt

protected transient int t_srtt
Smoothed RTT (shifted by srtt_bits)

t_rttvar

protected transient int t_rttvar
RTT Variation (shifted by rttvar_bits)

t_rtxcur

protected transient double t_rtxcur
Current RXT timeout value.

backoff

protected transient int backoff
Current RXT timer backoff value.

srtt_bits

protected int srtt_bits
Exponent of weight for updating t_srtt.

rttvar_bits

protected int rttvar_bits
Exponent of weight for updating t_rttvar.

rttvar_exp

protected int rttvar_exp
Exponent of multiple for t_rtxcur.

maxrto

protected double maxrto
Max. value of a RXT timeout.

cur_rtt

protected transient double cur_rtt
Most recent RTT value.

vegas

protected transient TCP.VegasVariables vegas

TTL

protected int TTL
TTL field to IP.

MSS

protected int MSS
MSS Maximum segmentation size.

implementation

protected java.lang.String implementation

CWND

protected transient double CWND
Congestion window size.

MAXCWND

protected double MAXCWND
Maximum congestion window size.

AWND

protected transient long AWND
Receiver window size.

sthld

protected transient long sthld
Congestion avoidance threshold.

snd_una

protected transient long snd_una
Smallest sequence number that has not yet been acknowledged.

snd_nxt

protected transient long snd_nxt
Sequence number to send next.

snd_nxt_recorded

protected transient long snd_nxt_recorded
during Reno-style fast recovery.

snd_nxt_marked

protected transient long snd_nxt_marked
snd_nxt marked for NEW-RENO and SACK.

snd_max

protected transient long snd_max
Maximum seqence number that has been sent.

dt_max

protected transient long dt_max
Maximum seqence number of data in the buffer, = snd_una + sbuffer.size().

dup_ack

protected transient int dup_ack
Number of duplicated ACKs received.

numack

protected transient long numack
# of effective acks received.

sbuffer

protected transient CircularBuffer sbuffer
Sending buffer.

bytesRetx

protected transient long bytesRetx
# of bytes retransmitted.

numTimeouts

protected transient int numTimeouts
# of coarse-grained timeouts.

burst

protected transient int burst
# of bytes that have been sent in response to last ACK.

SACK

protected boolean SACK
True if SACK option is enabled. Default is false.

maxburst

protected boolean maxburst
True if maxburst restriction is enabled. Default is true.

recvBuffer

protected transient LongSpace recvBuffer
(Reconstructed) Sequence numbers that the receiver has received.

state

public transient int state
FSM State of this TCP component.
Constructor Detail

TCP

public TCP()

TCP

public TCP(java.lang.String id_)
Method Detail

getDebugLevelNames

public java.lang.String[] getDebugLevelNames()
Description copied from class: Component
Returns the names of defined debug levels; subclasses should override this method if debug levels are defined.
Overrides:
getDebugLevelNames in class Component

getName

public java.lang.String getName()
Description copied from class: Component
Returns the (informational) name of the component.
Overrides:
getName in class Component

reset

public void reset()
Description copied from class: Component
Resets the component for being used anew. All the internal variables must be set to the initial state. All the ports and child components are reset as well.
Overrides:
reset in class Component

duplicate

public void duplicate(java.lang.Object source_)
Description copied from class: Component
Duplicates the content of source_, including ID, name, child components and connections among them, to this component. Subclasses need to override this method to copy its own variables.
Overrides:
duplicate in class Protocol

_start

protected void _start()
Used to output initial states events.
Overrides:
_start in class Component

getState

public int getState()

setPeer

public void setPeer(long peer_)

getPeer

public long getPeer()
Description copied from interface: drcl.inet.transport.Connection
Returns the peer address.
Specified by:
getPeer in interface drcl.inet.transport.Connection

setTTL

public void setTTL(int ttl)

getTTL

public int getTTL()

setMSS

public void setMSS(int mss)
Sets the maximum segment size. This method initializes this TCP component. Should not be called during simulation.

getMSS

public int getMSS()

setMAXCWND

public void setMAXCWND(long max_)

getMAXCWND

public double getMAXCWND()

setTick

public void setTick(double tick_)
Sets the clock tick for RTT estimation.

getTick

public double getTick()

setSRTT_INIT

public void setSRTT_INIT(double v_)
Sets the initial value of srtt (in second).

getSRTT_INIT

public double getSRTT_INIT()
Returns the initial value of srtt (in second).

setRTTVAR_INIT

public void setRTTVAR_INIT(double v_)
Sets the initial value of rttvar (in second).

getRTTVAR_INIT

public double getRTTVAR_INIT()
Returns the initial value of rttvar (in second).

setBASERTT_INIT

public void setBASERTT_INIT(double v_)
Sets the initial value of baseRTT (in second).

getBASERTT_INIT

public double getBASERTT_INIT()
Returns the initial value of baseRTT (in second).

setMAXRTO

public void setMAXRTO(double v_)
Sets the maximum retr timeout (in second).

getMAXRTO

public double getMAXRTO()
Returns the maximum retr timeout (in second).

getNumBytesRetransmitted

public long getNumBytesRetransmitted()
Returns # of bytes retransmitted.

getNumTimeouts

public int getNumTimeouts()
Returns # of coarse-grained timeouts.

configureRTT

public void configureRTT(double tick_,
                         double srtt_init_,
                         double rttvar_init_,
                         double basertt_init_,
                         double maxrto_)
Configures RTT parameters.
Parameters:
tick_ - time unit for RTT variables.
srtt_init_ - initial value of srtt.
rttvar_init_ - initial value of rttvar.
basertt_init_ - initial value of baseRTT.
maxrto_ - maximum retrx timeout.

setImplementation

public void setImplementation(java.lang.String impl_)

getImplementation

public java.lang.String getImplementation()

setSackEnabled

public void setSackEnabled(boolean sack_)

isSackEnabled

public boolean isSackEnabled()

setMaxburstEnabled

public void setMaxburstEnabled(boolean maxburst_)

isMaxburstEnabled

public boolean isMaxburstEnabled()

tcp_init

protected void tcp_init()
Initializes this TCP component.

rtt_init

protected void rtt_init()
Initialize variables for the retransmit timer as in [TCPILL2].

rtt_update

protected void rtt_update(double now_,
                          double ts_)
Update RTT estimations and recalculate RXT timer base. The estimation method is same as in [TCPILL2]. The sending time of a packet is carried back by acknowledgment packet as ts_ in header (which doesn't exist in real world TCP/IP header). When ts_ is -1, the packet is a retransmitted one, so no RTT estimation updating is done for this packet. The algorithm is described in [RFC793] and [TCPILL1]. SampleRTT = current time - ts_; SmoothedRTT[new] = 7/8*SmoothedRTT[old] + 1/8*SampleRTT; Delta = |SampleRTT - SmoothedRTT[old]|; RTTVariance[new] = 3/4*RTTVariance[old] + 1/4*Delta; and the retransmission timer base is RTO[new] = SmoothedRTT[new] + 4*RTTVariance[new]. The exception is that for the first acknowledgment received: SampleRTT = current time - ts_; SmoothedRTT[new] = SampleRTT; RTTVariance[new] = SampleRTT/2; and the retransmission timer base is RTO[new] = SmoothedRTT[new] + 4*RTTVariance[new].
Parameters:
ts_ - the sending time of the acknowledged packet.

rxt_timer

protected double rxt_timer(int t_backoff_)
Returns the RXT timeout value by multiplying base value and back off value.
Parameters:
t_backoff - RXT timer backoff value

win_init

protected void win_init()
Initializes sliding window variables. Congestion window and slow start threshold is set as in [TCPILL2].

snd_wnd

protected long snd_wnd()
Returns the size of usable window, which is the smaller value of congestion window and window size advertized by peer.

seq_max

protected long seq_max()
Returns the maximum sequence number that can be sent.

dataArriveAtUpPort

protected void dataArriveAtUpPort(java.lang.Object data_,
                                  Port upPort_)
Description copied from class: Module
The handler invoked when a packet arrives at an "up" port. Subclasses should override it to handle such an event.
Overrides:
dataArriveAtUpPort in class Module

dataArriveAtDownPort

protected void dataArriveAtDownPort(java.lang.Object data_,
                                    Port downPort_)
Description copied from class: Module
The handler invoked when a packet arrives at a "down" port. Subclasses should override it to handle such an event.
Overrides:
dataArriveAtDownPort in class Module

recv

protected void recv(TCPPacket pkt_)
Handles a packet arriving at the down port.

option_process

protected void option_process(TCPPacket pkt_,
                              long seq_)
Processing TCP header options.

win_increase

protected void win_increase()
Updates congestion window and sending window variables. The congestion window updating is according to [RFC2581].

win_decrease

protected void win_decrease(boolean timeout_)
Updates congestion window and sending window variables when three duplicate acks are received.

timer_backoff

protected void timer_backoff()
Backs off the RXT timer backoff. The largest backoff value is 64 as specified in [RFC2581].

timeout

protected void timeout(java.lang.Object evt_)
Description copied from class: Module
The handler invoked when a timeout event occurs. Subclasses should override it to handle such an event.
Overrides:
timeout in class Module
Following copied from class: drcl.net.Module
See Also:
Module.setTimeout(Object, double), Module.setTimeoutAt(Object, double)

snd_maxpck

protected void snd_maxpck(java.lang.String debugMsg_)
Sends as many packets as allowed by the current window.

snd_packet

protected void snd_packet(long seqno_,
                          int size_)
Sends one packet with specified starting sequence number and packet size.

resetRXTTimer

protected void resetRXTTimer(double now_)
Resets the retransmission timer.

ack_syn_fin

protected void ack_syn_fin(boolean ack_,
                           boolean syn_,
                           boolean fin_)

getLocalPort

public int getLocalPort()
Description copied from interface: drcl.inet.transport.Connection
Returns the local port.
Specified by:
getLocalPort in interface drcl.inet.transport.Connection

getRemotePort

public int getRemotePort()
Description copied from interface: drcl.inet.transport.Connection
Returns the peer port.
Specified by:
getRemotePort in interface drcl.inet.transport.Connection

getLocalAddr

public long getLocalAddr()
Description copied from interface: drcl.inet.transport.Connection
Returns the local address.
Specified by:
getLocalAddr in interface drcl.inet.transport.Connection

getSeqNo

protected int getSeqNo()

getAckNo

protected int getAckNo()

getAvailableRcvBuffer

protected int getAvailableRcvBuffer()

getSendingBuffer

protected int getSendingBuffer()

info

public java.lang.String info()
Description copied from class: Component
Returns information regarding this component. Subclasses should override this method to provide useful information at run-time.
Overrides:
info in class Component

configInfo

public java.lang.String configInfo()

DRCL JavaSim API

Copyright © 2001 - DRCL, OSU     ~ Back to JavaSim Home ~