This document describes the "stop-and-wait" protocol for reliable data transfer over unreliable networks. It works by having the sender wait for an acknowledgment of receipt for each packet sent before sending the next packet. If an acknowledgment is not received within a timeout period, the sender will retransmit the unacknowledged packet. This ensures reliable transfer but wastes bandwidth by only allowing one outstanding packet at a time. The document provides code to simulate this protocol using the NS2 network simulator.
This document describes the "stop-and-wait" protocol for reliable data transfer over unreliable networks. It works by having the sender wait for an acknowledgment of receipt for each packet sent before sending the next packet. If an acknowledgment is not received within a timeout period, the sender will retransmit the unacknowledged packet. This ensures reliable transfer but wastes bandwidth by only allowing one outstanding packet at a time. The document provides code to simulate this protocol using the NS2 network simulator.
This document describes the "stop-and-wait" protocol for reliable data transfer over unreliable networks. It works by having the sender wait for an acknowledgment of receipt for each packet sent before sending the next packet. If an acknowledgment is not received within a timeout period, the sender will retransmit the unacknowledged packet. This ensures reliable transfer but wastes bandwidth by only allowing one outstanding packet at a time. The document provides code to simulate this protocol using the NS2 network simulator.
This document describes the "stop-and-wait" protocol for reliable data transfer over unreliable networks. It works by having the sender wait for an acknowledgment of receipt for each packet sent before sending the next packet. If an acknowledgment is not received within a timeout period, the sender will retransmit the unacknowledged packet. This ensures reliable transfer but wastes bandwidth by only allowing one outstanding packet at a time. The document provides code to simulate this protocol using the NS2 network simulator.
Download as DOC, PDF, TXT or read online from Scribd
Download as doc, pdf, or txt
You are on page 1of 7
"Stop-and-Wait" protocol using NS2
1. Background
"stop-n-wait" (sometimes known as "positive acknowledgement with
retransmission") is the fundamental technique to provide reliable transfer under unreliable packet delivery system. 2. How this protocol works.. 1) Normal operation
After transmitting one packet, the sender waits
for anacknowledgment (ACK) from the receiver before transmitting the next one. In this way, the sender can recognize that the previous packet is transmitted successfuly and we could say "stop-n-wait" guarantees reliable transfer between nodes. To support this feature, the sender keeps a record of each packet it sends. Also, to avoid confusion caused by delayed or duplicated ACKs, "stop-n-wait" sends each packets with unique sequence numbers and receives that numbers in each ACKs.
2) Timeout
If the sender doesn't
receive ACK for previous sent packet after a certain period of time, the sender times out and retransmits t hat packet again. There are two cases when the sender doesn't receive ACK; One is when the ACK is lost and the other is when the frame itself is not transmitted. To support this feature, the sender keeps timer per each packet. 3. How it is shown in nam (network animator)..
"stop-n-wait" protocol can be shown as below in nam.
1. Packet_0 is sent and ACK_0 is received
2. Packet_1 is sent and ACK_1 is received
3. Packet_2 will be sent and be received and so on..
4. Shortcoming
The main shortcoming of the stop-and-wait algorithm is that it allows the
sender to have only one outstanding frame on the link at a time. The sender should wait till it gets an ACK of previous frame before it sends next frame. As a result, it wastes a substantial amount of network bandwidth. To improve efficiency while providing reliability, "sliding window" protocol is appeared. Stop-n-Wait ns script # stop and wait protocol in normal situation # features : labeling, annotation, nam-graph, and window size monitoring set ns [new Simulator] set n0 [$ns node] set n1 [$ns node] $ns at 0.0 "$n0 label Sender" $ns at 0.0 "$n1 label Receiver" set nf [open A1-stop-n-wait.nam w] $ns namtrace-all $nf set f [open A1-stop-n-wait.tr w] $ns trace-all $f $ns duplex-link $n0 $n1 0.2Mb 200ms DropTail $ns duplex-link-op $n0 $n1 orient right $ns queue-limit $n0 $n1 10 Agent/TCP set nam_tracevar_ true set tcp [new Agent/TCP] $tcp set window_ 1 $tcp set maxcwnd_ 1 $ns attach-agent $n0 $tcp set sink [new Agent/TCPSink] $ns attach-agent $n1 $sink $ns connect $tcp $sink set ftp [new Application/FTP] $ftp attach-agent $tcp
$ns add-agent-trace $tcp tcp
$ns monitor-agent-trace $tcp $tcp tracevar cwnd_ $ns at 0.1 "$ftp start" $ns at 3.0 "$ns detach-agent $n0 $tcp ; $ns detach-agent $n1 $sink" $ns at 3.5 "finish" $ns at 0.0 "$ns trace-annotate \"Stop and Wait with normal operation\"" $ns at 0.05 "$ns trace-annotate \"FTP starts at 0.1\"" $ns at 0.11 "$ns trace-annotate \"Send Packet_0\"" $ns at 0.35 "$ns trace-annotate \"Receive Ack_0\"" $ns at 0.56 "$ns trace-annotate \"Send Packet_1\"" $ns at 0.79 "$ns trace-annotate \"Receive Ack_1\"" $ns at 0.99 "$ns trace-annotate \"Send Packet_2\"" $ns at 1.23 "$ns trace-annotate \"Receive Ack_2 \"" $ns at 1.43 "$ns trace-annotate \"Send Packet_3\"" $ns at 1.67 "$ns trace-annotate \"Receive Ack_3\"" $ns at 1.88 "$ns trace-annotate \"Send Packet_4\"" $ns at 2.11 "$ns trace-annotate \"Receive Ack_4\"" $ns at 2.32 "$ns trace-annotate \"Send Packet_5\"" $ns at 2.55 "$ns trace-annotate \"Receive Ack_5 \"" $ns at 2.75 "$ns trace-annotate \"Send Packet_6\"" $ns at 2.99 "$ns trace-annotate \"Receive Ack_6\"" $ns at 3.1 "$ns trace-annotate \"FTP stops\"" proc finish {} { global ns nf $ns flush-trace close $nf puts "filtering..." exec tclsh ../ns-allinone-2.1b5/nam-1.0a7/bin/namfilter.tcl A1-stop-n-wait.nam puts "running nam..." exec nam A1-stop-n-wait.nam & exit 0 } $ns run