diff options
Diffstat (limited to 'usth/ICT3.16/labworks/2.md')
-rw-r--r-- | usth/ICT3.16/labworks/2.md | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/usth/ICT3.16/labworks/2.md b/usth/ICT3.16/labworks/2.md new file mode 100644 index 0000000..02a7ae9 --- /dev/null +++ b/usth/ICT3.16/labworks/2.md @@ -0,0 +1,180 @@ +# Network Simulation: Labwork 2 +Consider the ns-3 example `tutorial/first.cc`. + +## Logging +Enable LOG_LEVEL_FUNCTION for UdpEchoServer and UdpEchoClient: + +```diff +diff --git a/examples/tutorial/first.cc b/examples/tutorial/first.cc +index f68eb6a8e..38a277a69 100644 +--- a/examples/tutorial/first.cc ++++ b/examples/tutorial/first.cc +@@ -38,8 +38,8 @@ main (int argc, char *argv[]) + cmd.Parse (argc, argv); + + Time::SetResolution (Time::NS); +- LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO); +- LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO); ++ LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_FUNCTION); ++ LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_FUNCTION); + + NodeContainer nodes; + nodes.Create (2); +``` + +List out functions used by the two classes: + +```console +$ waf --run first.cc 2>&1 | grep UdpEcho +UdpEchoServerApplication:UdpEchoServer(0x55d1742cdd30) +UdpEchoClientApplication:UdpEchoClient(0x55d1742f4820) +UdpEchoClientApplication:SetDataSize(0x55d1742f4820, 1024) +UdpEchoServerApplication:StartApplication(0x55d1742cdd30) +UdpEchoClientApplication:StartApplication(0x55d1742f4820) +UdpEchoClientApplication:ScheduleTransmit(0x55d1742f4820, +0ns) +UdpEchoClientApplication:Send(0x55d1742f4820) +UdpEchoServerApplication:HandleRead(0x55d1742cdd30, 0x55d1742bdcf0) +UdpEchoClientApplication:HandleRead(0x55d1742f4820, 0x55d1742ba420) +UdpEchoClientApplication:StopApplication(0x55d1742f4820) +UdpEchoServerApplication:StopApplication(0x55d1742cdd30) +UdpEchoClientApplication:DoDispose(0x55d1742f4820) +UdpEchoServerApplication:DoDispose(0x55d1742cdd30) +UdpEchoClientApplication:~UdpEchoClient(0x55d1742f4820) +UdpEchoServerApplication:~UdpEchoServer(0x55d1742cdd30) +``` + +## Attributes +1. Set up data rate of 10 Mbps and propagation delay of 10 ms: + + ```diff + diff --git a/examples/tutorial/first.cc b/examples/tutorial/first.cc + index f68eb6a8e..973b6fc14 100644 + --- a/examples/tutorial/first.cc + +++ b/examples/tutorial/first.cc + @@ -45,8 +45,8 @@ main (int argc, char *argv[]) + nodes.Create (2); + + PointToPointHelper pointToPoint; + - pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps")); + - pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms")); + + pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("10Mbps")); + + pointToPoint.SetChannelAttribute ("Delay", StringValue ("10ms")); + + NetDeviceContainer devices; + devices = pointToPoint.Install (nodes); + ``` + +2. Run the updated script and compute the average delay of received packets + at the server and client: + + ```console + $ waf --run first.cc + At time +2s client sent 1024 bytes to 10.1.1.2 port 9 + At time +2.01084s server received 1024 bytes from 10.1.1.1 port 49153 + At time +2.01084s server sent 1024 bytes to 10.1.1.1 port 49153 + At time +2.02169s client received 1024 bytes from 10.1.1.2 port 9 + ``` + +3. Compare the average delay of received packets at server and client + between device and channel attributes of (5 Mbps, 1 ms) and (10 Mbps, 10 ms) + with the number of packets set to 100: + + ```diff + diff --git a/examples/tutorial/first.cc b/examples/tutorial/first.cc + index f68eb6a8e..62169f460 100644 + --- a/examples/tutorial/first.cc + +++ b/examples/tutorial/first.cc + @@ -66,8 +66,8 @@ main (int argc, char *argv[]) + serverApps.Stop (Seconds (10.0)); + + UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9); + - echoClient.SetAttribute ("MaxPackets", UintegerValue (1)); + - echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0))); + + echoClient.SetAttribute ("MaxPackets", UintegerValue (100)); + + echoClient.SetAttribute ("Interval", TimeValue (Seconds (0.0))); + echoClient.SetAttribute ("PacketSize", UintegerValue (1024)); + + ApplicationContainer clientApps = echoClient.Install (nodes.Get (0)); + ``` + + To make best use of the bandwidth, we send all packets at the same time. + The average delay of received packets is calculated as follows: + + ```bash + waf --run first.cc 2>&1 | + sed -rn 's/.*\+2([.0-9]+)s client received .*/\1/p' | + awk '{sum+=$1} END {print "Packet delivery ratio =", NR, + "%\nAverage delay =", sum/NR/2*1000, "ms"}' + ``` + + For attributes of (5 Mbps, 1 ms), we get: + + Packet delivery ratio = 100 % + Average delay = 44.4248 ms + + For attributes of (10 Mbps, 10 ms), we get: + + Packet delivery ratio = 100 % + Average delay = 31.7124 ms + + In short, the latter has lower *mean* latency. + +## Packet Traces Capturing +### ASCII Tracing +We revert to the initial configuration (10 Mbps rate, 10 ms delay) +and apply the following patch: + +```diff +diff --git a/examples/tutorial/first.cc b/examples/tutorial/first.cc +index f68eb6a8e..a63f43835 100644 +--- a/examples/tutorial/first.cc ++++ b/examples/tutorial/first.cc +@@ -74,6 +74,9 @@ main (int argc, char *argv[]) + clientApps.Start (Seconds (2.0)); + clientApps.Stop (Seconds (10.0)); + ++ AsciiTraceHelper ascii; ++ pointToPoint.EnableAsciiAll (ascii.CreateFileStream ("first.tr")); ++ + Simulator::Run (); + Simulator::Destroy (); + return 0; +``` + +The content of `first.tr` is pasted below: + + + 2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.1 > 10.1.1.2) ns3::UdpHeader (length: 1032 49153 > 9) Payload (size=1024) + - 2 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.1 > 10.1.1.2) ns3::UdpHeader (length: 1032 49153 > 9) Payload (size=1024) + r 2.01084 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/MacRx ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.1 > 10.1.1.2) ns3::UdpHeader (length: 1032 49153 > 9) Payload (size=1024) + + 2.01084 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Enqueue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.2 > 10.1.1.1) ns3::UdpHeader (length: 1032 9 > 49153) Payload (size=1024) + - 2.01084 /NodeList/1/DeviceList/0/$ns3::PointToPointNetDevice/TxQueue/Dequeue ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.2 > 10.1.1.1) ns3::UdpHeader (length: 1032 9 > 49153) Payload (size=1024) + r 2.02169 /NodeList/0/DeviceList/0/$ns3::PointToPointNetDevice/MacRx ns3::PppHeader (Point-to-Point Protocol: IP (0x0021)) ns3::Ipv4Header (tos 0x0 DSCP Default ECN Not-ECT ttl 64 id 0 protocol 17 offset (bytes) 0 flags [none] length: 1052 10.1.1.2 > 10.1.1.1) ns3::UdpHeader (length: 1032 9 > 49153) Payload (size=1024) + +It can be seen that the total packet size is 1052 bytes +and thus the delay for packet receival can be computed as + + 1052 B / 10 Mbps + 10 ms = 0.8416 ms + 10 ms = 10.8416 ms + +which matches the simulated figures. + +### PCAP Tracing +The following patch is used for PCAP tracing: + +```diff +diff --git a/examples/tutorial/first.cc b/examples/tutorial/first.cc +index f68eb6a8e..1f5a7fa08 100644 +--- a/examples/tutorial/first.cc ++++ b/examples/tutorial/first.cc +@@ -74,6 +74,8 @@ main (int argc, char *argv[]) + clientApps.Start (Seconds (2.0)); + clientApps.Stop (Seconds (10.0)); + ++ pointToPoint.EnablePcapAll ("first"); ++ + Simulator::Run (); + Simulator::Destroy (); + return 0; +``` + +## Results +The result of each simulation has been detailed in the respective section. |