Comment at the top of ns-3.38/examples/tcp/tcp-validation.cc // This program is designed to observe long-running TCP congestion control // behavior over a configurable bottleneck link. The program is also // instrumented to check program data against validated results, when // the validation option is enabled. // // ---> downstream (primary data transfer from servers to clients) // <--- upstream (return acks and ICMP echo response) // // ---- bottleneck link ---- // servers ---| WR |--------------------| LR |--- clients // ---- ---- // ns-3 node IDs: // nodes 0-2 3 4 5-7 // // - The box WR is notionally a WAN router, aggregating all server links // - The box LR is notionally a LAN router, aggregating all client links // - Three servers are connected to WR, three clients are connected to LR // // clients and servers are configured for ICMP measurements and TCP throughput // and latency measurements in the downstream direction // // All link rates are enforced by a point-to-point (P2P) ns-3 model with full // duplex operation. Dynamic queue limits // (BQL) are enabled to allow for queueing to occur at the priority queue layer; // the notional P2P hardware device queue is limited to three packets. // // One-way link delays and link rates // ----------------------------------- // (1) server to WR links, 1000 Mbps, 1us delay // (2) bottleneck link: configurable rate, configurable delay // (3) client to LR links, 1000 Mbps, 1us delay // // By default, ns-3 FQ-CoDel model is installed on all interfaces, but // the bottleneck queue uses CoDel by default and is configurable. // // The ns-3 FQ-CoDel model uses ns-3 defaults: // - 100ms interval // - 5ms target // - drop batch size of 64 packets // - minbytes of 1500 // // Default simulation time is 70 sec. For single flow experiments, the flow is // started at simulation time 5 sec; if a second flow is used, it starts // at 15 sec. // // ping frequency is set at 100ms. // // A command-line option to enable a step-threshold CE threshold // from the CoDel queue model is provided. // // Measure: // - ping RTT // - TCP RTT estimate // - TCP throughput // // IPv4 addressing // ---------------------------- // pingServer 10.1.1.2 (ping source) // firstServer 10.1.2.2 (data sender) // secondServer 10.1.3.2 (data sender) // pingClient 192.168.1.2 // firstClient 192.168.2.2 // secondClient 192.168.3.2 // // Program Options: // --------------- // --firstTcpType: first TCP type (cubic, dctcp, or reno) [cubic] // --secondTcpType: second TCP type (cubic, dctcp, or reno) [] // --queueType: bottleneck queue type (fq, codel, pie, or red) [codel] // --baseRtt: base RTT [+80ms] // --ceThreshold: CoDel CE threshold (for DCTCP) [+1ms] // --linkRate: data rate of bottleneck link [50000000bps] // --stopTime: simulation stop time [+1.16667min] // --queueUseEcn: use ECN on queue [false] // --enablePcap: enable Pcap [false] // --validate: validation case to run [] // // validation cases (and syntax of how to run): // ------------ // Case 'dctcp-10ms': DCTCP single flow, 10ms base RTT, 50 Mbps link, ECN enabled, CoDel: // ./ns3 run 'tcp-validation --firstTcpType=dctcp --linkRate=50Mbps --baseRtt=10ms // --queueUseEcn=1 --stopTime=15s --validate=1 --validation=dctcp-10ms' // - Throughput between 48 Mbps and 49 Mbps for time greater than 5.6s // - DCTCP alpha below 0.1 for time greater than 5.4s // - DCTCP alpha between 0.06 and 0.085 for time greater than 7s // // Case 'dctcp-80ms': DCTCP single flow, 80ms base RTT, 50 Mbps link, ECN enabled, CoDel: // ./ns3 run 'tcp-validation --firstTcpType=dctcp --linkRate=50Mbps --baseRtt=80ms // --queueUseEcn=1 --stopTime=40s --validate=1 --validation=dctcp-80ms' // - Throughput less than 20 Mbps for time less than 14s // - Throughput less than 48 Mbps for time less than 30s // - Throughput between 47.5 Mbps and 48.5 for time greater than 32s // - DCTCP alpha above 0.1 for time less than 7.5 // - DCTCP alpha below 0.01 for time greater than 11 and less than 30 // - DCTCP alpha between 0.015 and 0.025 for time greater than 34 // // Case 'cubic-50ms-no-ecn': CUBIC single flow, 50ms base RTT, 50 Mbps link, ECN disabled, CoDel: // ./ns3 run 'tcp-validation --firstTcpType=cubic --linkRate=50Mbps --baseRtt=50ms // --queueUseEcn=0 --stopTime=20s --validate=1 --validation=cubic-50ms-no-ecn' // - Maximum value of cwnd is 511 segments at 5.4593 seconds // - cwnd decreases to 173 segments at 5.80304 seconds // - cwnd reaches another local maxima around 14.2815 seconds of 236 segments // - cwnd reaches a second maximum around 18.048 seconds of 234 segments // // Case 'cubic-50ms-ecn': CUBIC single flow, 50ms base RTT, 50 Mbps link, ECN enabled, CoDel: // ./ns3 run 'tcp-validation --firstTcpType=cubic --linkRate=50Mbps --baseRtt=50ms // --queueUseEcn=0 --stopTime=20s --validate=1 --validation=cubic-50ms-no-ecn' // - Maximum value of cwnd is 511 segments at 5.4593 seconds // - cwnd decreases to 173 segments at 5.7939 seconds // - cwnd reaches another local maxima around 14.3477 seconds of 236 segments // - cwnd reaches a second maximum around 18.064 seconds of 234 segments