在本实验中,我们将详细研究著名的TCP协议的行为。我们将通过从您的电脑向远程服务器传输一份150KB 的文件(一份Lewis Carrol 的"爱丽丝梦游仙境"文本), 并分析TCP传输内容的发送和接收过程来实现。我们将研究TCP对序列和确认号的使用,以提供可靠的数据传输;我们将看到TCP的拥塞控制算法-慢后动和拥塞避免在过程中,我们将看看TCP的接收器发送流量控制的机制。我们还将简要地观察TCP连线的设置,我们还会研究计算机和服务器之间TCP连线的性能(吞吐量和往返时间)。
在开始本实验之前,您应该先查看课本中的第3.5和3.7节
1. 捕捉从计算机网络到远程服务器的批量TCP传输
在开始探索TCP之前,我们需要使用Wireshark获取从计算机到远程服务器的文件TCP传输的数据包跟踪。为此,您将访问一个Web页面,该页面允许您输入存储在计算机上的一个文件的名称(其中包含《爱丽丝在仙境》的ASCII文本),然后使用HTTP POST方法将该文件传输到Web服务器(请参阅本文中的2.2.3节)。我们使用POST方法而不是GET方法,因为我们希望将大量数据从您的计算机传输到另一台计算机。当然,在此期间,我们将运行Wireshark来获取从您的计算机发送和接收的TCP段的跟踪。
做如下操作:
- 启动浏览器。将这个文件存储在你电脑的某个地方。
- 接下来访问http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html。
- 你会看到类似下面这样的屏幕:
- 在此表单中使用Browse 按钮输入包含爱丽丝仙境的计算机上的文件名称(完整路径名称)(或手动执行)。
- 暂时不要点击"上传*alice.txt文件"*按钮。
- 现在启动Wireshark并开始抓包(capture -> start),然后在Wireshark抓包选项屏幕上按OK(我们不需要在这里选择任何选项)。
- 返回浏览器,点击"上传alice*.txt文件"*按钮,将文件上传到gaia.cs.umass.edu服务器。一旦文件上传完成,一个简短的祝贺消息将显示在你的浏览器窗口。
- 停止Wireshark抓包。您的Wireshark窗口应该类似于下面所示的窗口。
如果您无法在实际的网路上运行Wireshark ,则可以下载在作者的计算机上执行上述步骤时捕获的数据包跟踪文件。当您探索下面的问题时,即使您已经捕获了自己的传输内容并使用它来回答下面的问题,您也可能会发现这份下载的跟踪包很有参考价值。
2. 第一眼看到捕捉到的踪迹
在详细分析TCP连接的行为之前,让我们对跟踪进行一个高级视图。
- 首先,在Wireshark窗口顶部的显示过滤器规格窗口中输入"tcp"(小写,不带引号,输入后不要忘记按回车键),过滤Wireshark窗口中显示的数据包。
您应该看到的是计算机和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)。 在回答问题时,您应该提交用于回答问题的跟踪内的数据包的列印输出。加上适当的注释以解释您的答案。要印出数据包,请使用文件->列印,选择仅选定数据包,选择数据包摘要行,然后选择回答问题所需的最小数据包详细信息量。
-
将文件传输到gaia.cs.umass.edu的客户端计算机(源)使用的IP地址和TCP端口号是什么? 要回答这个问题,可能最简单的方法是选择一个HTTP消息,并使用"所选包头窗口的详细信息"(如果您不确定Wireshark窗口,请参阅"入门Wireshark"实验室中的图2)来探索用于携带该HTTP消息的TCP数据包的详细信息。
-
gaia.c.s.umass.edu的IP地址是多少?在哪个端口号上发送和接收这个连接的TCP段?
找到POST讯息后,发现目标IP为128.199.245.12 目标端口为80
作者的IP地址为 192.168.1.102 端口号为1161
如果您已经能够创建自己的跟踪,请回答以下问题:
- IP地址和TCP端口号是什么,您的客户端计算机(源)用来传输文件到gaia.cs.umass.edu?
这是我的抓包结果,显示目标IP为128.119.245.12 端口号为80
我的IP为192.168.5.9 端口号为37968
由于这个实验是关于TCP而不是HTTP的,让我们改变Wireshark的"捕获数据包列表"窗口,以便它显示有关包含HTTP消息的TCP段的信息,而不是关于HTTP消息的信息。要让Wireshark执行此操作,请选择"Analyze->Enabled Protocols"。现在你应该看到一个Wireshark窗口,如下所示:
这就是我们要找的------在你的电脑和gaaia.cs.umass.edu之间发送的一系列TCP段。我们将使用您捕获的数据包跟踪(和/或数据包跟踪tcp-ethereal-trace-1在http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip;(参见前面的脚注),以便在本实验的其余部分研究TCP行为。
3. TCP基础知识
请回答以下关于TCP段的问题:
-
用于在客户端计算机和gaia.c.s.umass.edu之间发起TCP连接的TCP SYN段的序号是多少?在段中是什么将段标识为SYN段?
在首个建立连接的TCP请求中,SYN标志位为1。
段中的倒数第2bit设置为SYN标识位。
-
gaia.c.s.umass.edu发送给客户端计算机的SYNACK段的序列号是多少作为对SYN的回应?SYNACK段中的确认字段的值是多少?gaia.cs.umass.edu是如何确定这个值的?在段中是什么将段标识为SYNACK段?
SYNACK的序号为0,确认字段值为1,并且SYN的字段值也为1,说明服务器收到了我的连接请求,并返回SYNACK确认。
-
包含HTTP POST命令的TCP段的序号是多少?注意,为了找到POST命令,您需要挖掘Wireshark窗口底部的数据包内容字段,在其DATA字段中查找带有"POST"的段。
包含POST的字段的TCP序号为151117
-
考虑包含HTTP POST的TCP段作为TCP连接中的第一个段。tcp连接(包括包含HTTP POST的段)的前六个段的序列号是什么?每个片段是什么时候发送的?给定每个TCP报文段发送的时间和接收报文段确认的时间之间的差异,这六个报文段的RTT值是多少?收到每个ACK后,EstimatedRTT的值(见3.5.3节)是多少?假设EstimatedRTT的值等于第一个片段的测量RTT,然后使用第242页上的EstimatedRTT方程计算所有后续片段。
- *注意:**Wireshark有一个很好的功能,允许您绘制每个发送的TCP段的RTT。*在"捕获数据包列表"窗口中选择从客户端发送到gaia.cs.umass.edu服务器的TCP段。选择"统计信息->TCP流图->往返时间图"。
由于我的抓包结果干扰太多,我下面选择用作者的抓包结果。
前六个段的seq分别是:156469,157929,159389,160849,162309,163769
可以看到服务器返回ACK=159389的时间为25.867638
返回ACK=1622309的时间为25.959852
RTT取平均值为0.14134mm
-
前六个TCP区段的长度是多少?
Len~1,2,3,4,5~=1460 Len~6~=272
-
对于整个跟踪,接收端最小可用缓冲区大小是多少?接收方缓冲空间的不足是否会限制发送方?
最小窗口应该是1460. 包的实际大小小于缓冲区大小,所以不会限制发送方。
-
跟踪文件中是否有重传的片段?为了回答这个问题,你(在跟踪中)检查了什么?
没有重传片段。 发送端IP为192.168.1.102,查看这个IP发送的所有包序号都没有重复。
-
在ACK中,接收方通常要确认多少数据?你能识别接收方正在对其他接收段进行跟踪的情况吗(参见文本中第250页的表3.2)。
接收方累计确认
-
TCP连接的吞吐量(单位时间传输的字节数)是多少?解释一下你是如何计算这个值的。
4. TCP拥塞控制在行动
现在让我们检查从客户端服务器的每单位时间发送的数据量。而不是(繁琐地! )从Wireshark窗口中的原始数据计算这些数值,我们将使用Wireshark的TCP图形工具-时序图( Stevens) - 来绘制数据。
- 在Wireshark的"抓包列表"窗口中选择一个TCP段。然后选择菜单:*统计->TCP流图->时间序列图(史蒂文斯)。你应该会看到一个与下图类似的图,它是根据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段回答以下问题
- 使用*时间序列图(史蒂文斯)*绘图工具来查看从客户端发送到gaia.cs.umass.edu服务器的片段的序列号与时间图。你能确定TCP的慢启动阶段开始和结束的位置,以及拥塞避免接管的位置吗?评论测量数据与我们在课文中研究的TCP的理想行为的不同之处。
看图看不出,我无法确认 14. 请回答上面两个问题,了解你将文件从计算机传输到gaia.css.umass.edu时收集到的踪迹