实验目的
通过实验熟悉 Wireshark 抓包软件的使用方法,理解 TCP 传输过程,以及慢启动、拥塞避免等相关技术。
实验环境
1、操作系统:几乎任意 windows 版本。本实验是在 windows 下实现的。
2、所需软件:wireshark-setup-1.10.2.
实验内容
1、在 windows 环境进行 Wireshark 抓包。
2、在 windows 环境 Wireshark 窗口中查看各种协议下的数据包。
3、在 windows 环境上传文件到服务器,同时观察 TCP 传输过程。
实验步骤
- Wireshark 的安装
- 捕捉从自己 PC 机到远程服务器的 TCP 传输
(1)登录网站82.157.139.98/login.php
(2)进入网站的upload作业提交页面
按要求修改文件名,进行提交,先不要着急按“提交作业”按钮
用 Wireshark 开启数据包捕捉。
开始抓包之前,进入 Wirshark 的 Capture->Options,选用WLAN,去掉“Hide capture info dialog” 前面的“√”,以便在抓包过程中看到数据框
安装好 Wireshark 后,点击 Capture->Start 开始抓包。回到浏览器,按“ 提交作业”按钮来上传文件。一旦文件被上载成功,将会有一个祝贺信息出现。
停止 Wireshark 数据包捕捉。你的 Wireshark 窗口会出现类似下面的样式:
左上角的过滤器(filter)工具栏中输入“ip.dst==82.157.139.98 or ip.src==82.157.139.98”的公网IP后回车,即可初步筛选所需数据
3.查看捕获的跟踪
在Wireshark窗口上方的过滤器(filter)窗口输入上面提到的合适的过滤条件 “and tcp”
1)在这些消息中,看到包含 SYN 消息的初始的三次握手过程。
2)可能会看到从你的计算机发送到82.157.139.98的一个 HTTP POST 消息(需要把
过滤条件“and tcp”改为“and http”)
3)从82.157.139.98返回到你计算机的 TCP ACK 段。
将文件输出并保存
回答以下有关TCP 报文段的问题:
1、你的客户端电脑传送文件到 82.157.139.98的 IP 地址和端口是什么?从82.157.139.98接收文件的 IP 地址和端口是什么?
答:传送文件的ip地址是10.149.1.147,端口是62128
接收文件的ip地址是82.157.139.98,端口是80
2、用来初始化客户端电脑和82.157.139.98 的 TCP 连接的 TCP SYN 报文段的序号是什么?在报文段中,哪个地方表明这是一个 SYN 报文段?
答:SYN报文段的序号Seq=0,Flags字段中SYN位为1,表明了这是一个SYN报文段。
3、回复 SYN 报文段时,由 82.157.139.98发送的 SYNACK 报文段的序号是什么?在SYNACK 报文段中的 ACKnowledgement 域的值是什么?82.157.139.98是如何确定这个值的?表明这个段是 SYNACK 的标志位或者符号是什么?
答:SYNACK 序号是0;Ack值为1;其等于SYN 报文段中Seq值加1,0+1=1;
标志位是Flags = 0x012,转换为二进制是00010010,对应的SYN和ACK标志位是1
4、包含 HTTP POST 命令的 TCP 段的序号是多少?注意,要找到 POST 命令,你需要在 Wireshark 窗口的底部发掘这个数据包内容域,找到一个在其 DATA 域中有标识POST 的段。
答:包含POST命令的TCP报文段的序号是1
5、仔细思考一下作为 TCP 连接的第一个报文段的包含 HTTP POST 的 TCP 报文段。 TCP 连接(包括包含 HTTP POST 的报文段)的开头6个报文段的序号是多少? 每个报文段都在什么时间发送?每个报文段接收到 ACK 的时间是多少?6个报文段:
答:
序号是19,发送时间是3.79416800
序号是20,发送时间是3.79429600
序号是21,发送时间是3.79429600
序号是22,发送时间是3.79429600
序号是23,发送时间是3.79429600
序号是24,发送时间是3.79429600
ACK:
接收第一个报文段的时间是3.81224900,ack=957表示seq=957之前的数据已经收到,即第一个报文段的数据。
收到第六个的报文段时间是3.81224900,ack=8017,表示seq=8017之前的数据都已收到。第六个报文段的序号是6605,长度是1412,最后一个序号是8016,即第六个报文段及其之前的都已收到。并不是每一个报文段都有对应的ACK,因为有可能1个ACK对之前几个报文段进行回应。
6、开始的 6 个 TCP 报文段的长度各自是多少?
答:第一个:Len = 956,长度 = 956 + 20 = 976
第二个:Len = 1412,长度 = 1412 + 20 = 1432
第三个:Len = 1412,长度 = 1412 + 20 = 1432
第四个:Len = 1412,长度 = 1412 + 20 = 1432
第五个:Len = 1412,长度 = 1412 + 20 = 1432
第六个:Len = 1412,长度 = 1412 + 20 = 1432
7、在整个跟踪过程中,在接收端广告(advertise)的可用缓存空间的最小值是多少? 接收端有没有因缓存空间不足而限制发送端的发送?
答:接收窗口最小是131072,而发送窗口大小一直是512,所以没有限制
8、在跟踪文件中,有重传的报文段么?回答这个问题,你需要检查哪个地方?
答:没有,因为可以看到sequence number 没有重复的。
检查客户机发出报文段的sequence number字段即可,如果有重复的sequence number,则证明发生了相同数据的重传。
9、接收方在一个 ACK 中,通常确认多少数据?你能辨别出这样一种情形吗:即接收方对收到的报文段,每隔一个确认一次?
答:确认三到四个;ack和发送的seq的值隔一个相同,就是每隔一个确认一次。
10、这个 TCP 连接的吞吐量(每单位时间传输的字节数)是多少?解释你是如何计算这个数值的?
答:最后一个报文段序号是759929,时间是3.91238900
第一个报文段的序号是1,时间是3.79416800
吞吐量759929/(3.91238900-3.79416800) = 6428037.319934699
TCP 拥塞控制
用Time-Sequence-Graph(Stevens)中的画图工具观察从客户端发送到82.157.139.98服务器的TCP段的序列号-时间图。你怎样判断TCP的慢启动(slowstart)开始和结束?拥塞避免在什么地方开始起作用的?注意在实际的跟踪中,不是所有的都像教材那样简单漂亮的形式。同时还要注意在Time-Sequence-Graph(Stevens)中纵坐标所代表的变量与教材中是否不同。
答:慢启动主要特点是指数增长,每次TCP接收窗口收到确认时都会增长,增加的大小就是已确认段的数目。
图中的纵坐标是seq序号,是累加起来的值,所以在一个时间对应的是发送量的前缀和,图中可以看到是1,3,7,15,31,56 …… ,对应的窗口是1,2,4,8,16,25,可以看到前5个时间段是慢启动,到了第六个也就是0.12s的时候增加变慢了,是拥塞避免起作用了。
纵坐标代表的变量与书中不同,这里是发送出去的报文段的seq序号,书中是拥塞窗口的大小。
总结这次实验中所得到的 TCP 数据与我们在教材中所学的理想情况有什么不同?
实验中没有发生网络拥塞,而且接收窗口大小一直大于发送窗口大小,课本中出现的快恢复快重传等在现实中同时出现的概率很小,因为现在的网络带宽很大,书本上是为了教学才把所有情况都画在一张图中。
发送数量较少,而且在局域网内流量并没有很大,所以数据传递一次就成功了,没有发生快重传等情况。
每一个ack确认三到四个,不是教材上的一个ack确认一个。