在本实验中,我们将详细研究著名的 TCP 协议的行为。 我们将通过从您的电脑向远程服务器传输一份 150KB 的文件(一份 Lewis Carrol 的“爱丽丝梦游仙境”文本),并分析 TCP 传输内容的发送和接收过程来实现。 我们将研究 TCP 对序列和确认号的使用,以提供可靠的数据传输;我们将看到 TCP 的拥塞控制算法 – 慢启动和拥塞避免 – 在过程中,我们将看看 TCP 的接收器发送流量控制的机制。 我们还将简要地观察 TCP 连线的设置,我们还会研究计算机和服务器之间 TCP 连线的性能(吞吐量和往返时间)。
在开始本实验之前,您应该先查看课本中的第 3.5 和 3.7 节。
在开始我们对 TCP 的探索之前,我们需要使用 Wireshark 来获取文件从计算机到远程服务器的 TCP 传输的数据包内容。您可以通过访问一个网页,在网页上输入您计算机上⬀储的文件名称(包含 Alice in Wonderland 的 ASCII 文本),然后使用HTTP POST 方法将文件传输到 Web 服务器(见文中第 2.2.3 节)。我们使用POST 方法而不是 GET 方法,因为我们希望将大量数据从您的计算机传输到另一台计算机。当然,我们将在此期间运行 Wireshark 以获取从您的计算机发送和接收的 TCP 区段的内容。
执行以下步骤:
启动 Web 浏览器。 在 http://gaia.cs.umass.edu/wireshark-labs/alice.txt 查看Alice in Wonderland 的 ASCII 档案文件。 将此文件⬀储在计算机上的某个位置。
接下来去 http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html.
你将会看到如下图的网页
使用此表单中的“Browse…”按钮在计算机上输入包含 Alice in Wonderland 的文件名(完整路径名)(或手动执行)。这个时候请不要按下“Upload alice.txt file”按钮。
启动 Wireshark 并开始数据包捕获 (Capture-> Start),然后在 Wireshark 数据包捕获选项视窗上按 OK (我们不需要在此处选择任何选项)(详细操作因Wireshark 版本略有不同)。
返回浏览器,按“Upload alice.txt file”按钮将文件上传到 gaia.cs.umass.edu服务器。文件上传后,浏览器窗口中会显示一条简短的祝贺消息。
停止 Wireshark 数据包捕获。 您的 Wireshark 视窗内容应该类似于下面显示的内容。
如果您无法在实际的网路上运行 Wireshark,则可以下载在作者的计算机上执行上述步骤时捕获的数据包跟踪文件。当您探索下面的问题时,即使您已经捕获了自己的传输内容并使用它来回答下面的问题,您也可能会发现这份下载的跟踪包很有参考价值。
在详细分析 TCP 连接的行为之前,让我们先概观看一下跟踪包的内容。
您应该看到的是计算机和 gaia.cs.umass.edu 之间的一系列 TCP 和 HTTP 讯息。您应该看到包含 SYN 讯息的初始三次握手。您应该看到 HTTP POST 讯息。根据您使用的 Wireshark 的版本,您可能会看到从您的计算机向 gaia.cs.umass.edu 发送一系列“HTTP Continuation”讯息。 回想一下我们在早期的 HTTP Wireshark 实验室中的讨论,这不是 HTTP Continuation 消息 – 这是 Wireshark 指示有多个 TCP 区段用于承载单个 HTTP 讯息的方式。在 Wireshark 的最新版本中,您将在 Wireshark显示的 Info 列中看到“[重新组装的 PDU 的 TCP 段]”,以指示此 TCP 区段包含属于上层协议讯息的数据(在我们的示例中为,HTTP)。您还应该看到从gaia.cs.umass.edu 返回到您的计算机的 TCP ACK 区段。
利用下载的 http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 档案,打开其中的 Wireshark 捕获的数据包文件 tcp-ethereal-trace-1 来回答以下问题(即下载跟踪包并打开 Wireshark 中的跟踪包;见附注 2)。在回答问题时,您应该提交用于回答问题的跟踪内的数据包的列印输出。 加上适当的注释以解释您的答案。 要印出数据包,请使用文件 - >列印,选择仅选定数据包,选择数据包摘要行,然后选择回答问题所需的最小数据包详细信息量。
如果您能够连网并使用 Wireshark 创建自己的跟踪包,请回答以下问题:
客户端计算机(源)将文件传输到 gaia.cs.umass.edu 所使用的 IP 地址和TCP 端口号是多少?
略
由于本实验是关于 TCP 而不是 HTTP,让我们更改 Wireshark 的“捕获数据包列表”视窗,以便显示有关包含 HTTP 讯息的 TCP 区段的信息,而不是 HTTP 讯息。 要让 Wireshark 执行此操作,请选择 Analyze-> Enabled Protocols。 然后取消勾选 HTTP 框,并选择确定。 您现在应该看到一个 Wireshark 窗口,如下所示:
这就是我们正在寻找的 – 在您的计算机和 gaia.cs.umass.edu 之间发送的一系列 TCP区段。我们将使用您捕获的数据包跟踪(和/或 http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 中的数据包跟踪 tcp-ethereal-trace-1:请参阅前面的脚注 )
在本实验的其余部分研究 TCP 行为。
回答下列关于 TCP 区段的问题:
用于在客户端计算机和 gaia.cs.umass.edu 之间启动 TCP 连接的 TCP SYN 区段的序列号是什么? 将区段标识为 SYN 区段的区段有什么功能?
gaia.cs.umass.edu 发送给客户端计算机以回复 SYN 的 SYNACK 区段的序列号是多少? SYNACK 区段中的 Acknowledgment 栏位的值是多少?Gaia.cs.umass.edu 是如何确定此 Acknowledgment 的数值的? 在将区段标识为 SYNACK 区段的区段在连线中有什么功能?
包含 HTTP POST 命令的 TCP 区段的序列号是多少? 请注意,为了找到POST 命令,您需要深入了解 Wireshark 窗口底部的数据包内容⫿段,在其DATA 栏位中查找带有“POST”的区段。
将包含 HTTP POST 的 TCP 区段视为 TCP 连接中的第一个区段。在这个TCP 连线中前六个 TCP 区段的序列号是什么(包括包含 HTTP POST 的段)? 每区段发送的时间是什么时候? 收到的每个区段的 ACK 是什么时候? 鉴于发送每个 TCP 区段的时间与收到确认的时间之间的差异,六个区段中每个区段的 RTT 值是多少? 收到每个 ACK 后,EstimatedRTT 值(参见本节中的第 3.5.3 节,第 242 页)是什么? 假设第一个 EstimatedRTT 的值等于第一个区段的测量 RTT,然后使用课本第 242 页的 EstimatedRTT 公式计算所有后续区段。(译注:中译本的页数可能不同)
**注意:**Wireshark有一个很好的功能,允许您为发送的每个 TCP 区段绘制RTT。 在从客户端发送到gaia.cs.umass.edu服务器的“捕获的数据包列表”窗口中选择一个TCP段。 然后选择:Statistics-> TCP Stream Graph-> Round Trip Time Graph。
ACK时间在SEQ/ACK analysis字段中,其中frame
后的数字为对应的 PSH 帧的回应
PSH No | 序列号 | 发送时间 | 回应 No | ACK时间 | RTT | EstimatedRTT |
---|---|---|---|---|---|---|
4 | 1 | 0.026477 | 6 | 0.053937000 | 0.027460000 | 0.02746 |
5 | 566 | 0.041737 | 9 | 0.077294000 | 0.035557000 | 0.028472125 |
7 | 2026 | 0.054026 | 12 | 0.124085000 | 0.070059000 | 0.033670484375 |
8 | 3486 | 0.054690 | 14 | 0.169118000 | 0.114428000 | 0.043765173828125 |
10 | 4946 | 0.077405 | 15 | 0.217299000 | 0.139894000 | 0.05578127709960937 |
11 | 6406 | 0.078157 | 16 | 0.267802000 | 0.189645000 | 0.07251424246215821 |
E s t i m a t e d R T T = 0.875 ∗ E s t i m a t e d R T T + 0.125 ∗ S a m p l e R T T EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * SampleRTT EstimatedRTT=0.875∗EstimatedRTT+0.125∗SampleRTT
EstimatedRTT after the receipt of the ACK of segment 1:
E s t i m a t e d R T T = R T T f o r S e g m e n t 1 = 0.02746 s e c o n d EstimatedRTT = RTT for Segment 1 = 0.02746 second EstimatedRTT=RTTforSegment1=0.02746second
EstimatedRTT after the receipt of the ACK of segment 2:
E s t i m a t e d R T T = 0.875 ∗ 0.02746 + 0.125 ∗ 0.035557 = 0.0285 EstimatedRTT = 0.875 * 0.02746 + 0.125 * 0.035557 = 0.0285 EstimatedRTT=0.875∗0.02746+0.125∗0.035557=0.0285
EstimatedRTT after the receipt of the ACK of segment 3:
E s t i m a t e d R T T = 0.875 ∗ 0.0285 + 0.125 ∗ 0.070059 = 0.0337 EstimatedRTT = 0.875 * 0.0285 + 0.125 * 0.070059 = 0.0337 EstimatedRTT=0.875∗0.0285+0.125∗0.070059=0.0337
EstimatedRTT after the receipt of the ACK of segment 4:
E s t i m a t e d R T T = 0.875 ∗ 0.0337 + 0.125 ∗ 0.11443 = 0.0438 EstimatedRTT = 0.875 * 0.0337+ 0.125 * 0.11443 = 0.0438 EstimatedRTT=0.875∗0.0337+0.125∗0.11443=0.0438
EstimatedRTT after the receipt of the ACK of segment 5:
E s t i m a t e d R T T = 0.875 ∗ 0.0438 + 0.125 ∗ 0.13989 = 0.0558 EstimatedRTT = 0.875 * 0.0438 + 0.125 * 0.13989 = 0.0558 EstimatedRTT=0.875∗0.0438+0.125∗0.13989=0.0558
EstimatedRTT after the receipt of the ACK of segment 6:
E s t i m a t e d R T T = 0.875 ∗ 0.0558 + 0.125 ∗ 0.18964 = 0.0725 EstimatedRTT = 0.875 * 0.0558 + 0.125 * 0.18964 = 0.0725 EstimatedRTT=0.875∗0.0558+0.125∗0.18964=0.0725
前六个 TCP 区段的长度是多少?
Segment 1 sequence length: 566 − 1 = 565 566 - 1 = 565 566−1=565
Segment 2 sequence length: 2026 − 566 = 1460 2026 - 566 = 1460 2026−566=1460
Segment 3 sequence length: 3486 − 2026 = 1460 3486 - 2026 = 1460 3486−2026=1460
Segment 4 sequence length: 4946 − 3486 = 1460 4946 - 3486 = 1460 4946−3486=1460
Segment 5 sequence length: 6406 − 4946 = 1460 6406 - 4946 = 1460 6406−4946=1460
Segment 6 sequence length: 7866 − 6406 = 1460 7866 - 6406 = 1460 7866−6406=1460
对于整个跟踪包,收到的最小可用缓冲区空间量是多少? 缺少接收器缓冲区空间是否会限制发送方传送 TCP 区段?
在跟踪文件中是否有重传的区段? 为了回答这个问题,您检查了什么(在跟踪包中)?
接收器通常在 ACK 中确认多少数据? 您是否可以识别接收方每隔一个接收到的区段才发送确认的情况(参见本文第 250 页的表 3.2)。
TCP 连接的吞吐量(每单位时间传输的⫿节数)是多少? 解释你如何计算这个值。
现在让我们检查从客户端服务器的每单位时间发送的数据量。 而不是(繁琐地!)从 Wireshark 窗口中的原始数据计算这些数值,我们将使用 Wireshark 的TCP 图形工具 – 时序图(Stevens) - 来绘制数据。
在 Wireshark 的“捕获数据包列表”窗口中选择一个 TCP 区段。然后选择菜单:Statistics-> TCP Stream Graph-> Time-Sequence-Graph(Stevens)。您应该看到一个类似于下图的图,该图是根据 http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 中的跟踪数据包 tcp-ethereal-trace-1 中捕获的资料所创建的。(见前面的附注):
这里,每个点代表一个发送的 TCP 区段,绘制区段的序列号与发送的时间。 请注意,堆叠在一起的一组点表示发送方背靠背发送的一系列数据包。
根据在 http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 中的数据跟踪包tcp-ethereal-trace-1 内容回答以下有关 TCP 区段的问题