TCP Reno behaviour

26 views
Skip to first unread message

Tudor Stanciu

unread,
Jun 21, 2016, 3:41:18 PM6/21/16
to OMNeT++ Users
Hi guys,

I am trying to simulate how TCP Reno behaves. I am working with INET. The simulation is fairly simple: one client, one router and one server. The problem is when analyzing the results.
I noticed that if I drop different packets, the output graphic of the cwnd looks exactly the same. Also I cannot really tell when the packet drop happens and when the cwnd alongside the sstresh is halfed.

I am leaving here my NED and INI files, alongside with a couple of screenshots of the results with the hope that someone can shed some light on the matter. Did I do something wrong in the INI file? Did I missuse the dropsVector function?
Do I not know how to record data? Am I a dumbass? Please someone just give me a hint.

The graphs look the same, but one is for **.client.ppp[*].outputHook[0].dropsVector = "13;", and the other for **.client.ppp[*].outputHook[0].dropsVector = "44;"

NED
-----------------------------------------------------------
package tcprenotest;
import inet.networklayer.configurator.ipv4.FlatNetworkConfigurator;
import inet.networklayer.configurator.ipv4.IPv4NetworkConfigurator;
import inet.node.inet.Router;
import inet.node.inet.StandardHost;
import ned.DatarateChannel;


//
// TODO documentation
//
network Reno_Test
{
    @display("bgb=764,473");
    submodules:
        router: Router {
            @display("p=380,207");
        }
        client: StandardHost {
            @display("p=163,207");
        }
        server: StandardHost {
            @display("p=611,207;i=device/server");
        }
        configurator: IPv4NetworkConfigurator {
            @display("p=214,66");
        }
    connections:
        client.pppg++ <--> DatarateChannel {  delay = 0.03s; datarate = 2Mbps; } <--> router.pppg++;
        router.pppg++ <--> DatarateChannel {  delay = 0.03s; datarate = 2Mbps; } <--> server.pppg++;
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
INI
------------------------------------------------------------------------------------------------------------------------------------------------------------------
network = tcprenotest.Reno_Test
warnings = true
sim-time-limit = 2.1s

cmdenv-event-banners = true   # for normal (non-express) mode only

tkenv-plugin-path = ../../../etc/plugins

#
# Network specific settings
#

# ip settings
**.ip.procDelay = 0s
**.forwarding = false


#ARP Settings
**.arp.retryTimeout = 1s
**.arp.retryCount = 3
**.arp.cacheTimeout = default

#NIC Settings
**.ppp[*].queueType = "DropTailQueue"
**.ppp[*].queue.frameCapacity = 100

# hookType settings
**.ppp[*].numOutputHooks = 1
**.ppp[*].outputHook[0].typename = "OrdinalBasedDropper" # Nop | ThruputMeter | OrdinalBasedDropper | OrdinalBasedDuplicator

#tcp client Settings
**.client.numTcpApps = 1
**.client.tcpApp[*].typename = "TCPSessionApp"
**.client.tcpApp[*].sendBytes = 100MiB
**.client.tcpApp[*].active = true
**.client.tcpApp[*].localPort = 10020
**.client.tcpApp[*].connectAddress = "server"
**.client.tcpApp[*].connectPort = 10021
**.client.tcpApp[*].tOpen = 0s
**.client.tcpApp[*].tSend = 0s
**.client.tcpApp[*].tClose = 0s
**.client.tcpApp[*].sendScript = ""

#tcp server settings
**.server.numTcpApps = 1
**.server.tcpApp[*].typename = "TCPSinkApp"
**.server.tcpApp[*].localPort = 10021


# tcp settings
**.tcp.advertisedWindow = 65535                      # in bytes, corresponds with the maximal receiver buffer capacity (Note: normally, NIC queues should be at least this size)
**.tcp.delayedAcksEnabled = false                    # delayed ACK algorithm (RFC 1122) enabled/disabled
**.tcp.nagleEnabled = false                           # Nagle's algorithm (RFC 896) enabled/disabled
**.tcp.limitedTransmitEnabled = false                # Limited Transmit algorithm (RFC 3042) enabled/disabled (can be used for TCPReno/TCPTahoe/TCPNewReno/TCPNoCongestionControl)
**.tcp.increasedIWEnabled = false                    # Increased Initial Window (RFC 3390) enabled/disabled
**.tcp.sackSupport = false                            # Selective Acknowledgment (RFC 2018, 2883, 3517) support (header option) (SACK will be enabled for a connection if both endpoints support it)
**.tcp.windowScalingSupport = false                  # Window Scale (RFC 1323) support (header option) (WS will be enabled for a connection if both endpoints support it)
**.tcp.timestampSupport = false                      # Timestamps (RFC 1323) support (header option) (TS will be enabled for a connection if both endpoints support it)
**.tcp.mss = 500                                     # Maximum Segment Size (RFC 793) (header option)
**.tcp.tcpAlgorithmClass = "TCPReno"                 # TCPReno/TCPTahoe/TCPNewReno/TCPNoCongestionControl/DumbTCP
**.tcp.recordStats = true    


**.client.ppp[*].outputHook[0].dropsVector = "13;"


Reply all
Reply to author
Forward
0 new messages