DRCL J-Sim API

drcl.inet.transport
Class TCP

java.lang.Object
  extended bydrcl.DrclObj
      extended bydrcl.comp.Component
          extended bydrcl.net.Module
              extended bydrcl.inet.Protocol
                  extended bydrcl.inet.transport.TCP
All Implemented Interfaces:
ActiveComponent, java.lang.Cloneable, drcl.inet.transport.Connection, InetConstants, ObjectCloneable, 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. Only one TCP 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 the 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

Nested Class Summary
static class TCP.VegasVariables
          Stores variables for implementing TCP-VEGAS.
 
Nested classes inherited from class drcl.comp.Component
Component.Locks
 
Field Summary
static int AWND_DEFAULT
          Default advertisement window size (unit of MSS bytes).
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
           
static int INIT_SS_THRESHOLD
          Initial slow-start threshold (unit of MSS bytes).
static int MAXCWND_DEFAULT
          Default maximum congestion window size (unit of MSS bytes).
static boolean NS_COMPATIBLE
          Sets to true to make TCP ns compatible
static int NUMDUPACKS
          Number of duplicate ACKs to trigger fast RXT as specified in [RFC2581] (for Reno, Tahoe).
 int state
          FSM State of this TCP component.
 
Fields inherited from class drcl.net.Module
downPort, PortGroup_DOWN, PortGroup_UP, 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, locks, 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, 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, NEW_RENO, 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_LINK_BROKEN, EVENT_LINK_BROKEN_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, ID_TRACE_RT, MCAST_QUERY_PORT_ID, PACKET_MODE, PID_AODV, PID_DV, PID_DVMRP, PID_HELLO, PID_IGMP, PID_OSPF, PID_RSVP, PID_TCP, PID_TRACE_RT, 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
 java.lang.String configInfo()
           
 void configureRTT(double tick_, double srtt_init_, double rttvar_init_, double basertt_init_, double maxrto_)
          Configures RTT parameters.
 void duplicate(java.lang.Object source_)
          Duplicates the content of source_, including ID, name, child components and connections among them, to this component.
 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.
 int 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).
 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()
           
 void reset()
          Resets the component for being used anew.
 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(int 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)
           
 
Methods inherited from class drcl.inet.Protocol
broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, broadcast, createConfigSwitchPort, createIDChangedEventPort, createIDServicePort, createIFEventPort, createIFQueryPort, createLinkBrokenEventPort, createMcastHostEventPort, createMcastQueryPort, createMulticastRTChangedEventPort, createPktArrivalEventPort, createRTServicePort, createUcastQueryPort, createUnicastRTChangedEventPort, createVIFEventPort, forward, forward, forward, forward, forward, forward, LinkBrokenEventHandler
 
Methods inherited from class drcl.net.Module
cancelTimeout, setTimeout, setTimeoutAt
 
Methods inherited from class drcl.comp.Component
addComponent, addComponent, addEventPort, addEventPort, addForkPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addPort, addServerPort, addServerPort, cancelFork, connect, containsComponent, containsComponent, containsPort, debug, disconnectAll, disconnectAllPeers, disconnectAllPorts, drop, drop, error, error, expose, exposeEventPorts, exposePort, exposePort, exposePort, exposePort, exposePort, findAvailable, findAvailable, findAvailable, fork, forkAt, getAllComponents, getAllPorts, getAllPorts, getAllWiresInside, getAllWiresInsideOut, getAllWiresOut, getComponent, getComponentFlag, getComponentFlag, getContract, getContractHT, getContractHT, getDebugFlagsInBinary, getID, getParent, getPort, getPort, getRoot, getTime, iduplicate, isAncestorOf, isContainer, isDebugEnabled, isDebugEnabledAt, isDirectlyRelatedTo, isDirectOutputEnabled, isEnabled, isErrorNoticeEnabled, isEventExportEnabled, isGarbageDisplayEnabled, isGarbageEnabled, isPortRemovable, isStarted, isStopped, isTraceEnabled, lock, notify, notifyAll, operate, reboot, removeAll, removeAllComponents, removeAllPorts, removeAllPorts, removeComponent, removeComponent, removePort, removePort, removePort, resume, run, sduplicate, send, sendAt, setComponentFlag, setComponentFlag, setDebugEnabled, setDebugEnabled, setDebugEnabledAt, setDebugEnabledAt, setDebugEnabledAt, setDirectOutputEnabled, setDirectOutputEnabled, setEnabled, setErrorNoticeEnabled, setErrorNoticeEnabled, setEventExportEnabled, setEventExportEnabled, setExecutionBoundary, setGarbageDisplayEnabled, setGarbageDisplayEnabled, setGarbageEnabled, setGarbageEnabled, setID, setID, setName, setPort, setPort, 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, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NS_COMPATIBLE

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


AWND_DEFAULT

public static int AWND_DEFAULT
Default advertisement window size (unit of MSS bytes).


MAXCWND_DEFAULT

public static int MAXCWND_DEFAULT
Default maximum congestion window size (unit of MSS bytes).


INIT_SS_THRESHOLD

public static int INIT_SS_THRESHOLD
Initial slow-start threshold (unit of MSS bytes).


NUMDUPACKS

public static int NUMDUPACKS
Number of duplicate ACKs to trigger fast RXT as specified in [RFC2581] (for Reno, Tahoe).


DEBUG_LEVELS

public static final java.lang.String[] DEBUG_LEVELS

DEBUG_ACK

public static final int DEBUG_ACK
See Also:
Constant Field Values

DEBUG_DUPACK

public static final int DEBUG_DUPACK
See Also:
Constant Field Values

DEBUG_SEND

public static final int DEBUG_SEND
See Also:
Constant Field Values

DEBUG_TIMEOUT

public static final int DEBUG_TIMEOUT
See Also:
Constant Field Values

DEBUG_RTT

public static final int DEBUG_RTT
See Also:
Constant Field Values

DEBUG_SACK

public static final int DEBUG_SACK
See Also:
Constant Field Values

DEBUG_SAMPLE

public static final int DEBUG_SAMPLE
See Also:
Constant Field Values

DEBUG_VEGAS

public static final int DEBUG_VEGAS
See Also:
Constant Field Values

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.

Specified by:
duplicate in interface ObjectDuplicable
Overrides:
duplicate in class Protocol

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(int max_)

getMAXCWND

public int 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()

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

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 J-Sim API

Copyright © 1998-2003 Distributed Real-time Computing Lab (DRCL). All Rights Reserved.     ~ To J-Sim Home ~