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;"