In this assignment, you will examine a TCP trace and test your understanding of its operation using real-world data.
This lab is based on the "Retransmission in TCP" lab in Jeanna Matthew's Computer Networks: Computer Protocols in Action, and a homework assignment developed by David Wetherall at the University of Washington.
You are to work individually. You may discuss the material with whomever you wish. You may obtain help from anyone you wish, but you should clearly document that help.
For this lab, you are given a trace taken on a private network. You will all work with the same trace so that we can compare our findings.
Download the capture file long-tcp-trace.tar. Run Wireshark (as yourself, not as root using sudo), and open this file.
This trace was captured using the tcpdump program on
a personal web and mail server, which has the IP address 69.66.77.232 (by Janet Davis).
On the server, the command tcpdump -s94 -w
long-tcp-trace.cap port 80
was run, so that 96 bytes of data from
each packet to or from port 80 would be saved to the file.
From another
machine, ,
the command
wget http://www.one-eyed-alien.net/~janet/rhododendron.jpg
was run,
which fetched a large image file from the web server.
Follow the TCP state machine to track the state of the server connection versus time. First, give the initial state. Then, for each state change, give the packet number, ending state, and the transition (e.g., SYN/SYN+ACK) that caused the change.
Identify the SYN packets from each side of the connection. What options are being used by the client (machine 2 above) and by the server (69.66.77.232)?
Will the connection use selective acknowledgments? How can you tell?
What is the only segment in a TCP stream without the ACK bit set? Why?
How large (how many bytes) are the TCP data segments being sent by the server?
Wireshark displays the initial TCP sequence number as zero, because this is easier for human readers to understand. This option can be disabled by right-clicking on the TCP protocol information in the packet display pane, and choosing the "Protocol preferences..." option. Uncheck the "Relative sequence numbers" option and click "Apply." What is the actual initial sequence number in each direction?
Put the relative sequence numbers back. They are much easier to read.
Do all of the packets from server to client contain the same acknowledgment number? Why or why not? How about packets from client to server?
Using the time shown by Wireshark, calculate the value of SampleRTT for the first five acknowedgments received by the server (69.66.77.232). Be sure to correctly identify which data packets are being acknowledged. Is there a trend?
Use these three SampleRTT values to compute two estimators for the TCP timeout.
Present your answers as a graph of TimeOut vs time; ideally, both estimators on one graph. Use some spreadsheet software.
Now, you'll use Wireshark to look at the sampled RTTs over the entire length of the connection. In the trace window, select a packet sent by the server. Go to the Statistics menu and choose the TCP Stream Graph submenu. From here, select the Round Trip Time Graph option. To save a copy of this image, you will need to take a screenshot. Paste the screenshot into your lab notebook.
In some places, the RTT measurements form a straight, diagonal line. What do you think is happening in those places?
Use the filter tcp.analysis.retransmission
to show only TCP packets that retransmit segments previously
transmitted. What are the packet number, time, and TCP sequence number
of the first retransmission?
Clear the filter and find the original packet that it was a retransmission of. What is the number of the packet in the trace, and what time was it sent?
How many packets in a row were retransmitted before the next transmission of new data?
Re-apply the filter tcp.analysis.retransmission.
Most Fast Retransmissions are followed by an ordinary
retransmission soon thereafter. Find a Fast Retransmission for which
this is not the case. What is its packet number and time? Then clear
the filter.
To save a copy of this image, you will need to take a screenshot. Paste the screenshot into your lab notebook.
Each dot indicates that a segment with a particular sequence number (Y-axis) was sent at that particular time. What does it mean when the graph appears to be more or less a straight, iagonal line?
Identify the time at which the first retransmission occurred. What does the graph look like at that time?
What do you think is happening between time 1.5 and 2.75? (Note that you can click on a dot in the graph to highlight the corresponding packet in the packet trace pane. Unfortunately, you can't do the opposite.) (Note also that you may want to enable the Crosshairs option in the graph option dialog to make it easier to identify packets at particular times or with particular sequence numbers.)
What do you think is happening between time 4 and time 4.5? (Be sure to look at the packets in the trace pane, not just the graph.)
Using Wireshark, take at least one trace of your own, using different-sized transfers, different client-server pairs, and/or different applications, and examine the resulting time sequence diagrams.
For each trace, explain how you produced the TCP traffic that is captured in the trace. Paste the time sequence diagram into your lab notebook and explain (or ask questions about) any interesting features, as you did in Task 3.
Is there data sent in the SYN, SYNACK, and ACK packets? Does RFC 793 prohibit data in these packets?
Why is the first loss in a TCP connection important to the congestion control algorithm?
How many data packets did the server send before the first loss (noted in Task 3, question 2 above)? What was the size of the congestion window at the time of the first loss? How did you figure this out?
Based on what you've seen, which of the TCP versions (described on page 494-495 of P&D) do you think the server running? What TCP features can you definitely identify, and what features are you not sure about? (NB: The web server is a FreeBSD box.)
How long did you spend on this assignment?
Be sure to include your answers to all questions.
Modified from a Janet Davis lab. All traces are from Janet Davis.
Last Modified Tuesday, 19-Oct-2010 15:43:00 PDT