实验一:TCP、ICMP协议分析实验
在这个实验中,我们将通过分析TCP的一个片段发送和接收从你的电脑传送到远程服务器的一个大小为150KB的文件来研究TCP的特性和执行过程,同时也将探索ICMP协议,由ping程序产生的ICMP 消息和ICMP 消息的格式与内容。在开始之前请打开我们的实验工具Wireshark,点击“捕获”—“选项”选择要捕捉的输入接口,选择“在所有接口上使用混杂模式”,然后点击“开始”,这样可以有选择的捕获只和你有关系的数据包。
一、捕获一个从你的电脑到远程服务器的TCP数据
在我们开始对TCP的研究之前,我们需要利用Wireshark来捕获一个TCP的数据包。这个包从你的电脑向远程服务器传输一个文件,我们是使用POST方式而不用GET方法是因为我们要传输一个很大数量的数据。 现在按以下步骤做: 1. 打开你的浏览器。输入:
你将会看到Alice in Wonderland的文本版,然后点击鼠标右键另存到你的电脑中; 2. 接下来输入: ;
3. 你将会看到一个像这样的屏幕:
4. 按“选择文件”按钮选取你刚才保存的文件,请先不要按“Upload alice.txt file”按钮; 5. 现在打开Wireshark,开始数据包的捕获;
6. 再回到你的浏览器,按下“Upload alice.txt file”按钮向gaia.cs.umass.edu服务器来上载文件(一旦这个文件被上载,一个短小的祝词将会显示在你的浏览器窗口); 7. 停止Wireshark的捕获,你的Wireshark窗口应该和下面所示的窗口相类似:
来看一下捕获的数据,在主窗口顶部的“应用显示过滤器”中输入“tcp”以用来过滤包。你所看见的是你的电脑和gaia.cs.umass.edu之间的一系列TCP和HTTP消息。你可以看到含有SYN消息的最初的三次握手,还可以看到一个HTTP POST消息和一系列从你的电脑发送到gaia.cs.umass.edu的HTTP附加部分的消息。同时,你也可以看到从gaia.cs.umass.edu 返回到你的电脑的TCP ACK片段。
8. 点击“文件”—“保存”选项将数据保存,命名为tcp-1。 通过观察所捕获数据包的内容回答以下问题:
Q1. 你的电脑向gaia.cs.umass.edu 传输文件时所用的IP地址和TCP端口号是多少? A1:IP地址:182.138.127.2
TCP端口号:49508
Q2. gaia.cs.umass.edu 的IP地址是多少?该服务器的哪个端口发送和接收TCP片段? A2:IP地址:128.119.245.12
发送和接收TCP片段端口:80
Q3. 用来在你的电脑和gaia.cs.umass.edu 之间开始TCP连接的TCP SYN片段的序列号是多少?在片段中怎样识别这个片段是一个SYN片段?
A3:开始TCP连接的TCP SYN片段的序列号:2291245470(绝对序列号)
识别片段方式:Syn设置为1
Q4. gaia.cs.umass.edu回复SYN的SYN ACK片段的序列号是多少?gaia.cs.umass.edu怎样测定这个ACK的值?在片段中靠什么来识别这是一个SYN ACK片段? A4:Sequence number:1034370948(绝对序列号)
Acknowledgement number:2291245471(绝对序列号) 测定方式:Acknowledgement number比SYN的序列号多1 识别方式:Acknowledgement和Syn均设置为1
Q5. 看到的数据包中有HTTP数据包,其请求方法是什么?其TCP片段的序列号是多少? A5:请求方法:POST
TCP序列号:2712239079(参考下图中随便选一个序列号)
Q6. FIN ACK片段有什么作用?简述终端连接的握手过程。 A6:作用:关闭连接
终端连接握手过程如下:
(1)A发送一个FIN,用来关闭A到B的数据传送。
(2)B收到这个FIN,发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)B关闭与A的连接,发送一个FIN给A。
(4)A发回ACK报文确认,并将确认序号设置为收到序号加1。
Q7.(附加题)window size value、calculated window size和window size scaling factor之间有什么关系?为什么要这样来计算窗口的值? A7:window size value:窗口大小;
calculated window size:计划窗口大小; window size scaling factor:窗口大小缩放因子;
三者之间的关系为:window size scaling factor=calculated window size/ window size value。Window size value为TCP首部字段窗口填写的值,计算后的calculated window size是实际可以使用的值。
二、ICMP与ping
现在按以下步骤做: 1. 打开命令提示符;
2. 打开Wireshark,开始捕捉数据包;
3. 在命令提示符里输入:ping -n 10 gaia.cs.umass.edu(参数“-n 10”说明需要发送10 个ping 消息);
4. 当ping程序终止后,停止用Wireshark捕获数据包,Wireshark 窗口应该和下图类似:
来看一下捕获的数据,在主窗口顶部的“应用显示过滤器”中输入“icmp”以用来过滤包。我们可以看到源端发出了10个查问包并收到了10个响应,可以对每一个响应源端计算往返时间(RTT),也不妨计算一下这10个包平均RTT。注意到包列表显示出20个包:源端发出的10个ping询问和收到的10个ping 响应。现在让我们展开由我们电脑
发出的第一个包,在上图中包内容区提供了这个包的信息。我们看到包内的IP数据包有协议号01(这是ICMP 的协议号),这说明这个IP数据包承载的是一个ICMP包。然后我们展开ICMP协议部分的信息,我们观察到这个ICMP包的Type为8而Code为0,这称为一个ICMP“请求”包。
5. 点击“文件”—“保存”选项将数据保存,命名为icmp-1。 通过观察所捕获数据包的内容回答以下问题:
Q8. 你主机的IP地址是什么?远程主机的IP地址是什么? A8:主机IP:182.138.127.2 远程主机IP:128.119.245.12
Q9. ICMP包有没有源和目标端口号?为什么?
A9:ICMP是网络层协议,而端口号是应用层协议所有的,所以一个ICMP包没有源和目
标端口号。
Q10. 检查由你主机发送的一个ping请求包。ICMP type 和code 是多少?Checksum、sequence number和identifier 字段的值各为多少?这个ICMP数据包的数据长度是多少? A10: ICMP type:8
code:0
Checksum:0x4d55
sequence number:6(BE)1536(LE) identifier:1(BE) 256(LE) 数据长度:32比特
Q11. TTL值代表什么含义? 你主机发送ping请求包的TTL值是多少?都一样吗?为什么?
A11:主机发送ping请求包的TTL值为64,每个请求包TTL都一样。
Q12. 检查相应的ping回应包,ICMP type和code是多少?若type为3,code为0表示什么意思?
A12:ICMP type:0
code:0