TcpConnection

Package: inet.transportlayer.tcp

TcpConnection

simple module

C++ definition

Represents a single TCP connection in the TCP protocol implementation. Implements the TCP state machine and handles connection establishment, data transfer, flow control, congestion control, and connection termination. Provides extensive statistics collection for various TCP metrics including window sizes, sequence numbers, RTT measurements, and congestion parameters.

Inheritance diagram

The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.

Extends

Name Type Description
SimpleModule simple module

Base module for all INET simple modules.

Parameters

Name Type Default value Description
displayStringTextFormat string ""

Determines the text that is written on top of the submodule, supports displaying pars, watches, and module-specific information

Properties

Name Value Description
class TcpConnection

Signals

Name Type Unit Description
rcvOooSeg

Number of received out-of-order segments

cwnd

TcpAlgorithm signals:

tcpRcvQueueDrops

Number of drops in TCP receive queue

rcvSeq

Received seqNo

rcvNASeg

Number of received not acceptable segments

tcpRcvPayloadBytes

Amount of payload bytes received (including duplicates, out of order, etc.) for TCP throughput

rttvar

Will record RTT variance (rttvar)

load

Will record load (currently only with DcTcp)

rcvAck

Received ackNo (=snd_una)

sndAck

Sent ackNo

pipe

Current sender's estimate of bytes outstanding in the network

state

FSM state

unacked

Number of bytes unacknowledged

ssthresh

Will record changes to ssthresh

calcLoad

Will record calcLoad (currently only with DcTcp)

tcpRcvQueueBytes

Current amount of used bytes in TCP receive queue

srtt

Will record smoothed RTT

markingProb

Will record marking probability (currently only with DcTcp)

sndSacks

Number of sent Sacks

rto

Will record retransmission timeout

sackedBytes

Current number of received sacked bytes

rcvSacks

Number of received Sacks

rtt

Will record measured RTT

dupAcks

Current number of received dupAcks

numRtos

Will record total number of RTOs

rcvWnd

Rcv_wnd

sndNxt

Sent seqNo

rcvAdv

Current advertised window (=rcv_adv)

sndWnd

Snd_wnd

Statistics

Name Title Source Record Unit Interpolation Mode Description
rcvOooSeg vector sample-hold

Number of received out-of-order segments

cwnd vector sample-hold

Will record changes to snd_cwnd

tcpRcvQueueDrops vector sample-hold

Number of drops in tcp receive queue

rcvSeq vector sample-hold

Received seqNo

rcvNASeg vector sample-hold

Number of received not acceptable segments

tcpRcvPayloadBytes vector sample-hold

Current amount of payload bytes received (including duplicates, out of order etc) for TCP throughput

rttvar vector sample-hold

Will record RTT variance (rttvar)

load vector sample-hold

Will record load (currently only with DcTcp)

rcvAck vector sample-hold

Received ackNo (=snd_una)

sndAck vector sample-hold

Sent ackNo

pipe vector sample-hold

Current sender's estimate of bytes outstanding in the network

state vector sample-hold
unacked vector sample-hold

Number of bytes unacknowledged

ssthresh vector sample-hold

Will record changes to ssthresh

calcLoad vector sample-hold

Will record calcLoad (currently only with DcTcp)

tcpRcvQueueBytes vector sample-hold

Current amount of used bytes in tcp receive queue

srtt vector sample-hold

Will record smoothed RTT

markingProb vector sample-hold

Will record marking probability (currently only with DcTcp)

sndSacks vector sample-hold

Number of sent Sacks

rto vector sample-hold

Will record retransmission timeout

sackedBytes vector sample-hold

Current number of received sacked bytes

rcvSacks vector sample-hold

Number of received Sacks

rtt vector sample-hold

Will record measured RTT

dupAcks vector sample-hold

Current number of received dupAcks

numRtos vector sample-hold

Will record total number of RTOs

rcvWnd vector sample-hold

Rcv_wnd

sndNxt vector sample-hold

Sent seqNo

rcvAdv vector sample-hold

Current advertised window (=rcv_adv)

sndWnd vector sample-hold

Snd_wnd

Source code

//
// Represents a single TCP connection in the TCP protocol implementation.
// Implements the TCP state machine and handles connection establishment,
// data transfer, flow control, congestion control, and connection termination.
// Provides extensive statistics collection for various TCP metrics including
// window sizes, sequence numbers, RTT measurements, and congestion parameters.
//
simple TcpConnection extends SimpleModule
{
    parameters:
        @class(TcpConnection);
        @signal[state];    // FSM state
        @signal[sndWnd];    // Snd_wnd
        @signal[rcvWnd];    // Rcv_wnd
        @signal[rcvAdv];    // Current advertised window (=rcv_adv)
        @signal[sndNxt];    // Sent seqNo
        @signal[sndAck];    // Sent ackNo
        @signal[rcvSeq];    // Received seqNo
        @signal[rcvAck];    // Received ackNo (=snd_una)
        @signal[unacked];    // Number of bytes unacknowledged
        @signal[dupAcks];    // Current number of received dupAcks
        @signal[pipe];    // Current sender's estimate of bytes outstanding in the network
        @signal[sndSacks];    // Number of sent Sacks
        @signal[rcvSacks];    // Number of received Sacks
        @signal[rcvOooSeg];    // Number of received out-of-order segments
        @signal[rcvNASeg];    // Number of received not acceptable segments
        @signal[sackedBytes];    // Current number of received sacked bytes
        @signal[tcpRcvQueueBytes];    // Current amount of used bytes in TCP receive queue
        @signal[tcpRcvQueueDrops];    // Number of drops in TCP receive queue
        @signal[tcpRcvPayloadBytes];   // Amount of payload bytes received (including duplicates, out of order, etc.) for TCP throughput

        //TcpAlgorithm signals:
        @signal[cwnd];    // Will record changes to snd_cwnd
        @signal[ssthresh];    // Will record changes to ssthresh
        @signal[rtt];    // Will record measured RTT
        @signal[srtt];    // Will record smoothed RTT
        @signal[rttvar];    // Will record RTT variance (rttvar)
        @signal[rto];    // Will record retransmission timeout
        @signal[numRtos];    // Will record total number of RTOs

        @signal[load];   // Will record load (currently only with DcTcp)
        @signal[calcLoad];    // Will record calcLoad (currently only with DcTcp)
        @signal[markingProb];   // Will record marking probability (currently only with DcTcp)

        @statistic[state](record=vector; interpolationmode=sample-hold);
        @statistic[sndWnd](record=vector; interpolationmode=sample-hold);    // Snd_wnd
        @statistic[rcvWnd](record=vector; interpolationmode=sample-hold);    // Rcv_wnd
        @statistic[rcvAdv](record=vector; interpolationmode=sample-hold);    // Current advertised window (=rcv_adv)
        @statistic[sndNxt](record=vector; interpolationmode=sample-hold);    // Sent seqNo
        @statistic[sndAck](record=vector; interpolationmode=sample-hold);    // Sent ackNo
        @statistic[rcvSeq](record=vector; interpolationmode=sample-hold);    // Received seqNo
        @statistic[rcvAck](record=vector; interpolationmode=sample-hold);    // Received ackNo (=snd_una)
        @statistic[unacked](record=vector; interpolationmode=sample-hold);    // Number of bytes unacknowledged
        @statistic[dupAcks](record=vector; interpolationmode=sample-hold);    // Current number of received dupAcks
        @statistic[pipe](record=vector; interpolationmode=sample-hold);    // Current sender's estimate of bytes outstanding in the network
        @statistic[sndSacks](record=vector; interpolationmode=sample-hold);    // Number of sent Sacks
        @statistic[rcvSacks](record=vector; interpolationmode=sample-hold);    // Number of received Sacks
        @statistic[rcvOooSeg](record=vector; interpolationmode=sample-hold);    // Number of received out-of-order segments
        @statistic[rcvNASeg](record=vector; interpolationmode=sample-hold);    // Number of received not acceptable segments
        @statistic[sackedBytes](record=vector; interpolationmode=sample-hold);    // Current number of received sacked bytes
        @statistic[tcpRcvQueueBytes](record=vector; interpolationmode=sample-hold);    // Current amount of used bytes in tcp receive queue
        @statistic[tcpRcvQueueDrops](record=vector; interpolationmode=sample-hold);    // Number of drops in tcp receive queue
        @statistic[tcpRcvPayloadBytes](record=vector; interpolationmode=sample-hold);    // Current amount of payload bytes received (including duplicates, out of order etc) for TCP throughput

        @statistic[cwnd](record=vector; interpolationmode=sample-hold);    // Will record changes to snd_cwnd
        @statistic[ssthresh](record=vector; interpolationmode=sample-hold);    // Will record changes to ssthresh
        @statistic[rtt](record=vector; interpolationmode=sample-hold);    // Will record measured RTT
        @statistic[srtt](record=vector; interpolationmode=sample-hold);    // Will record smoothed RTT
        @statistic[rttvar](record=vector; interpolationmode=sample-hold);    // Will record RTT variance (rttvar)
        @statistic[rto](record=vector; interpolationmode=sample-hold);    // Will record retransmission timeout
        @statistic[numRtos](record=vector; interpolationmode=sample-hold);    // Will record total number of RTOs

        @statistic[load](record=vector; interpolationmode=sample-hold);    // Will record load (currently only with DcTcp)
        @statistic[calcLoad](record=vector; interpolationmode=sample-hold);    // Will record calcLoad (currently only with DcTcp)
        @statistic[markingProb](record=vector; interpolationmode=sample-hold);    // Will record marking probability (currently only with DcTcp)
}

File: src/inet/transportlayer/tcp/TcpConnection.ned