A simulator model of a real-world system is necessarily
a simplification of the real-world system itself.
This page describes some of the limitations of the
simulation model embodied in the current release of ns-2.
(See also the web page that lists what ns protcols
are covered by the validation suite.)
The simulator model for one-way TCP is described in Section 17.1
of the ns Notes and Documentation (now called the ns Manual).
There is no dynamic window advertisement, segment and ACK number
computations are in units of packets, and there is no SYN/FIN
The simulator models for Reno, NewReno, Sack, and Fack TCP
are described briefly in Section 17.1.5
of the ns Manual.
Two-Way TCP (FullTCP)
The simulator model for two-way TCP is described in Section 17.3
of the ns Manual.
It is very similar to a 4.x BSD TCP, except there is no
dynamic window advertisement, no 2MSL-wait or persist states,
no urgent data, and no RESET segments.
Recently, SACK, Newreno, and Tahoe functionality have been
added to FullTCP.
Limitations to FullTCP:
There is not a complete validation test suite for FullTCP.
As an example, bugFix_ does not work correctly for FullTCP.
The test for BugFix_, "ns test-suite-simple-full.tcl tahoe4",
has been commented out from test-suite-simple-full.tcl.
ECN (Explicit Congestion Notification)
The model of ECN in the simulator is described in
the 1994 paper by
TCP and Explicit Congestion Notification, and
in the proposal in
A Proposal to add Explicit Congestion Notification (ECN)
The ``ecn_capable_'' bit in the simulator's packet header,
returned by ``ect()'',
corresponds to the
IP header's ECN-Capable Transport (ECT) bit.
The ``ecn_to_echo_'' bit in the simulator's packet header,
returned by ``ce()'',
corresponds to the IP header's Congestion Experienced (CE) bit
For the TCP header, the ``ecn_'' bit in the simulator's packet header,
returned by ``ecnecho()'',
corresponds to the TCP header's ECN-Echo bit.
(In the simulator, this bit is not in the TCP header for historical
The ``cong_action_'' bit in the simulator's TCP packet header,
returned by ``cong_action()'',
corresponds to the TCP header's Congestion Window Reduced (CWR) flag.
The one-way implementation in the simulator also does not have the
sender check that the receiver is ECN-capable, as would be done
in a real implementation. The two-way TCP (FullTCP) does.