实验三、TCP与UDP
实验目的:研究TCP与UDP的详细内容 一、TCP
我们将通过由你的计算机传输150KB的文件(包含Lewis Carrol’s的Alice’s Adventures in
Wonderland)到远方服务器的过程来跟踪并分析在TCP数据段,我们将研究TCP的序列号和确
认号在提供可靠性传输过程中的用处,将看到TCP堵塞控制算法—慢慢开始并避免堵塞,TCP接收端发布控制机制,此外,还需要考虑TCP连接的建立,并考察你的计算机和服务器TCP连接的性能(网络流通量和数据来回时间)
1.1 捕捉在你的计算机到远程服务器TCP传输中的数据块
在开始研究TCP之前,我们需要使用Wireshark来得到你的计算机到远程服务器TCP传输中
的数据块。这可以通过一个网页来输入存储在你计算机上的文件名,然后将这个文件(Alice in
Wonderlan的ASCII)通过HTTP POST方法传到Web服务器中。在这儿,之所以使用POST而不
用GET方法。是因为我们希望从一个计算机到另一个计算机中传输大的数据。我们自然也要在跟踪TCP段发送和接收过程中运行Wireshark。
按以下步骤进行实验 ? ? ?
准备一个 ASCII文本文件(文件大于10k),保存在你的计算机某个位置上。 下一步,进入http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html. 你看到如下页面
? ? ?
使用 “Browse”按钮输入文件名(全路径加文件名),这个文件包含“Alice in Wonderland”,现在暂时不要按“Upload alice.txt file”按钮。 现在启动Wireshark,并开始进行分组捕捉(Capture->Options)
返回到浏览器端。按“Upload alice.txt file”按钮,上传文件到gaia.cs.umass.edu 服务器
中,一旦文件上传完成,在浏览器窗口上将显示一条简单的祝贺信息。 ?
停止Wireshark分组捕捉,计算机上Wireshark的窗口类似下图这样。
1.2 初步查看捕捉到的跟踪信息
在对TCP连接过程进行详细分析前,首先对跟踪的信息进行高层次的浏览。首先,在
Wireshark 窗口中输入tcp(小写,别忘了输入回车)过滤所显示的分组。这样,我们看到的将是在你的计算机和gaia.cs.umass.edu之间的TCP和HTTP消息。我们应该能看到开始的三次包含SYN握手信息,也能看到发生在你的计算机与gaia.cs.umass.edu 之间发送的HTTP POST消息和一序列的HTTP持续消息。 打开Wireshark分组捕捉到的文件tcpethereal-trace-1(在
http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip 上) ,回答下列问题。 1) 传输文件到gaia.cs.umass.edu的计算机(源)的IP地址和TCP端口号是多少?为了回答这个
问题,比较容易的可能途径是选择HTTP消息且浏览用来传输HTTP消息的TCP分组的详细信息,这可以通过“details of the selected packet header window”实现(参考以前实验) 2) gaia.cs.umass.edu的IP地址是多少?在这个连接中,TCP段发送接收的端口号是多少?
如果你能够创建自己的跟踪记录,回答以下问题。 3) 传输文件到gaia.cs.umass.edu的计算机(源)的IP地址和TCP端口号是多少?
既然本实验关注TCP而不是HTTP,我们改变Wireshark的“listing of captured packets”窗口,
这样,它就能够显示包含HTTP消息的TCP段,而不是HTTP消息,要想做到这点,只需要在Wireshark上选择Analyze->Enabled Protocols,然后再HTTP选择框中不选中,最后按OK按钮,你将能看到类似以下画面。
这就是我们看到的在你计算机与gaia.cs.umass.edu之间发送一系列TCP段的情况,接下来,我们将使用已经捕捉到的分组(或者在http://gaia.cs.umass.edu/wireshark-labs/wiresharktraces.zip 上的tcp-ethereal-trace-1)来研究TCP的状态。
1.3 TCP 基础部分
针对TCP段,回答下列问题。
4) 用来发起在客户机到gaia.cs.umass.edu 之间TCP连接TCP SYN段的系列号是多少?标识SYN
作为那一段是什么?
5) 为了响应SYN,由gaia.cs.umass.edu到客户端计算机发送的SYNACK系列号是多少?SYNACK段
的确认域值为多少?gaia.cs.umass.edu 怎样决定这个值?标识SYNACK段在本段中是什么段?
6) 包含HTTP POST的TCP段的序列号是多少?请注意,为了找到POST命令,我们要在位于
Wireshark底部的分组内容区的DATA域中挖掘和寻找带“POST”的内容。
7) 考察在TCP连接作为第一段包含HTTP POST的TCP段,TCP连接中的前6个段的序列号是多少?
(包括含HTTP POST的段),每个段何时发送?何时收到每个段的相应(ACK)?给出每个TCP段间发送的时间差,及何时收到段的相应,前6个段的通信来回时间(RTT)是多少?收到每个确认(ACK)后,估算出的返回时间EstimatedRTT值是多少(计算公式在课堂上给出),假设第一个段的EstimatedRTT等于测量过的RTT,根据公式计算各个字段的返回时间EstimatedRTT
注:Wireshark有一个很好的功能,这就是允许我们对每个段绘出返回时间RTT的图。在从客户端发送到服务器gaia.cs.umass.edu中“捕捉到的分组”窗口中选择TCP段,然后选择
Statistics->TCP Stream Graph->Round Trip Time Graph. 8) 前6个TCP段的长度是多少?
9) 对整个过程中用来跟踪接收发布的最小可用的缓冲空间
10) 在跟踪文件中有没有重发的段?为了回答此问题,你要(在文件中)检查什么
11) 在接收端ACK中的确认数据由多少?你能分辨出接收段是确认的其他接收段这种情况吗? 12) TCP连接的流通率(单位时间传输的字节数)是多少?,解释你是如何计算的。
1.4 TCP堵塞控制
我们来考察从客户端到服务器单位时间传输的数据,不用再Wireshark窗口中用原始数据来在Wireshark的捕捉到的分组列表(listing of captured-packets)窗中选择一个TCP段,然后选计算,我们使用Wireshark的TCP图形工具(Time-Sequence-Graph(Stevens))来绘制数据图。 择菜单“Statistics->TCP Stream Graph-> Time-Sequence-Graph(Stevens)”我们将看到类似以下图形的画面。这个图形是在http://gaia.cs.umass.edu/wireshark-labs/wireshark-traces.zip的跟踪文件tcp-etherealtrace-1基础上得出的。
在上图中,每个点代表TCP 段的发送,画出段的序列号及其发送的时间,一些列点互相堆起。这代表在发送端紧跟着发送一系列分组。 二、UDP
现在,我们对UDP协议进行快速的扫描,众所周知,UDP是直接的流线型协议,因为UDP简单,本实验将快速掠过,按以下步骤进行。
? ? ? ?
启动Wireshark的分组捕捉(按以前试验进行)
进行有关操作,使得你的主机与服务器发送和接收几个分组。(用到nslookup命令) 停止分组捕捉。设置分组嗅探器的过滤器使得Wireshark只显示发送和接收的UDP分组。 拾取一些这样的分组,并尽可能在窗口中展开这些UDP域。
在回答问题的时候,应该打印出与你要回答的问题相关的跟踪分组,在打印件上作注解来解释答案,需要打印分组的话,使用菜单File->Print,选择Selected。
1) 选择一个分组,从它出发,确定在UDP头部分有多少个域,并将这些域直接命名。 2) 从分组主体域中,确定每个分组头部域中的长度(字节数)
3) 在长度区域中的长度值是什么长度?通过 捕捉到的UDP分组来验证你的断言。 4) 包含在UDP载荷中的最大字节数是多少? 5) 最大可能的源端口号是多少?
6) UDP的协议号是多少?同时用16进制和10进制表示(为了回答此问题,需要查找IP头部分) 7) 在Google中搜索“UDP”,确定UDP效验和计算的范围
8) 考察一对UDP分组,第一个分组由你的主机发出,第二个分组是响应第一个分组,描述这两
个分组的端口号之间的关系。
附加问题
捕捉一个小型的UDP分组,手动验证这个分组的效验和,写出所有要完成的工作和具体步骤。